From b9fa86e77faf5093ad02f4d8500619f2fc8ef834 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Fri, 17 Nov 2023 05:31:25 -0800 Subject: [PATCH] Fix filter from selection Reviewed By: LukeDefeo Differential Revision: D51425090 fbshipit-source-id: 53dda8f65d2e8d17468903c20e88d45038e65be1 --- .../DataTableWithPowerSearchManager.tsx | 34 ++++++++++++++++++- .../PowerSearchTableContextMenu.tsx | 6 ++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx b/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx index 60a03e755..e7a3335b4 100644 --- a/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx +++ b/desktop/flipper-plugin/src/ui/data-table/DataTableWithPowerSearchManager.tsx @@ -14,7 +14,10 @@ import {DataSourceVirtualizer} from '../../data-source/index'; import produce, {castDraft, immerable, original} from 'immer'; import {DataSource, getFlipperLib, _DataSourceView} from 'flipper-plugin-core'; import {SearchExpressionTerm} from '../PowerSearch'; -import {PowerSearchOperatorProcessorConfig} from './DataTableDefaultPowerSearchOperators'; +import { + dataTablePowerSearchOperators, + PowerSearchOperatorProcessorConfig, +} from './DataTableDefaultPowerSearchOperators'; import {DataTableManager as DataTableManagerLegacy} from './DataTableManager'; export type OnColumnResize = (id: string, size: number | Percentage) => void; @@ -87,6 +90,7 @@ type DataManagerActions = } > | Action<'clearSelection', {}> + | Action<'setSearchExpressionFromSelection', {column: DataTableColumn}> | Action<'setFilterExceptions', {exceptions: string[] | undefined}> | Action<'appliedInitialScroll'> | Action<'toggleAutoScroll'> @@ -173,6 +177,34 @@ export const dataTableManagerReducer = produce< draft.filterExceptions = undefined; break; } + case 'setSearchExpressionFromSelection': { + getFlipperLib().logger.track( + 'usage', + 'data-table:filter:power-search-from-selection', + ); + draft.filterExceptions = undefined; + const items = getSelectedItems( + config.dataView as _DataSourceView, + draft.selection, + ); + + const searchExpressionFromSelection: SearchExpressionTerm[] = [ + { + field: { + key: action.column.key, + label: action.column.title ?? action.column.key, + }, + operator: dataTablePowerSearchOperators.enum_set_is_any_of({}), + searchValue: items.map((item) => + getValueAtPath(item, action.column.key), + ), + }, + ]; + + draft.searchExpression = searchExpressionFromSelection; + draft.filterExceptions = undefined; + break; + } case 'selectItem': { const {nextIndex, addToSelection, allowUnselect} = action; draft.selection = castDraft( diff --git a/desktop/flipper-plugin/src/ui/data-table/PowerSearchTableContextMenu.tsx b/desktop/flipper-plugin/src/ui/data-table/PowerSearchTableContextMenu.tsx index 066d2365e..f904b2775 100644 --- a/desktop/flipper-plugin/src/ui/data-table/PowerSearchTableContextMenu.tsx +++ b/desktop/flipper-plugin/src/ui/data-table/PowerSearchTableContextMenu.tsx @@ -15,7 +15,7 @@ import { getSelectedItems, getValueAtPath, Selection, -} from './DataTableManager'; +} from './DataTableWithPowerSearchManager'; import React from 'react'; import { _tryGetFlipperLibImplementation, @@ -65,8 +65,8 @@ export function tableContextMenuFactory( key={column.key ?? idx} onClick={() => { dispatch({ - type: 'setColumnFilterFromSelection', - column: column.key, + type: 'setSearchExpressionFromSelection', + column, }); }}> {friendlyColumnTitle(column)}