Support occasionally stringified null and undefined in enums

Reviewed By: LukeDefeo

Differential Revision: D51202685

fbshipit-source-id: 74d0a3d7ed956f3fafc393f180b30cd2fcc55384
This commit is contained in:
Andrey Goncharov
2023-11-10 09:08:28 -08:00
committed by Facebook GitHub Bot
parent 2d28ca2c37
commit cd9db40e4f

View File

@@ -239,6 +239,23 @@ function safeCreateRegExp(source: string): RegExp | undefined {
} }
} }
const enumPredicateForWhenValueCouldBeAStringifiedNullish = (
// searchValue is typed as a string here, but originally it could have been an undefined or a null and we stringified them during inference (search for `inferEnumOptionsFromData`)
searchValue: string,
value: string | null | undefined,
): boolean => {
if (searchValue === value) {
return true;
}
if (value === null && searchValue === 'null') {
return true;
}
if (value === undefined && searchValue === 'undefined') {
return true;
}
return false;
};
export const dataTablePowerSearchOperatorProcessorConfig = { export const dataTablePowerSearchOperatorProcessorConfig = {
string_matches_regex: (_operator, searchValue: string, value: string) => string_matches_regex: (_operator, searchValue: string, value: string) =>
!!safeCreateRegExp(searchValue)?.test( !!safeCreateRegExp(searchValue)?.test(
@@ -315,20 +332,29 @@ export const dataTablePowerSearchOperatorProcessorConfig = {
float_less_or_equal: (_operator, searchValue: number, value: number) => float_less_or_equal: (_operator, searchValue: number, value: number) =>
value <= searchValue, value <= searchValue,
enum_is: (_operator, searchValue: string, value: string) => enum_is: (_operator, searchValue: string, value: string) =>
searchValue === value, enumPredicateForWhenValueCouldBeAStringifiedNullish(searchValue, value),
enum_is_nullish_or: (_operator, searchValue: string, value?: string | null) => enum_is_nullish_or: (_operator, searchValue: string, value?: string | null) =>
value == null || searchValue === value, value == null ||
enumPredicateForWhenValueCouldBeAStringifiedNullish(searchValue, value),
enum_is_not: (_operator, searchValue: string, value: string) => enum_is_not: (_operator, searchValue: string, value: string) =>
searchValue !== value, !enumPredicateForWhenValueCouldBeAStringifiedNullish(searchValue, value),
enum_set_is_nullish_or_any_of: ( enum_set_is_nullish_or_any_of: (
_operator, _operator,
searchValue: string[], searchValue: string[],
value?: string | null, value?: string | null,
) => value == null || searchValue.some((item) => value === item), ) =>
value == null ||
searchValue.some((item) =>
enumPredicateForWhenValueCouldBeAStringifiedNullish(item, value),
),
enum_set_is_any_of: (_operator, searchValue: string[], value: string) => enum_set_is_any_of: (_operator, searchValue: string[], value: string) =>
searchValue.some((item) => value === item), searchValue.some((item) =>
enumPredicateForWhenValueCouldBeAStringifiedNullish(item, value),
),
enum_set_is_none_of: (_operator, searchValue: string[], value: string) => enum_set_is_none_of: (_operator, searchValue: string[], value: string) =>
!searchValue.some((item) => value === item), !searchValue.some((item) =>
enumPredicateForWhenValueCouldBeAStringifiedNullish(item, value),
),
is_nullish: (_operator, _searchValue, value) => value == null, is_nullish: (_operator, _searchValue, value) => value == null,
// See PowerSearchAbsoluteDateTerm // See PowerSearchAbsoluteDateTerm
newer_than_absolute_date: (_operator, searchValue: Date, value: any) => { newer_than_absolute_date: (_operator, searchValue: Date, value: any) => {