import {isNil} from 'lodash'; import type {TopicMessageEnhanced} from '../../../../../../types/api/topic'; import {EMPTY_DATA_PLACEHOLDER} from '../../../../../../utils/constants'; import { TopicDataTimestamp, codecColumn, messageColumn, metadataColumn, originalSizeColumn, sizeColumn, tsDiffColumn, } from '../../columns/columns'; import {useTopicDataQueryParams} from '../../useTopicDataQueryParams'; import {TOPIC_DATA_COLUMNS_TITLES} from '../../utils/constants'; import {TOPIC_DATA_COLUMNS_IDS} from '../../utils/types'; function valueOrPlaceholder( value: string | number | undefined, placeholder = EMPTY_DATA_PLACEHOLDER, ) { return isNil(value) ? placeholder : value; } type TopicMessageDetailsField = { name: string; header?: React.ReactNode; render: (props: {row: TopicMessageEnhanced}) => React.ReactNode; }; const partitionColumn: TopicMessageDetailsField = { name: TOPIC_DATA_COLUMNS_IDS.PARTITION, header: TOPIC_DATA_COLUMNS_TITLES[TOPIC_DATA_COLUMNS_IDS.PARTITION], render: () => { return ; }, }; const offsetColumn: TopicMessageDetailsField = { name: TOPIC_DATA_COLUMNS_IDS.OFFSET, header: TOPIC_DATA_COLUMNS_TITLES[TOPIC_DATA_COLUMNS_IDS.OFFSET], render: ({row}) => { return valueOrPlaceholder(row.Offset); }, }; const timestampCreateColumn: TopicMessageDetailsField = { name: TOPIC_DATA_COLUMNS_IDS.TIMESTAMP_CREATE, header: TOPIC_DATA_COLUMNS_TITLES[TOPIC_DATA_COLUMNS_IDS.TIMESTAMP_CREATE], render: ({row}) => , }; const timestampWriteColumn: TopicMessageDetailsField = { name: TOPIC_DATA_COLUMNS_IDS.TIMESTAMP_WRITE, header: TOPIC_DATA_COLUMNS_TITLES[TOPIC_DATA_COLUMNS_IDS.TIMESTAMP_WRITE], render: ({row}) => , }; const producerIdColumn: TopicMessageDetailsField = { name: TOPIC_DATA_COLUMNS_IDS.PRODUCERID, header: TOPIC_DATA_COLUMNS_TITLES[TOPIC_DATA_COLUMNS_IDS.PRODUCERID], render: ({row}) => { return valueOrPlaceholder(row.ProducerId); }, }; const seqNoColumn: TopicMessageDetailsField = { name: TOPIC_DATA_COLUMNS_IDS.SEQNO, header: TOPIC_DATA_COLUMNS_TITLES[TOPIC_DATA_COLUMNS_IDS.SEQNO], render: ({row}) => { return valueOrPlaceholder(row.SeqNo); }, }; const ipColumn: TopicMessageDetailsField = { name: TOPIC_DATA_COLUMNS_IDS.IP, header: TOPIC_DATA_COLUMNS_TITLES[TOPIC_DATA_COLUMNS_IDS.IP], render: ({row}) => { return valueOrPlaceholder(row.Ip); }, }; function PartitionId() { const {selectedPartition} = useTopicDataQueryParams(); return selectedPartition; } export const fields: TopicMessageDetailsField[] = [ partitionColumn, offsetColumn, timestampCreateColumn, timestampWriteColumn, tsDiffColumn, metadataColumn, messageColumn, sizeColumn, originalSizeColumn, codecColumn, producerIdColumn, seqNoColumn, ipColumn, ];