Extend default list of operators for unconfigured columns

Summary:
It does not make too much sense to keep the unknown value conversion behind a flag. It is relatively cheap. Let's do it for all strings.
Also, let's extend the list of default string operators

Reviewed By: lblasa

Differential Revision: D51115573

fbshipit-source-id: a62c08a90d8ddf6f23f59412c3fd981e19225e47
This commit is contained in:
Andrey Goncharov
2023-11-09 05:08:16 -08:00
committed by Facebook GitHub Bot
parent 51e149765e
commit 284dee0460
3 changed files with 25 additions and 44 deletions

View File

@@ -33,7 +33,6 @@ export type StringOperatorConfig = {
valueType: StringFilterValueType;
key: string;
label: string;
handleUnknownValues?: boolean;
};
export type StringSetOperatorConfig = {

View File

@@ -8,12 +8,8 @@
*/
import dayjs from 'dayjs';
import {getFlipperLib} from 'flipper-plugin-core';
import {OperatorConfig} from '../PowerSearch';
import {
FloatOperatorConfig,
StringOperatorConfig,
} from '../PowerSearch/PowerSearchConfig';
import {FloatOperatorConfig} from '../PowerSearch/PowerSearchConfig';
export type PowerSearchOperatorProcessor = (
powerSearchOperatorConfig: OperatorConfig,
@@ -22,29 +18,25 @@ export type PowerSearchOperatorProcessor = (
) => boolean;
export const dataTablePowerSearchOperators = {
string_contains: (handleUnknownValues?: boolean) => ({
string_contains: () => ({
label: 'contains',
key: 'string_contains',
valueType: 'STRING',
handleUnknownValues,
}),
string_not_contains: (handleUnknownValues?: boolean) => ({
string_not_contains: () => ({
label: 'does not contain',
key: 'string_not_contains',
valueType: 'STRING',
handleUnknownValues,
}),
string_matches_exactly: (handleUnknownValues?: boolean) => ({
string_matches_exactly: () => ({
label: 'is',
key: 'string_matches_exactly',
valueType: 'STRING',
handleUnknownValues,
}),
string_not_matches_exactly: (handleUnknownValues?: boolean) => ({
string_not_matches_exactly: () => ({
label: 'is not',
key: 'string_not_matches_exactly',
valueType: 'STRING',
handleUnknownValues,
}),
searializable_object_contains: () => ({
label: 'contains',
@@ -223,22 +215,12 @@ const tryConvertingUnknownToString = (value: unknown): string | null => {
};
export const dataTablePowerSearchOperatorProcessorConfig = {
string_contains: (operator, searchValue: string, value: string) =>
!!(
(operator as StringOperatorConfig).handleUnknownValues &&
getFlipperLib().GK('flipper_power_search_auto_json_stringify')
? tryConvertingUnknownToString(value)
: value
)
string_contains: (_operator, searchValue: string, value: string) =>
!!tryConvertingUnknownToString(value)
?.toLowerCase()
.includes(searchValue.toLowerCase()),
string_not_contains: (operator, searchValue: string, value: string) =>
!(
(operator as StringOperatorConfig).handleUnknownValues &&
getFlipperLib().GK('flipper_power_search_auto_json_stringify')
? tryConvertingUnknownToString(value)
: value
)
string_not_contains: (_operator, searchValue: string, value: string) =>
!tryConvertingUnknownToString(value)
?.toLowerCase()
.includes(searchValue.toLowerCase()),
searializable_object_contains: (
@@ -251,16 +233,10 @@ export const dataTablePowerSearchOperatorProcessorConfig = {
searchValue: string,
value: object,
) => !JSON.stringify(value).toLowerCase().includes(searchValue.toLowerCase()),
string_matches_exactly: (operator, searchValue: string, value: string) =>
((operator as StringOperatorConfig).handleUnknownValues &&
getFlipperLib().GK('flipper_power_search_auto_json_stringify')
? tryConvertingUnknownToString(value)
: value) === searchValue,
string_not_matches_exactly: (operator, searchValue: string, value: string) =>
((operator as StringOperatorConfig).handleUnknownValues &&
getFlipperLib().GK('flipper_power_search_auto_json_stringify')
? tryConvertingUnknownToString(value)
: value) !== searchValue,
string_matches_exactly: (_operator, searchValue: string, value: string) =>
tryConvertingUnknownToString(value) === searchValue,
string_not_matches_exactly: (_operator, searchValue: string, value: string) =>
tryConvertingUnknownToString(value) !== searchValue,
// See PowerSearchStringSetTerm
string_set_contains_any_of: (
_operator,
@@ -268,7 +244,9 @@ export const dataTablePowerSearchOperatorProcessorConfig = {
value: string,
) =>
searchValue.some((item) =>
value.toLowerCase().includes(item.toLowerCase()),
tryConvertingUnknownToString(value)
?.toLowerCase()
.includes(item.toLowerCase()),
),
string_set_contains_none_of: (
_operator,
@@ -276,7 +254,9 @@ export const dataTablePowerSearchOperatorProcessorConfig = {
value: string,
) =>
!searchValue.some((item) =>
value.toLowerCase().includes(item.toLowerCase()),
tryConvertingUnknownToString(value)
?.toLowerCase()
.includes(item.toLowerCase()),
),
int_equals: (_operator, searchValue: number, value: number) =>
value === searchValue,

View File

@@ -361,10 +361,12 @@ export function DataTable<T extends object>(
// If no power search config provided we treat every input as a string
if (!column.powerSearchConfig) {
columnPowerSearchOperators = [
dataTablePowerSearchOperators.string_contains(true),
dataTablePowerSearchOperators.string_not_contains(true),
dataTablePowerSearchOperators.string_matches_exactly(true),
dataTablePowerSearchOperators.string_not_matches_exactly(true),
dataTablePowerSearchOperators.string_contains(),
dataTablePowerSearchOperators.string_not_contains(),
dataTablePowerSearchOperators.string_matches_exactly(),
dataTablePowerSearchOperators.string_not_matches_exactly(),
dataTablePowerSearchOperators.string_set_contains_any_of(),
dataTablePowerSearchOperators.string_set_contains_none_of(),
];
} else if (Array.isArray(column.powerSearchConfig)) {
columnPowerSearchOperators = column.powerSearchConfig;