import { ColumnsType } from 'antd/es/table'; const filterColumns = ( initialColumns: ColumnsType, findColumns: ColumnsType, isColumnExist = true, ): ColumnsType => initialColumns.filter(({ title: columnTitle }) => { const column = findColumns.find(({ title }) => title === columnTitle); return isColumnExist ? !!column : !column; }); export const getDraggedColumns = ( currentColumns: ColumnsType, draggedColumns: ColumnsType, ): ColumnsType => { if (draggedColumns.length) { const actualDruggedColumns = filterColumns(draggedColumns, currentColumns); const newColumns = filterColumns( currentColumns, actualDruggedColumns, false, ); return [...actualDruggedColumns, ...newColumns].reduce((acc, { title }) => { const column = currentColumns.find( ({ title: columnTitle }) => title === columnTitle, ); if (column) return [...acc, column]; return acc; }, [] as ColumnsType); } return currentColumns; };