From 2d85d461200665e805017e0a42d981326973e121 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Thu, 22 Feb 2024 18:10:31 +0100 Subject: [PATCH 1/2] fix: Allow only dttm columns in comparison filter in Period over Period chart --- .../BigNumberPeriodOverPeriod/controlPanel.ts | 29 ++++++++++++------- .../DndFilterSelect.tsx | 13 ++++++++- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts index 5ac80eaf96256..7d95511761a4d 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts @@ -22,6 +22,7 @@ import { validateTimeComparisonRangeValues, } from '@superset-ui/core'; import { + ColumnMeta, ControlPanelConfig, ControlPanelState, ControlState, @@ -76,16 +77,24 @@ const config: ControlPanelConfig = { mapStateToProps: ( state: ControlPanelState, controlState: ControlState, - ) => ({ - ...(sharedControls.adhoc_filters.mapStateToProps?.( - state, - controlState, - ) || {}), - externalValidationErrors: validateTimeComparisonRangeValues( - state.controls?.time_comparison?.value, - controlState.value, - ), - }), + ) => { + const originalMapStateToPropsRes = + sharedControls.adhoc_filters.mapStateToProps?.( + state, + controlState, + ) || {}; + const columns = originalMapStateToPropsRes.columns.filter( + (col: ColumnMeta) => col.is_dttm, + ); + return { + ...originalMapStateToPropsRes, + columns, + externalValidationErrors: validateTimeComparisonRangeValues( + state.controls?.time_comparison?.value, + controlState.value, + ), + }; + }, }, }, ], diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx index 5295bd6dae2d7..bf8b7b6e81a42 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx @@ -382,7 +382,18 @@ const DndFilterSelect = (props: DndFilterSelectProps) => { return new AdhocFilter(config); }, [droppedItem]); - const canDrop = useCallback(() => true, []); + const canDrop = useCallback( + (item: DatasourcePanelDndItem) => { + if (item.type === DndItemType.Column) { + return props.columns.some( + col => col.column_name === (item.value as ColumnMeta).column_name, + ); + } + return true; + }, + [props.columns], + ); + const handleDrop = useCallback( (item: DatasourcePanelDndItem) => { setDroppedItem(item.value); From 263b76ef4e6d0b348ffb3fa1b8cb16bc873c78a7 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Tue, 5 Mar 2024 17:56:04 +0100 Subject: [PATCH 2/2] Allow adding only columns that have filter applied --- .../BigNumberPeriodOverPeriod/controlPanel.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts index 7d95511761a4d..be731421a0a6f 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts @@ -17,7 +17,9 @@ * under the License. */ import { + AdhocFilter, ComparisonTimeRangeType, + SimpleAdhocFilter, t, validateTimeComparisonRangeValues, } from '@superset-ui/core'; @@ -84,7 +86,12 @@ const config: ControlPanelConfig = { controlState, ) || {}; const columns = originalMapStateToPropsRes.columns.filter( - (col: ColumnMeta) => col.is_dttm, + (col: ColumnMeta) => + col.is_dttm && + (state.controls.adhoc_filters.value as AdhocFilter[]).some( + (val: SimpleAdhocFilter) => + val.subject === col.column_name, + ), ); return { ...originalMapStateToPropsRes, @@ -147,6 +154,9 @@ const config: ControlPanelConfig = { y_axis_format: { label: t('Number format'), }, + adhoc_filters: { + rerender: ['adhoc_custom'], + }, }, formDataOverrides: formData => ({ ...formData,