import './useTableView.styles.scss'; import Convert from 'ansi-to-html'; import { Typography } from 'antd'; import { ColumnsType } from 'antd/es/table'; import dayjs from 'dayjs'; import dompurify from 'dompurify'; import { useIsDarkMode } from 'hooks/useDarkMode'; import { FlatLogData } from 'lib/logs/flatLogData'; import { useMemo } from 'react'; import LogStateIndicator from '../LogStateIndicator/LogStateIndicator'; import { getLogIndicatorTypeForTable } from '../LogStateIndicator/utils'; import { defaultListViewPanelStyle, defaultTableStyle, getDefaultCellStyle, } from './config'; import { TableBodyContent } from './styles'; import { ColumnTypeRender, UseTableViewProps, UseTableViewResult, } from './types'; const convert = new Convert(); export const useTableView = (props: UseTableViewProps): UseTableViewResult => { const { logs, fields, linesPerRow, appendTo = 'center', activeContextLog, activeLog, isListViewPanel, } = props; const isDarkMode = useIsDarkMode(); const flattenLogData = useMemo(() => logs.map((log) => FlatLogData(log)), [ logs, ]); const columns: ColumnsType> = useMemo(() => { const fieldColumns: ColumnsType> = fields .filter((e) => e.name !== 'id') .map(({ name }) => ({ title: name, dataIndex: name, key: name, render: (field): ColumnTypeRender> => ({ props: { style: isListViewPanel ? defaultListViewPanelStyle : getDefaultCellStyle(isDarkMode), }, children: ( {field} ), }), })); if (isListViewPanel) { return [...fieldColumns]; } return [ { title: 'timestamp', dataIndex: 'timestamp', key: 'timestamp', // https://github.com/ant-design/ant-design/discussions/36886 render: (field, item): ColumnTypeRender> => { const date = typeof field === 'string' ? dayjs(field).format('YYYY-MM-DD HH:mm:ss.SSS') : dayjs(field / 1e6).format('YYYY-MM-DD HH:mm:ss.SSS'); return { children: (
{date}
), }; }, }, ...(appendTo === 'center' ? fieldColumns : []), { title: 'body', dataIndex: 'body', key: 'body', render: (field): ColumnTypeRender> => ({ props: { style: defaultTableStyle, }, children: ( ), }), }, ...(appendTo === 'end' ? fieldColumns : []), ]; }, [ fields, isListViewPanel, appendTo, isDarkMode, linesPerRow, activeLog?.id, activeContextLog?.id, ]); return { columns, dataSource: flattenLogData }; };