Skip to content

Commit

Permalink
fix: Removes Redux state mutations - iteration 3 (#23637)
Browse files Browse the repository at this point in the history
  • Loading branch information
michael-s-molina authored Apr 10, 2023
1 parent ca408a7 commit 8bd8276
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions superset-frontend/src/components/Chart/ChartRenderer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
import { snakeCase, isEqual } from 'lodash';
import { snakeCase, isEqual, cloneDeep } from 'lodash';
import PropTypes from 'prop-types';
import React from 'react';
import {
Expand Down Expand Up @@ -117,6 +117,11 @@ class ChartRenderer extends React.Component {
this.props.actions?.updateDataMask(this.props.chartId, dataMask);
},
};

// TODO: queriesResponse comes from Redux store but it's being edited by
// the plugins, hence we need to clone it to avoid state mutation
// until we change the reducers to use Redux Toolkit with Immer
this.mutableQueriesResponse = cloneDeep(this.props.queriesResponse);
}

shouldComponentUpdate(nextProps, nextState) {
Expand All @@ -131,6 +136,11 @@ class ChartRenderer extends React.Component {
}
this.hasQueryResponseChange =
nextProps.queriesResponse !== this.props.queriesResponse;

if (this.hasQueryResponseChange) {
this.mutableQueriesResponse = cloneDeep(nextProps.queriesResponse);
}

return (
this.hasQueryResponseChange ||
!isEqual(nextProps.datasource, this.props.datasource) ||
Expand Down Expand Up @@ -246,7 +256,6 @@ class ChartRenderer extends React.Component {
chartIsStale,
formData,
latestQueryFormData,
queriesResponse,
postTransformProps,
} = this.props;

Expand Down Expand Up @@ -339,7 +348,7 @@ class ChartRenderer extends React.Component {
filterState={filterState}
hooks={this.hooks}
behaviors={behaviors}
queriesData={queriesResponse}
queriesData={this.mutableQueriesResponse}
onRenderSuccess={this.handleRenderSuccess}
onRenderFailure={this.handleRenderFailure}
noResults={noResultsComponent}
Expand Down

0 comments on commit 8bd8276

Please sign in to comment.