From dbab2fb9550900546714b9f5e7ed25242ccbd792 Mon Sep 17 00:00:00 2001 From: Geido <60598000+geido@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:20:51 +0200 Subject: [PATCH] fix(CrossFilters): Do not reload unrelated filters in global scope (#30252) Co-authored-by: JUST.in DO IT --- .../src/dashboard/util/crossFilters.test.ts | 4 ++-- .../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 b88579cc8..e811856a4 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 903a1f74f..880b82687 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> = Object.values( + charts, + ).reduce((acc: Record>, chart) => { + if (!chart.form_data) { + return acc; + } + const { datasource } = chart.form_data; + if (!acc[datasource]) { + acc[datasource] = new Set(); + } + acc[datasource].add(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]?.has(id), ) : getChartIdsInFilterScope( chartConfiguration[chartId].crossFilters.scope,