diff --git a/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchConfig.tsx b/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchConfig.tsx index 37208870f..e2608c475 100644 --- a/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchConfig.tsx +++ b/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchConfig.tsx @@ -12,10 +12,11 @@ export type SimpleFilterValueType = | 'NO_VALUE' | 'INTEGER' - | 'FLOAT' | 'STRING' | 'STRING_SET'; +export type FloatFilterValueType = 'FLOAT'; + export type EnumFilterValueType = 'ENUM' | 'ENUM_SET'; export type AbsoluteDateFilterValueType = 'ABSOLUTE_DATE'; @@ -26,6 +27,13 @@ export type SimpleOperatorConfig = { label: string; }; +export type FloatOperatorConfig = { + valueType: FloatFilterValueType; + key: string; + label: string; + precision?: number; +}; + export type EnumOperatorConfig = { valueType: EnumFilterValueType; key: string; @@ -44,6 +52,7 @@ export type AbsoluteDateOperatorConfig = { export type OperatorConfig = | SimpleOperatorConfig + | FloatOperatorConfig | EnumOperatorConfig | AbsoluteDateOperatorConfig; diff --git a/desktop/flipper-plugin/src/ui/data-table/DataTableDefaultPowerSearchOperators.tsx b/desktop/flipper-plugin/src/ui/data-table/DataTableDefaultPowerSearchOperators.tsx index b9be92b73..77e002f5e 100644 --- a/desktop/flipper-plugin/src/ui/data-table/DataTableDefaultPowerSearchOperators.tsx +++ b/desktop/flipper-plugin/src/ui/data-table/DataTableDefaultPowerSearchOperators.tsx @@ -8,6 +8,7 @@ */ import {OperatorConfig} from '../PowerSearch'; +import {FloatOperatorConfig} from '../PowerSearch/PowerSearchConfig'; export type PowerSearchOperatorProcessor = ( powerSearchOperatorConfig: OperatorConfig, @@ -71,6 +72,12 @@ export const dataTablePowerSearchOperators = { key: 'int_less_or_equal', valueType: 'INTEGER', }), + float_equals: (precision: number) => ({ + label: '=', + key: 'float_equals', + valueType: 'FLOAT', + precision, + }), float_greater_than: () => ({ label: '>', key: 'float_greater_than', @@ -165,6 +172,10 @@ export const dataTablePowerSearchOperatorProcessorConfig = { value < searchValue, int_less_or_equal: (_operator, searchValue: number, value: number) => value <= searchValue, + float_equals: (operator, searchValue: number, value: number) => { + const precision = (operator as FloatOperatorConfig).precision ?? 0.01; + return value <= searchValue + precision && value >= searchValue - precision; + }, float_greater_than: (_operator, searchValue: number, value: number) => value > searchValue, float_greater_or_equal: (_operator, searchValue: number, value: number) =>