import { TopicMessageTimestampTypeEnum, SchemaType } from 'generated-sources'; import React from 'react'; import EditorViewer from 'components/common/EditorViewer/EditorViewer'; import BytesFormatted from 'components/common/BytesFormatted/BytesFormatted'; import { formatTimestamp } from 'lib/dateTimeHelpers'; import * as S from './MessageContent.styled'; type Tab = 'key' | 'content' | 'headers'; export interface MessageContentProps { messageKey?: string; messageKeyFormat?: string; messageContent?: string; messageContentFormat?: string; headers?: { [key: string]: string | undefined }; timestamp?: Date; timestampType?: TopicMessageTimestampTypeEnum; } const MessageContent: React.FC = ({ messageKey, messageKeyFormat, messageContent, messageContentFormat, headers, timestamp, timestampType, }) => { 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 keySize = new TextEncoder().encode(messageKey).length; const contentSize = new TextEncoder().encode(messageContent).length; const contentType = messageContent && messageContent.trim().startsWith('{') ? SchemaType.JSON : SchemaType.PROTOBUF; return ( Key Content Headers Timestamp {formatTimestamp(timestamp)} Timestamp type: {timestampType} Content {messageContentFormat} Size: Key {messageKeyFormat} Size: ); }; export default MessageContent;