Skip unknown values during filtering by default

Reviewed By: LukeDefeo

Differential Revision: D51078471

fbshipit-source-id: b3a005f31eebd77e9ff77349640133032f4b0164
This commit is contained in:
Andrey Goncharov
2023-11-08 02:13:47 -08:00
committed by Facebook GitHub Bot
parent 4bb0f59ab8
commit 3dc9cc5d3d
2 changed files with 8 additions and 6 deletions

View File

@@ -105,6 +105,10 @@ type DataTableBaseProps<T = any> = {
* @default true
*/
enablePowerSearchWholeRowSearch?: boolean;
/** If set to `true` and row[columnKey] is undefined, then it is going to pass filtering (search).
* @default false
*/
treatUndefinedValuesAsMatchingFiltering?: boolean;
};
const powerSearchConfigEntireRow: FieldConfig = {
@@ -556,6 +560,7 @@ export function DataTable<T extends object>(
computeDataTableFilter(
tableState.searchExpression,
dataTablePowerSearchOperatorProcessorConfig,
props.treatUndefinedValuesAsMatchingFiltering,
),
);
dataView.setFilterExpections(
@@ -914,6 +919,7 @@ DataTable.defaultProps = {
enablePersistSettings: true,
onRenderEmpty: undefined,
enablePowerSearchWholeRowSearch: true,
treatUndefinedValuesAsMatchingFiltering: false,
} as Partial<DataTableProps<any>>;
/* eslint-disable react-hooks/rules-of-hooks */

View File

@@ -508,6 +508,7 @@ export function getValueAtPath(obj: Record<string, any>, keyPath: string): any {
export function computeDataTableFilter(
searchExpression: SearchExpressionTerm[] | undefined,
powerSearchProcessors: PowerSearchOperatorProcessorConfig,
treatUndefinedValuesAsMatchingFiltering: boolean = false,
) {
return function dataTableFilter(item: any) {
if (!searchExpression || !searchExpression.length) {
@@ -518,12 +519,7 @@ export function computeDataTableFilter(
? item
: getValueAtPath(item, searchTerm.field.key);
if (!value) {
console.warn(
'computeDataTableFilter -> value at searchTerm.field.key is not recognized',
searchTerm,
item,
);
return true;
return treatUndefinedValuesAsMatchingFiltering;
}
const processor =