You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by di...@apache.org on 2024/09/12 15:09:59 UTC

(superset) 01/01: fix(CrossFilters): Do not reload unrelated filters in global scope

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

diegopucci pushed a commit to branch geido/fix/cross-filters-rendering
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 17c574a28dbf608b7d8bb4b6d121fe6efec7b42d
Author: Diego Pucci <di...@gmail.com>
AuthorDate: Thu Sep 12 17:09:46 2024 +0200

    fix(CrossFilters): Do not reload unrelated filters in global scope
---
 .../src/dashboard/util/crossFilters.test.ts           |  4 ++--
 superset-frontend/src/dashboard/util/crossFilters.ts  | 19 ++++++++++++++++++-
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/superset-frontend/src/dashboard/util/crossFilters.test.ts b/superset-frontend/src/dashboard/util/crossFilters.test.ts
index b88579cc84..e811856a4a 100644
--- a/superset-frontend/src/dashboard/util/crossFilters.test.ts
+++ b/superset-frontend/src/dashboard/util/crossFilters.test.ts
@@ -294,14 +294,14 @@ test('Recalculate charts in global filter scope when charts change', () => {
         id: 2,
         crossFilters: {
           scope: 'global',
-          chartsInScope: [1, 3],
+          chartsInScope: [1],
         },
       },
       '3': {
         id: 3,
         crossFilters: {
           scope: 'global',
-          chartsInScope: [1, 2],
+          chartsInScope: [],
         },
       },
     },
diff --git a/superset-frontend/src/dashboard/util/crossFilters.ts b/superset-frontend/src/dashboard/util/crossFilters.ts
index 903a1f74fb..768124c5d9 100644
--- a/superset-frontend/src/dashboard/util/crossFilters.ts
+++ b/superset-frontend/src/dashboard/util/crossFilters.ts
@@ -52,6 +52,20 @@ export const getCrossFiltersConfiguration = (
     return undefined;
   }
 
+  const chartsByDataSource: Record<string, number[]> = Object.values(
+    charts,
+  ).reduce((acc: Record<string, number[]>, chart) => {
+    if (!chart.form_data) {
+      return acc;
+    }
+    const { datasource } = chart.form_data;
+    if (!acc[datasource]) {
+      acc[datasource] = [];
+    }
+    acc[datasource].push(chart.id);
+    return acc;
+  }, {});
+
   const globalChartConfiguration = metadata.global_chart_configuration?.scope
     ? {
         scope: metadata.global_chart_configuration.scope,
@@ -97,10 +111,13 @@ export const getCrossFiltersConfiguration = (
           },
         };
       }
+      const chartDataSource = charts[chartId].form_data.datasource;
       chartConfiguration[chartId].crossFilters.chartsInScope =
         isCrossFilterScopeGlobal(chartConfiguration[chartId].crossFilters.scope)
           ? globalChartConfiguration.chartsInScope.filter(
-              id => id !== Number(chartId),
+              id =>
+                id !== Number(chartId) &&
+                chartsByDataSource[chartDataSource].includes(id),
             )
           : getChartIdsInFilterScope(
               chartConfiguration[chartId].crossFilters.scope,