From 1ced7cdbbb65c6dc9c77a4ba2efaba5d56a00953 Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" <70410625+michael-s-molina@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:19:02 -0300 Subject: [PATCH] fix: Removes Redux state mutations - iteration 1 (#23522) --- .../src/components/Chart/chartReducer.ts | 4 ++-- .../src/dashboard/util/crossFilters.ts | 5 +++-- .../dashboard/util/updateComponentParentsList.js | 15 +++++++++------ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/superset-frontend/src/components/Chart/chartReducer.ts b/superset-frontend/src/components/Chart/chartReducer.ts index 1d1ae60ea6..d91d77c49a 100644 --- a/superset-frontend/src/components/Chart/chartReducer.ts +++ b/superset-frontend/src/components/Chart/chartReducer.ts @@ -18,6 +18,7 @@ */ /* eslint camelcase: 0 */ import { t } from '@superset-ui/core'; +import { omit } from 'lodash'; import { HYDRATE_DASHBOARD } from 'src/dashboard/actions/hydrate'; import { DatasourcesAction } from 'src/dashboard/actions/datasources'; import { ChartState } from 'src/explore/types'; @@ -180,8 +181,7 @@ export default function chartReducer( /* eslint-disable no-param-reassign */ if (action.type === actions.REMOVE_CHART) { - delete charts[action.key]; - return charts; + return omit(charts, [action.key]); } if (action.type === actions.UPDATE_CHART_ID) { const { newId, key } = action; diff --git a/superset-frontend/src/dashboard/util/crossFilters.ts b/superset-frontend/src/dashboard/util/crossFilters.ts index 862db89798..c166c10fbf 100644 --- a/superset-frontend/src/dashboard/util/crossFilters.ts +++ b/superset-frontend/src/dashboard/util/crossFilters.ts @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ - +import { cloneDeep } from 'lodash'; import { Behavior, FeatureFlag, @@ -60,7 +60,8 @@ export const getCrossFiltersConfiguration = ( if (behaviors.includes(Behavior.INTERACTIVE_CHART)) { if (initialConfig[chartId]) { - chartConfiguration[chartId] = initialConfig[chartId]; + // We need to clone to avoid mutating Redux state + chartConfiguration[chartId] = cloneDeep(initialConfig[chartId]); } if (!chartConfiguration[chartId]) { chartConfiguration[chartId] = { diff --git a/superset-frontend/src/dashboard/util/updateComponentParentsList.js b/superset-frontend/src/dashboard/util/updateComponentParentsList.js index 44e6c24a19..5a3d7d78f6 100644 --- a/superset-frontend/src/dashboard/util/updateComponentParentsList.js +++ b/superset-frontend/src/dashboard/util/updateComponentParentsList.js @@ -1,5 +1,3 @@ -import { logging } from '@superset-ui/core'; - /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -18,6 +16,8 @@ import { logging } from '@superset-ui/core'; * specific language governing permissions and limitations * under the License. */ +import { logging } from '@superset-ui/core'; + export default function updateComponentParentsList({ currentComponent, layout = {}, @@ -32,11 +32,14 @@ export default function updateComponentParentsList({ if (Array.isArray(currentComponent.children)) { currentComponent.children.forEach(childId => { - const child = layout[childId]; - if (child) { - child.parents = parentsList; // eslint-disable-line no-param-reassign + if (layout[childId]) { + // eslint-disable-next-line no-param-reassign + layout[childId] = { + ...layout[childId], + parents: parentsList, + }; updateComponentParentsList({ - currentComponent: child, + currentComponent: layout[childId], layout, }); } else {