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}