From e5d4765986b90076a4a369423c8b744a756f68df Mon Sep 17 00:00:00 2001 From: Einat Bertenthal Date: Thu, 1 Jul 2021 13:28:07 +0300 Subject: [PATCH] feat(dashboard-groupby): group by - add ability to exclude columns (#15454) * feat: group by - add ability to exclude columns * fix: create column select in a more generic way * fix: MR comments * fix: remove description * fix: multiple value bug in column select * fix: initial value bug * fix: lint * fix: unit tests * fix: MR comments * fix: MR comment Co-authored-by: einatnielsen --- .../FiltersConfigForm/ColumnSelect.tsx | 17 ++-- .../FiltersConfigForm/FiltersConfigForm.tsx | 58 +++--------- .../getControlItemsMap.test.tsx | 6 +- .../FiltersConfigForm/getControlItemsMap.tsx | 92 ++++++++++++++++++- .../FiltersConfigForm/utils.ts | 2 +- .../GroupBy/GroupByFilterPlugin.tsx | 14 ++- .../components/GroupBy/controlPanel.ts | 18 ++++ .../filters/components/Range/controlPanel.ts | 3 +- .../filters/components/Select/controlPanel.ts | 14 ++- .../filters/components/Time/controlPanel.ts | 17 ++++ 10 files changed, 177 insertions(+), 64 deletions(-) diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx index 5ee4095b35..5a05119e54 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx @@ -34,8 +34,9 @@ interface ColumnSelectProps { formField?: string; filterId: string; datasetId?: number; - value?: string; + value?: string | string[]; onChange?: (value: string) => void; + mode?: 'multiple' | 'tags'; } const localCache = new Map(); @@ -57,6 +58,7 @@ export function ColumnSelect({ datasetId, value, onChange, + mode, }: ColumnSelectProps) { const [columns, setColumns] = useState(); const { addDangerToast } = useToasts(); @@ -101,11 +103,11 @@ export function ColumnSelect({ endpoint: `/api/v1/dataset/${datasetId}`, }).then( ({ json: { result } }) => { - if ( - !result.columns.some( - (column: Column) => column.column_name === value, - ) - ) { + const lookupValue = Array.isArray(value) ? value : [value]; + const valueExists = result.columns.some((column: Column) => + lookupValue?.includes(column.column_name), + ); + if (!valueExists) { resetColumnField(); } setColumns(result.columns); @@ -124,7 +126,8 @@ export function ColumnSelect({ return (