import { Tag, Typography } from 'antd'; import { ColumnsType } from 'antd/es/table'; import ROUTES from 'constants/routes'; import { getMs } from 'container/Trace/Filters/Panel/PanelBody/Duration/util'; import { formUrlParams } from 'container/TraceDetail/utils'; import dayjs from 'dayjs'; import { RowData } from 'lib/query/createTableColumnsFromQuery'; import { Link } from 'react-router-dom'; import { ILog } from 'types/api/logs/log'; import { BaseAutocompleteData } from 'types/api/queryBuilder/queryAutocompleteResponse'; import { QueryDataV3 } from 'types/api/widgets/getQuery'; export function BlockLink({ children, to, openInNewTab, }: { children: React.ReactNode; to: string; openInNewTab: boolean; }): any { // Display block to make the whole cell clickable return ( {children} ); } export const transformDataWithDate = ( data: QueryDataV3[], ): Omit[] => data[0]?.list?.map(({ data, timestamp }) => ({ ...data, date: timestamp })) || []; export const getTraceLink = (record: RowData): string => `${ROUTES.TRACE}/${record.traceID}${formUrlParams({ spanId: record.spanID, levelUp: 0, levelDown: 0, })}`; export const getListColumns = ( selectedColumns: BaseAutocompleteData[], ): ColumnsType => { const initialColumns: ColumnsType = [ { dataIndex: 'date', key: 'date', title: 'Timestamp', width: 145, render: (value, item): JSX.Element => { const date = typeof value === 'string' ? dayjs(value).format('YYYY-MM-DD HH:mm:ss.SSS') : dayjs(value / 1e6).format('YYYY-MM-DD HH:mm:ss.SSS'); return ( {date} ); }, }, ]; const columns: ColumnsType = selectedColumns.map(({ dataType, key, type }) => ({ title: key, dataIndex: key, key: `${key}-${dataType}-${type}`, width: 145, render: (value, item): JSX.Element => { if (value === '') { return ( N/A ); } if (key === 'httpMethod' || key === 'responseStatusCode') { return ( {value} ); } if (key === 'durationNano') { return ( {getMs(value)}ms ); } return ( {value} ); }, responsive: ['md'], })) || []; return [...initialColumns, ...columns]; };