You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2023/03/31 17:19:13 UTC

[superset] branch master updated: fix: Removes Redux state mutations - iteration 1 (#23522)

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

michaelsmolina 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 1ced7cdbbb fix: Removes Redux state mutations - iteration 1 (#23522)
1ced7cdbbb is described below

commit 1ced7cdbbb65c6dc9c77a4ba2efaba5d56a00953
Author: Michael S. Molina <70...@users.noreply.github.com>
AuthorDate: Fri Mar 31 14:19:02 2023 -0300

    fix: Removes Redux state mutations - iteration 1 (#23522)
---
 superset-frontend/src/components/Chart/chartReducer.ts    |  4 ++--
 superset-frontend/src/dashboard/util/crossFilters.ts      |  5 +++--
 .../src/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 {