import React from 'react'; import { TopicMessage } from 'generated-sources'; import useDataSaver from 'lib/hooks/useDataSaver'; import MessageToggleIcon from 'components/common/Icons/MessageToggleIcon'; import IconButtonWrapper from 'components/common/Icons/IconButtonWrapper'; import styled from 'styled-components'; import { Dropdown, DropdownItem } from 'components/common/Dropdown'; import { formatTimestamp } from 'lib/dateTimeHelpers'; import MessageContent from './MessageContent/MessageContent'; import * as S from './MessageContent/MessageContent.styled'; const StyledDataCell = styled.td` overflow: hidden; white-space: nowrap; text-overflow: ellipsis; max-width: 350px; min-width: 350px; `; const ClickableRow = styled.tr` cursor: pointer; `; export interface Props { message: TopicMessage; } const Message: React.FC = ({ message: { timestamp, timestampType, offset, key, partition, content, valueFormat, keyFormat, headers, }, }) => { const [isOpen, setIsOpen] = React.useState(false); const savedMessageJson = { Content: content, Offset: offset, Key: key, Partition: partition, Headers: headers, Timestamp: timestamp, }; const savedMessage = JSON.stringify(savedMessageJson, null, '\t'); const { copyToClipboard, saveFile } = useDataSaver( 'topic-message', savedMessage || '' ); const toggleIsOpen = () => setIsOpen(!isOpen); const [vEllipsisOpen, setVEllipsisOpen] = React.useState(false); return ( <> setVEllipsisOpen(true)} onMouseLeave={() => setVEllipsisOpen(false)} onClick={toggleIsOpen} > {offset} {partition}
{formatTimestamp(timestamp)}
{key} {content} {vEllipsisOpen && ( Copy to clipboard Save as a file )}
{isOpen && ( )} ); }; export default Message;