/* eslint-disable react/jsx-props-no-spreading */ import './DynamicColumnTable.syles.scss'; import { SettingOutlined } from '@ant-design/icons'; import { Button, Dropdown, MenuProps, Switch } from 'antd'; import { ColumnsType } from 'antd/lib/table'; import { memo, useEffect, useState } from 'react'; import { popupContainer } from 'utils/selectPopupContainer'; import ResizeTable from './ResizeTable'; import { DynamicColumnTableProps } from './types'; import { getNewColumnData, getVisibleColumns, setVisibleColumns, } from './utils'; function DynamicColumnTable({ tablesource, columns, dynamicColumns, onDragColumn, ...restProps }: DynamicColumnTableProps): JSX.Element { const [columnsData, setColumnsData] = useState( columns, ); useEffect(() => { setColumnsData(columns); const visibleColumns = getVisibleColumns({ tablesource, columnsData: columns, dynamicColumns, }); setColumnsData((prevColumns) => prevColumns ? [ ...prevColumns.slice(0, prevColumns.length - 1), ...visibleColumns, prevColumns[prevColumns.length - 1], ] : undefined, ); // eslint-disable-next-line react-hooks/exhaustive-deps }, [columns]); const onToggleHandler = (index: number) => ( checked: boolean, event: React.MouseEvent, ): void => { event.stopPropagation(); setVisibleColumns({ tablesource, dynamicColumns, index, checked, }); setColumnsData((prevColumns) => getNewColumnData({ checked, index, prevColumns, dynamicColumns, }), ); }; const items: MenuProps['items'] = dynamicColumns?.map((column, index) => ({ label: (
{column.title?.toString()}
c.key === column.key) !== -1} onChange={onToggleHandler(index)} />
), key: index, type: 'checkbox', })) || []; return (
{dynamicColumns && (
); } DynamicColumnTable.defaultProps = { onDragColumn: undefined, }; export default memo(DynamicColumnTable);