import * as React from 'react'; import dayjs from 'dayjs'; import { TopicMessage } from 'generated-sources'; import JSONViewer from 'components/common/JSONViewer/JSONViewer'; import Dropdown from 'components/common/Dropdown/Dropdown'; import DropdownItem from 'components/common/Dropdown/DropdownItem'; import useDataSaver from 'lib/hooks/useDataSaver'; type Tab = 'key' | 'content' | 'headers'; const Message: React.FC<{ message: TopicMessage }> = ({ message: { timestamp, timestampType, offset, key, partition, content, headers, }, }) => { const [isOpen, setIsOpen] = React.useState(false); const [activeTab, setActiveTab] = React.useState('content'); const { copyToClipboard, saveFile } = useDataSaver( 'topic-message', content || '' ); const toggleIsOpen = () => setIsOpen(!isOpen); 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 activeTabContent = () => { switch (activeTab) { case 'content': return content; case 'key': return key; default: return JSON.stringify(headers); } }; return ( <> {offset} {partition} {key}
{dayjs(timestamp).format('MM.DD.YYYY HH:mm:ss')}
{content} } right > Copy to clipboard Save as a file {isOpen && (
Timestamp Type
{timestampType}
Timestamp
{timestamp}
)} ); }; export default Message;