import { RowSelectionState, TableOptions, Updater, } from '@tanstack/react-table'; import { DefaultType } from '../types'; export function withControlledSelected( onChange?: (value: string[]) => void, value?: string[] ) { return function extendTableOptions(options: TableOptions) { if (!onChange || !value) { return options; } return { ...options, state: { ...options.state, rowSelection: Object.fromEntries(value.map((i) => [i, true])), }, onRowSelectionChange(updater: Updater) { const newValue = typeof updater !== 'function' ? updater : updater(Object.fromEntries(value.map((i) => [i, true]))); onChange( Object.entries(newValue) .filter(([, selected]) => selected) .map(([id]) => id) ); }, }; }; }