From c99cacbdd2e73044a2f55b957bd85aada8b7c775 Mon Sep 17 00:00:00 2001 From: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Date: Tue, 14 Sep 2021 15:58:05 +0300 Subject: [PATCH] fix(explore): only refresh data panel on relevant changes (#16699) * fix(explore): only refresh data panel on relevant changes * add comment and supress warning --- .../components/DataTablesPane/index.tsx | 2 +- .../explore/components/ExploreChartPanel.jsx | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/superset-frontend/src/explore/components/DataTablesPane/index.tsx b/superset-frontend/src/explore/components/DataTablesPane/index.tsx index 98792c822..0cb68d33c 100644 --- a/superset-frontend/src/explore/components/DataTablesPane/index.tsx +++ b/superset-frontend/src/explore/components/DataTablesPane/index.tsx @@ -221,7 +221,7 @@ export const DataTablesPane = ({ ...prevState, [RESULT_TYPES.samples]: true, })); - }, [queryFormData.adhoc_filters, queryFormData.datasource]); + }, [queryFormData?.adhoc_filters, queryFormData?.datasource]); useEffect(() => { if (queriesResponse && chartStatus === 'success') { diff --git a/superset-frontend/src/explore/components/ExploreChartPanel.jsx b/superset-frontend/src/explore/components/ExploreChartPanel.jsx index db35dd762..282d9f1db 100644 --- a/superset-frontend/src/explore/components/ExploreChartPanel.jsx +++ b/superset-frontend/src/explore/components/ExploreChartPanel.jsx @@ -152,6 +152,7 @@ const ExploreChartPanel = props => { }, [slice], ); + useEffect(() => { updateQueryContext(); }, [updateQueryContext]); @@ -257,6 +258,22 @@ const ExploreChartPanel = props => { [chartPanelRef, renderChart], ); + const [queryFormData, setQueryFormData] = useState( + props.chart.latestQueryFormData, + ); + + useEffect(() => { + // only update when `latestQueryFormData` changes AND `triggerRender` + // is false. No update should be done when only `triggerRender` changes, + // as this can trigger a query downstream based on incomplete form data. + // (`latestQueryFormData` is only updated when a a valid request has been + // triggered). + if (!props.triggerRender) { + setQueryFormData(props.chart.latestQueryFormData); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [props.chart.latestQueryFormData]); + if (props.standalone) { // dom manipulation hack to get rid of the boostrap theme's body background const standaloneClass = 'background-transparent'; @@ -309,7 +326,7 @@ const ExploreChartPanel = props => { {panelBody}