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 { useSearchParams } from 'react-router-dom'; 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; } const MessageContent: React.FC = ({ messageKey, messageContent, headers, timestamp, timestampType, keySize, contentSize, }) => { const [activeTab, setActiveTab] = React.useState('content'); const [searchParams] = useSearchParams(); const keyFormat = searchParams.get('keySerde') || ''; const valueFormat = searchParams.get('valueSerde') || ''; 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 {keyFormat} Size: Value Serde {valueFormat} Size: ); }; export default MessageContent;