diff --git a/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchEnumSetTerm.tsx b/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchEnumSetTerm.tsx index 76b6ac8a5..3aad64df0 100644 --- a/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchEnumSetTerm.tsx +++ b/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchEnumSetTerm.tsx @@ -14,12 +14,14 @@ type PowerSearchEnumSetTermProps = { onCancel: () => void; onChange: (value: string[]) => void; enumLabels: {[key: string]: string}; + defaultValue?: string[]; }; export const PowerSearchEnumSetTerm: React.FC = ({ onCancel, onChange, enumLabels, + defaultValue, }) => { const options = React.useMemo(() => { return Object.entries(enumLabels).map(([key, label]) => ({ @@ -29,15 +31,19 @@ export const PowerSearchEnumSetTerm: React.FC = ({ }, [enumLabels]); const selectValueRef = React.useRef(); + if (defaultValue && !selectValueRef.current) { + selectValueRef.current = defaultValue; + } return ( { if (!selectValueRef.current?.length) { onCancel(); diff --git a/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchTerm.tsx b/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchTerm.tsx index e03806660..b00b5601c 100644 --- a/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchTerm.tsx +++ b/desktop/flipper-plugin/src/ui/PowerSearch/PowerSearchTerm.tsx @@ -33,19 +33,19 @@ export type SearchExpressionTerm = Required; type PowerSearchTermProps = { searchTerm: IncompleteSearchExpressionTerm; - searchValueRenderer: 'input' | 'button'; onCancel: () => void; onFinalize: (completeSearchTerm: SearchExpressionTerm) => void; }; export const PowerSearchTerm: React.FC = ({ searchTerm, - searchValueRenderer, onCancel, onFinalize, }) => { + const hasValue = searchTerm.searchValue != null; + let searchValueComponent: React.ReactNode = null; - if (searchValueRenderer === 'input') { + if (!hasValue) { switch (searchTerm.operator.valueType) { case 'STRING': { searchValueComponent = ( @@ -183,6 +183,7 @@ export const PowerSearchTerm: React.FC = ({ }); }} enumLabels={searchTerm.operator.enumLabels} + defaultValue={searchTerm.searchValue} /> ); break; @@ -197,6 +198,7 @@ export const PowerSearchTerm: React.FC = ({ searchValue: newValue, }); }} + defaultValue={searchTerm.searchValue} /> ); break; diff --git a/desktop/flipper-plugin/src/ui/PowerSearch/index.tsx b/desktop/flipper-plugin/src/ui/PowerSearch/index.tsx index 9ab869c2b..02d67c7c7 100644 --- a/desktop/flipper-plugin/src/ui/PowerSearch/index.tsx +++ b/desktop/flipper-plugin/src/ui/PowerSearch/index.tsx @@ -84,17 +84,14 @@ export const PowerSearch: React.FC = ({ return groupedOptions; }, [config.fields]); - const lastSearchTermHasSearchValue = - searchExpression.length > 0 - ? searchExpression[searchExpression.length - 1].searchValue !== undefined - : false; - const searchTermFinderRef = React.useRef<{ focus: () => void; blur: () => void; scrollTo: () => void; }>(null); + console.log('searchExpression', searchExpression); + return ( @@ -106,15 +103,10 @@ export const PowerSearch: React.FC = ({ }} /> {searchExpression.map((searchTerm, i) => { - const isLastTerm = i === searchExpression.length - 1; - return ( { setSearchExpression((prevSearchExpression) => { if (prevSearchExpression[i]) { diff --git a/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx b/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx index ad9f4d2e9..fe6232630 100644 --- a/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx +++ b/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx @@ -339,6 +339,11 @@ export function createInitialState( }); } + let searchExpression = config.initialSearchExpression; + if (prefs?.searchExpression?.length) { + searchExpression = prefs.searchExpression; + } + const res: DataManagerState = { config, storageKey, @@ -352,7 +357,7 @@ export function createInitialState( items: new Set(prefs!.selection.items), } : emptySelection, - searchExpression: prefs?.searchExpression ?? config.initialSearchExpression, + searchExpression, filterExceptions: undefined, autoScroll: prefs?.autoScroll ?? config.autoScroll ?? false, sideBySide: false, @@ -473,7 +478,7 @@ export function computeDataTableFilter( if (!searchExpression || !searchExpression.length) { return true; } - return searchExpression.some((searchTerm) => { + return searchExpression.every((searchTerm) => { const value = getValueAtPath(item, searchTerm.field.key); if (!value) { console.warn(