From 060db7c98b9146ee7c1a3dd84f9e637865ce9cea Mon Sep 17 00:00:00 2001 From: Anton Kulyk <kuliks.anton@gmail.com> Date: Mon, 4 Apr 2022 15:51:09 +0100 Subject: [PATCH] Reset dashboard state when leaving the page (#21445) --- frontend/src/metabase/dashboard/actions.js | 2 ++ .../dashboard/containers/DashboardApp.jsx | 4 ++++ frontend/src/metabase/dashboard/reducers.js | 24 ++++++++++++++++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/frontend/src/metabase/dashboard/actions.js b/frontend/src/metabase/dashboard/actions.js index 10496e1d929..070820cb721 100644 --- a/frontend/src/metabase/dashboard/actions.js +++ b/frontend/src/metabase/dashboard/actions.js @@ -80,6 +80,7 @@ const dashboard = new schema.Entity("dashboard", { // action constants export const INITIALIZE = "metabase/dashboard/INITIALIZE"; +export const RESET = "metabase/dashboard/RESET"; export const SET_EDITING_DASHBOARD = "metabase/dashboard/SET_EDITING_DASHBOARD"; @@ -143,6 +144,7 @@ export const SET_SHOW_LOADING_COMPLETE_FAVICON = "metabase/dashboard/SET_SHOW_LOADING_COMPLETE_FAVICON"; export const initialize = createAction(INITIALIZE); +export const reset = createAction(RESET); export const setEditingDashboard = createAction(SET_EDITING_DASHBOARD); export const setSidebar = createAction(SET_SIDEBAR); diff --git a/frontend/src/metabase/dashboard/containers/DashboardApp.jsx b/frontend/src/metabase/dashboard/containers/DashboardApp.jsx index 025fe97bb97..379261c20a3 100644 --- a/frontend/src/metabase/dashboard/containers/DashboardApp.jsx +++ b/frontend/src/metabase/dashboard/containers/DashboardApp.jsx @@ -133,6 +133,10 @@ export default class DashboardApp extends Component { } } + componentWillUnmount() { + this.props.reset(); + } + render() { const { editingOnLoad, addCardOnLoad } = this.state; diff --git a/frontend/src/metabase/dashboard/reducers.js b/frontend/src/metabase/dashboard/reducers.js index 52c6264325b..c4bb2b563a1 100644 --- a/frontend/src/metabase/dashboard/reducers.js +++ b/frontend/src/metabase/dashboard/reducers.js @@ -34,6 +34,7 @@ import { SAVE_DASHBOARD_AND_CARDS, SET_DASHBOARD_SEEN, SET_SHOW_LOADING_COMPLETE_FAVICON, + RESET, } from "./actions"; import { isVirtualDashCard, syncParametersAndEmbeddingParams } from "./utils"; @@ -44,6 +45,7 @@ const dashboardId = handleActions( [FETCH_DASHBOARD]: { next: (state, { payload: { dashboardId } }) => dashboardId, }, + [RESET]: { next: state => null }, }, null, ); @@ -54,6 +56,7 @@ const isEditing = handleActions( [SET_EDITING_DASHBOARD]: { next: (state, { payload }) => (payload ? payload : null), }, + [RESET]: { next: state => null }, }, null, ); @@ -65,6 +68,7 @@ const hasSeenLoadedDashboard = handleActions( [SET_DASHBOARD_SEEN]: { next: state => true, }, + [RESET]: { next: state => false }, }, false, ); @@ -76,6 +80,7 @@ const showLoadingCompleteFavicon = handleActions( [SET_SHOW_LOADING_COMPLETE_FAVICON]: { next: (state, { payload }) => payload, }, + [RESET]: { next: state => false }, }, false, ); @@ -224,6 +229,7 @@ const isAddParameterPopoverOpen = handleActions( [SHOW_ADD_PARAMETER_POPOVER]: () => true, [HIDE_ADD_PARAMETER_POPOVER]: () => false, [INITIALIZE]: () => false, + [RESET]: () => false, }, false, ); @@ -247,6 +253,7 @@ const dashcardData = handleActions( .dissoc(oldDashcardId) .value(), }, + [RESET]: { next: state => ({}) }, }, {}, ); @@ -275,6 +282,7 @@ const parameterValues = handleActions( [FETCH_DASHBOARD]: { next: (state, { payload: { parameterValues } }) => parameterValues, }, + [RESET]: { next: state => ({}) }, }, {}, ); @@ -289,6 +297,7 @@ const parameterValuesSearchCache = handleActions( next: (state, { payload }) => payload ? assoc(state, payload.cacheKey, payload.results) : state, }, + [RESET]: { next: state => ({}) }, }, {}, ); @@ -346,6 +355,12 @@ const loadingDashCards = handleActions( }; }, }, + [RESET]: { + next: state => ({ + ...state, + isLoadingComplete: false, + }), + }, }, { dashcardIds: [], @@ -358,6 +373,9 @@ const loadingDashCards = handleActions( const DEFAULT_SIDEBAR = { props: {} }; const sidebar = handleActions( { + [INITIALIZE]: { + next: () => DEFAULT_SIDEBAR, + }, [SET_SIDEBAR]: { next: (state, { payload: { name, props } }) => ({ name, @@ -367,9 +385,6 @@ const sidebar = handleActions( [CLOSE_SIDEBAR]: { next: () => DEFAULT_SIDEBAR, }, - [INITIALIZE]: { - next: () => DEFAULT_SIDEBAR, - }, [SET_EDITING_DASHBOARD]: { next: (state, { payload: isEditing }) => isEditing ? state : DEFAULT_SIDEBAR, @@ -377,6 +392,9 @@ const sidebar = handleActions( [REMOVE_PARAMETER]: { next: () => DEFAULT_SIDEBAR, }, + [RESET]: { + next: () => DEFAULT_SIDEBAR, + }, }, DEFAULT_SIDEBAR, ); -- GitLab