import './TracesTableComponent.styles.scss'; import { Table } from 'antd'; import { SOMETHING_WENT_WRONG } from 'constants/api'; import Controls from 'container/Controls'; import { PER_PAGE_OPTIONS } from 'container/TracesExplorer/ListView/configs'; import { tableStyles } from 'container/TracesExplorer/ListView/styles'; import { getListColumns, getTraceLink, transformDataWithDate, } from 'container/TracesExplorer/ListView/utils'; import { Pagination } from 'hooks/queryPagination'; import { GetQueryResultsProps } from 'lib/dashboard/getQueryResults'; import history from 'lib/history'; import { RowData } from 'lib/query/createTableColumnsFromQuery'; import { Dispatch, HTMLAttributes, SetStateAction, useCallback, useEffect, useMemo, useState, } from 'react'; import { UseQueryResult } from 'react-query'; import { SuccessResponse } from 'types/api'; import { Widgets } from 'types/api/dashboard/getAll'; import { MetricRangePayloadProps } from 'types/api/metrics/getQueryRange'; function TracesTableComponent({ widget, queryResponse, setRequestData, }: TracesTableComponentProps): JSX.Element { const [pagination, setPagination] = useState({ offset: 0, limit: 10, }); useEffect(() => { setRequestData((prev) => ({ ...prev, tableParams: { pagination, }, })); }, [pagination, setRequestData]); const columns = getListColumns(widget.selectedTracesFields || []); const dataLength = queryResponse.data?.payload?.data?.newResult?.data?.result[0]?.list?.length; const totalCount = useMemo(() => dataLength || 0, [dataLength]); const queryTableDataResult = queryResponse.data?.payload?.data?.newResult?.data?.result; const queryTableData = useMemo(() => queryTableDataResult || [], [ queryTableDataResult, ]); const transformedQueryTableData = useMemo( () => ((transformDataWithDate(queryTableData) || []) as unknown) as RowData[], [queryTableData], ); const handleRow = useCallback( (record: RowData): HTMLAttributes => ({ onClick: (event): void => { event.preventDefault(); event.stopPropagation(); if (event.metaKey || event.ctrlKey) { window.open(getTraceLink(record), '_blank'); } else { history.push(getTraceLink(record)); } }, }), [], ); if (queryResponse.isError) { return
{SOMETHING_WENT_WRONG}
; } return (
{ setPagination({ ...pagination, offset: pagination.offset - pagination.limit, }); }} handleNavigateNext={(): void => { setPagination({ ...pagination, offset: pagination.offset + pagination.limit, }); }} handleCountItemsPerPageChange={(value): void => { setPagination({ ...pagination, limit: value, offset: 0, }); }} />
); } export type TracesTableComponentProps = { queryResponse: UseQueryResult< SuccessResponse, Error >; widget: Widgets; setRequestData: Dispatch>; }; export default TracesTableComponent;