import { ColumnTypeRender } from 'components/Logs/TableView/types'; import { useTableView } from 'components/Logs/TableView/useTableView'; import { LOCALSTORAGE } from 'constants/localStorage'; import useDragColumns from 'hooks/useDragColumns'; import { getDraggedColumns } from 'hooks/useDragColumns/utils'; import { cloneElement, ReactElement, ReactNode, useCallback, useMemo, } from 'react'; import { TableComponents, TableVirtuoso } from 'react-virtuoso'; 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 // eslint-disable-next-line react/jsx-props-no-spreading }) => {children}; function InfinityTable({ tableViewProps, infitiyTableProps, }: InfinityTableProps): JSX.Element | null { const { onEndReached } = infitiyTableProps; const { dataSource, columns } = useTableView(tableViewProps); const { draggedColumns, onDragColumns } = useDragColumns< Record >(LOCALSTORAGE.LOGS_LIST_COLUMNS); 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], ); const tableHeader = useCallback( () => ( {tableColumns.map((column) => { const isDragColumn = column.key !== 'expand'; return ( {column.title as string} ); })} ), [tableColumns], ); return ( ); } export default InfinityTable;