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