/* eslint-disable react/jsx-props-no-spreading */ import { Table } from 'antd'; import { ColumnsType } from 'antd/lib/table'; import { dragColumnParams } from 'hooks/useDragColumns/configs'; import { SyntheticEvent, useCallback, useEffect, useMemo, useState, } from 'react'; import ReactDragListView from 'react-drag-listview'; import { ResizeCallbackData } from 'react-resizable'; import ResizableHeader from './ResizableHeader'; import { DragSpanStyle } from './styles'; import { ResizeTableProps } from './types'; function ResizeTable({ columns, onDragColumn, pagination, ...restProps }: ResizeTableProps): JSX.Element { const [columnsData, setColumns] = useState([]); const handleResize = useCallback( (index: number) => ( _e: SyntheticEvent, { size }: ResizeCallbackData, ): void => { const newColumns = [...columnsData]; newColumns[index] = { ...newColumns[index], width: size.width, }; setColumns(newColumns); }, [columnsData], ); const mergedColumns = useMemo( () => columnsData.map((col, index) => ({ ...col, ...(onDragColumn && { title: ( {col?.title?.toString() || ''} ), }), onHeaderCell: (column: ColumnsType[number]): unknown => ({ width: column.width, onResize: handleResize(index), }), })) as ColumnsType, [columnsData, onDragColumn, handleResize], ); const tableParams = useMemo( () => ({ ...restProps, components: { header: { cell: ResizableHeader } }, columns: mergedColumns, hideOnSinglePage: true, pagination: { ...pagination, hideOnSinglePage: true }, }), [mergedColumns, pagination, restProps], ); useEffect(() => { if (columns) { setColumns(columns); } }, [columns]); return onDragColumn ? ( ) : (
); } ResizeTable.defaultProps = { onDragColumn: undefined, }; export default ResizeTable;