import LogDetail from 'components/LogDetail'; import { VIEW_TYPES } from 'components/LogDetail/constants'; import { useTableView } from 'components/Logs/TableView/useTableView'; import { LOCALSTORAGE } from 'constants/localStorage'; 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 { forwardRef, memo, 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 { TableHeaderCellStyled, TableRowStyled } from './styles'; import TableRow from './TableRow'; 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, onAddToQuery: handleAddToQuery, } = useActiveLog(); const { activeLog, onSetActiveLog, onClearActiveLog, onAddToQuery, } = useActiveLog(); const { dataSource, columns } = useTableView({ ...tableViewProps, onClickExpand: onSetActiveLog, onOpenLogsContext: handleSetActiveContextLog, activeLog, activeContextLog, }); 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 => ( ), [handleSetActiveContextLog, tableColumns, tableViewProps.logs], ); const tableHeader = useCallback( () => ( {tableColumns.map((column) => { const isDragColumn = column.key !== 'expand'; return ( {(column.title as string).replace(/^\w/, (c) => c.toUpperCase())} ); })} ), [tableColumns, isDarkMode], ); const handleClickExpand = (index: number): void => { if (!onSetActiveLog) return; onSetActiveLog(tableViewProps.logs[index]); }; return ( <> { handleClickExpand(event.target.parentElement.parentElement.dataset.index); }} /> {activeContextLog && ( )} ); }, ); export default memo(InfinityTable);