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;