From 9c87e448ccd925a3573e27c5cb67a9c8e9e97bc1 Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" <70410625+michael-s-molina@users.noreply.github.com> Date: Tue, 28 Mar 2023 18:30:24 -0300 Subject: [PATCH] fix: Preserves selected scopes when toggling between scope types (#23475) (cherry picked from commit 80d1e4ffa3626aac8af15111c00fc2c85aeba1bc) --- .../FilterScope/FilterScope.test.tsx | 2 +- .../FilterScope/FilterScope.tsx | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx index 10b48b9d9cc87..a808823a094f1 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx @@ -129,7 +129,7 @@ describe('FilterScope', () => { expect(screen.getByRole('tree')).toBeInTheDocument(); expect( document.querySelectorAll('.ant-tree-checkbox-checked').length, - ).toBe(1); + ).toBe(4); }); }); }); diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx index 059e202905523..dec1481c29c99 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.tsx @@ -17,7 +17,7 @@ * under the License. */ -import React, { FC, useCallback, useState } from 'react'; +import React, { FC, useCallback, useRef, useState } from 'react'; import { NativeFilterScope, styled, t } from '@superset-ui/core'; import { Radio } from 'src/components/Radio'; import { AntdForm, Typography } from 'src/components'; @@ -63,6 +63,7 @@ const FilterScope: FC = ({ const [initialFilterScope] = useState( filterScope || getDefaultScopeValue(chartId, initiallyExcludedCharts), ); + const lastSpecificScope = useRef(initialFilterScope); const [initialScopingType] = useState( isScopingAll(initialFilterScope, chartId) ? ScopingType.all @@ -74,10 +75,13 @@ const FilterScope: FC = ({ const onUpdateFormValues = useCallback( (formValues: any) => { + if (formScopingType === ScopingType.specific) { + lastSpecificScope.current = formValues.scope; + } updateFormValues(formValues); setHasScopeBeenModified(true); }, - [updateFormValues], + [formScopingType, updateFormValues], ); const updateScopes = useCallback(() => { @@ -109,12 +113,11 @@ const FilterScope: FC = ({ > { - if (value === ScopingType.all) { - const scope = getDefaultScopeValue(chartId); - updateFormValues({ - scope, - }); - } + const scope = + value === ScopingType.all + ? getDefaultScopeValue(chartId) + : lastSpecificScope.current; + updateFormValues({ scope }); setHasScopeBeenModified(true); forceUpdate(); }}