1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-19 13:29:41 +02:00

refactor(ui/datatables): allow datatable to globally filter on object value [EE-5824] (#9955)

This commit is contained in:
Chaim Lev-Ari 2023-09-04 10:33:07 +01:00 committed by GitHub
parent 440f4e8dda
commit cb7377ead6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
34 changed files with 271 additions and 186 deletions

View file

@ -0,0 +1,37 @@
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)
);
},
};
};
}