import LogDetail from 'components/LogDetail'; import { ColumnTypeRender } from 'components/Logs/TableView/types'; import { useTableView } from 'components/Logs/TableView/useTableView'; import { LOCALSTORAGE } from 'constants/localStorage'; import LogsExplorerContext from 'container/LogsExplorerContext'; import { useActiveLog } from 'hooks/logs/useActiveLog'; import { useCopyLogLink } from 'hooks/logs/useCopyLogLink'; import { useIsDarkMode } from 'hooks/useDarkMode'; import useDragColumns from 'hooks/useDragColumns'; import { getDraggedColumns } from 'hooks/useDragColumns/utils'; import { cloneElement, forwardRef, memo, ReactElement, ReactNode, useCallback, useMemo, } from 'react'; import { TableComponents, TableVirtuoso, TableVirtuosoHandle, } from 'react-virtuoso'; import { ILog } from 'types/api/logs/log'; import { infinityDefaultStyles } from './config'; import { LogsCustomTable } from './LogsCustomTable'; import { TableCellStyled, TableHeaderCellStyled, TableRowStyled, } from './styles'; import { InfinityTableProps } from './types'; // eslint-disable-next-line react/function-component-definition const CustomTableRow: TableComponents['TableRow'] = ({ children, context, ...props }) => { const { isHighlighted } = useCopyLogLink(props.item.id); const isDarkMode = useIsDarkMode(); return ( {children} ); }; const InfinityTable = forwardRef( function InfinityTableView( { isLoading, tableViewProps, infitiyTableProps }, ref, ): JSX.Element | null { const { activeLog: activeContextLog, onSetActiveLog: handleSetActiveContextLog, onClearActiveLog: handleClearActiveContextLog, } = useActiveLog(); const { activeLog, onSetActiveLog, onClearActiveLog, onAddToQuery, } = useActiveLog(); const { dataSource, columns } = useTableView({ ...tableViewProps, onClickExpand: onSetActiveLog, onOpenLogsContext: handleSetActiveContextLog, }); const { draggedColumns, onDragColumns } = useDragColumns< Record >(LOCALSTORAGE.LOGS_LIST_COLUMNS); const isDarkMode = useIsDarkMode(); const tableColumns = useMemo( () => getDraggedColumns>(columns, draggedColumns), [columns, draggedColumns], ); const handleDragEnd = useCallback( (fromIndex: number, toIndex: number) => onDragColumns(tableColumns, fromIndex, toIndex), [tableColumns, onDragColumns], ); const itemContent = useCallback( (index: number, log: Record): JSX.Element => ( <> {tableColumns.map((column) => { if (!column.render) return Empty; const element: ColumnTypeRender> = column.render( log[column.key as keyof Record], log, index, ); const elementWithChildren = element as Exclude< ColumnTypeRender>, ReactNode >; const children = elementWithChildren.children as ReactElement; const props = elementWithChildren.props as Record; return ( {cloneElement(children, props)} ); })} ), [tableColumns, isDarkMode], ); const tableHeader = useCallback( () => ( {tableColumns.map((column) => { const isDragColumn = column.key !== 'expand'; return ( {column.title as string} ); })} ), [tableColumns, isDarkMode], ); return ( <> {activeContextLog && ( )} ); }, ); export default memo(InfinityTable);