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 5ac80eaf962..be731421a0a 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,11 +17,14 @@ * under the License. */ import { + AdhocFilter, ComparisonTimeRangeType, + SimpleAdhocFilter, t, validateTimeComparisonRangeValues, } from '@superset-ui/core'; import { + ColumnMeta, ControlPanelConfig, ControlPanelState, ControlState, @@ -76,16 +79,29 @@ 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 && + (state.controls.adhoc_filters.value as AdhocFilter[]).some( + (val: SimpleAdhocFilter) => + val.subject === col.column_name, + ), + ); + return { + ...originalMapStateToPropsRes, + columns, + externalValidationErrors: validateTimeComparisonRangeValues( + state.controls?.time_comparison?.value, + controlState.value, + ), + }; + }, }, }, ], @@ -138,6 +154,9 @@ const config: ControlPanelConfig = { y_axis_format: { label: t('Number format'), }, + adhoc_filters: { + rerender: ['adhoc_custom'], + }, }, formDataOverrides: formData => ({ ...formData, diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx index 5295bd6dae2..bf8b7b6e81a 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);