You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by kg...@apache.org on 2024/03/05 20:24:32 UTC

(superset) branch master updated: fix: Allow only dttm columns in comparison filter in Period over Period chart (#27209)

This is an automated email from the ASF dual-hosted git repository.

kgabryje pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new a4c771e013 fix: Allow only dttm columns in comparison filter in Period over Period chart (#27209)
a4c771e013 is described below

commit a4c771e013957e95d80d252dcdedad7046348964
Author: Kamil Gabryjelski <ka...@gmail.com>
AuthorDate: Tue Mar 5 21:24:26 2024 +0100

    fix: Allow only dttm columns in comparison filter in Period over Period chart (#27209)
---
 .../BigNumberPeriodOverPeriod/controlPanel.ts      | 39 ++++++++++++++++------
 .../DndColumnSelectControl/DndFilterSelect.tsx     | 13 +++++++-
 2 files changed, 41 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 5ac80eaf96..be731421a0 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 5295bd6dae..bf8b7b6e81 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);