Expose removing filters programatically

Summary: Project: https://docs.google.com/document/d/1SbFrpvfIShX5npANNa1AkgHliR1M-VMLW5Q9RhREt94/edit

Reviewed By: antonk52

Differential Revision: D45394864

fbshipit-source-id: d2c140d542eaee157cbad5b6a0f29fc62f73a18b
This commit is contained in:
Andrey Goncharov
2023-04-28 12:19:45 -07:00
committed by Facebook GitHub Bot
parent 647bc06f3a
commit 424985a75a

View File

@@ -99,8 +99,16 @@ type DataManagerActions<T> =
'addColumnFilter', 'addColumnFilter',
{column: keyof T; value: string; disableOthers?: boolean} {column: keyof T; value: string; disableOthers?: boolean}
> >
| Action<'removeColumnFilter', {column: keyof T; index: number}> | Action<
| Action<'toggleColumnFilter', {column: keyof T; index: number}> 'removeColumnFilter',
| {column: keyof T; index: number; value?: never}
| {column: keyof T; index?: never; value: string}
>
| Action<
'toggleColumnFilter',
| {column: keyof T; index: number; value?: never}
| {column: keyof T; index?: never; value: string}
>
| Action<'setColumnFilterInverse', {column: keyof T; inversed: boolean}> | Action<'setColumnFilterInverse', {column: keyof T; inversed: boolean}>
| Action<'setColumnFilterFromSelection', {column: keyof T}> | Action<'setColumnFilterFromSelection', {column: keyof T}>
| Action<'appliedInitialScroll'> | Action<'appliedInitialScroll'>
@@ -277,15 +285,28 @@ export const dataTableManagerReducer = produce<
break; break;
} }
case 'removeColumnFilter': { case 'removeColumnFilter': {
draft.columns const column = draft.columns.find((c) => c.key === action.column)!;
.find((c) => c.key === action.column)! const index =
.filters?.splice(action.index, 1); action.index ??
column.filters?.findIndex((f) => f.value === action.value!);
if (index === undefined || index < 0) {
break;
}
column.filters?.splice(index, 1);
break; break;
} }
case 'toggleColumnFilter': { case 'toggleColumnFilter': {
const f = draft.columns.find((c) => c.key === action.column)!.filters![ const column = draft.columns.find((c) => c.key === action.column)!;
action.index const index =
]; action.index ??
column.filters?.findIndex((f) => f.value === action.value!);
if (index === undefined || index < 0) {
break;
}
const f = column.filters![index];
f.enabled = !f.enabled; f.enabled = !f.enabled;
break; break;
} }
@@ -385,6 +406,7 @@ export type DataTableManager<T> = {
value: string, value: string,
disableOthers?: boolean, disableOthers?: boolean,
): void; ): void;
removeColumnFilter(column: keyof T, value: string): void;
}; };
export function createDataTableManager<T>( export function createDataTableManager<T>(
@@ -452,6 +474,9 @@ export function createDataTableManager<T>(
addColumnFilter(column, value, disableOthers) { addColumnFilter(column, value, disableOthers) {
dispatch({type: 'addColumnFilter', column, value, disableOthers}); dispatch({type: 'addColumnFilter', column, value, disableOthers});
}, },
removeColumnFilter(column, value) {
dispatch({type: 'removeColumnFilter', column, value});
},
dataView, dataView,
}; };
} }