import React from 'react'; import EditorViewer from 'components/common/EditorViewer/EditorViewer'; import BytesFormatted from 'components/common/BytesFormatted/BytesFormatted'; import { SchemaType, TopicMessageTimestampTypeEnum } from 'generated-sources'; import { formatTimestamp } from 'lib/dateTimeHelpers'; import * as S from './MessageContent.styled'; type Tab = 'key' | 'content' | 'headers'; export interface MessageContentProps { messageKey?: string; messageContent?: string; headers?: { [key: string]: string | undefined }; timestamp?: Date; timestampType?: TopicMessageTimestampTypeEnum; keySize?: number; contentSize?: number; keySerde?: string; valueSerde?: string; } const MessageContent: React.FC = ({ messageKey, messageContent, headers, timestamp, timestampType, keySize, contentSize, keySerde, valueSerde, }) => { const [activeTab, setActiveTab] = React.useState('content'); const activeTabContent = () => { switch (activeTab) { case 'content': return messageContent; case 'key': return messageKey; default: return JSON.stringify(headers); } }; const handleKeyTabClick = (e: React.MouseEvent) => { e.preventDefault(); setActiveTab('key'); }; const handleContentTabClick = (e: React.MouseEvent) => { e.preventDefault(); setActiveTab('content'); }; const handleHeadersTabClick = (e: React.MouseEvent) => { e.preventDefault(); setActiveTab('headers'); }; const contentType = messageContent && messageContent.trim().startsWith('{') ? SchemaType.JSON : SchemaType.PROTOBUF; return ( Key Value Headers Timestamp {formatTimestamp(timestamp)} Timestamp type: {timestampType} Key Serde {keySerde} Size: Value Serde {valueSerde} Size: ); }; export default MessageContent;