Add support for negative filters

Summary:
Changelog: Add support for negative filters in data tables

As requested per somewhere on workplace but couldn't find it back :)

Reviewed By: nikoant

Differential Revision: D29486096

fbshipit-source-id: 467c8598f6d09afc9a5ed85affb6c51840afe00c
This commit is contained in:
Michel Weststrate
2021-06-30 10:40:50 -07:00
committed by Facebook GitHub Bot
parent 8e0d3cf779
commit 6c7b69803f
4 changed files with 84 additions and 11 deletions

View File

@@ -85,6 +85,7 @@ type DataManagerActions<T> =
>
| Action<'removeColumnFilter', {column: keyof T; index: number}>
| Action<'toggleColumnFilter', {column: keyof T; index: number}>
| Action<'setColumnFilterInverse', {column: keyof T; inversed: boolean}>
| Action<'setColumnFilterFromSelection', {column: keyof T}>
| Action<'appliedInitialScroll'>
| Action<'toggleUseRegex'>
@@ -218,6 +219,11 @@ export const dataTableManagerReducer = produce<
f.enabled = !f.enabled;
break;
}
case 'setColumnFilterInverse': {
draft.columns.find((c) => c.key === action.column)!.inversed =
action.inversed;
break;
}
case 'setColumnFilterFromSelection': {
const items = getSelectedItems(
config.dataSource as DataSource<any>,
@@ -504,14 +510,15 @@ export function computeDataTableFilter(
return function dataTableFilter(item: any) {
for (const column of filteringColumns) {
if (
!column.filters!.some(
(f) =>
f.enabled &&
String(item[column.key]).toLowerCase().includes(f.value),
)
) {
return false; // there are filters, but none matches
const rowMatchesFilter = column.filters!.some(
(f) =>
f.enabled && String(item[column.key]).toLowerCase().includes(f.value),
);
if (column.inversed && rowMatchesFilter) {
return false;
}
if (!column.inversed && !rowMatchesFilter) {
return false;
}
}
return Object.values(item).some((v) =>