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:
committed by
Facebook GitHub Bot
parent
8e0d3cf779
commit
6c7b69803f
@@ -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) =>
|
||||
|
||||
Reference in New Issue
Block a user