From 2459886c84568d5debc69379d02dea91763c0c6a Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Sun, 3 Apr 2022 17:12:24 -0400 Subject: [PATCH] Avoid persisting the selected action between sessions --- .../redux-devtools-app/src/actions/index.ts | 9 +++++++- .../src/reducers/monitor.ts | 23 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/redux-devtools-app/src/actions/index.ts b/packages/redux-devtools-app/src/actions/index.ts index 1debc8d3..45d53105 100644 --- a/packages/redux-devtools-app/src/actions/index.ts +++ b/packages/redux-devtools-app/src/actions/index.ts @@ -1,5 +1,6 @@ import { SchemeName, ThemeName } from '@redux-devtools/ui'; import { AuthStates, States } from 'socketcluster-client/lib/scclientsocket'; +import { REHYDRATE } from 'redux-persist'; import { CHANGE_SECTION, CHANGE_THEME, @@ -559,6 +560,11 @@ export interface ErrorAction { payload: string; } +interface ReduxPersistRehydrateAction { + type: typeof REHYDRATE; + payload: unknown; +} + export type StoreActionWithoutUpdateStateOrLiftedAction = | ChangeSectionAction | ChangeThemeAction @@ -594,7 +600,8 @@ export type StoreActionWithoutUpdateStateOrLiftedAction = | UpdateReportsAction | GetReportError | GetReportSuccess - | ErrorAction; + | ErrorAction + | ReduxPersistRehydrateAction; export type StoreActionWithoutUpdateState = | StoreActionWithoutUpdateStateOrLiftedAction diff --git a/packages/redux-devtools-app/src/reducers/monitor.ts b/packages/redux-devtools-app/src/reducers/monitor.ts index da174f37..6af82cb6 100644 --- a/packages/redux-devtools-app/src/reducers/monitor.ts +++ b/packages/redux-devtools-app/src/reducers/monitor.ts @@ -1,3 +1,4 @@ +import { REHYDRATE } from 'redux-persist'; import { MONITOR_ACTION, SELECT_MONITOR, @@ -93,6 +94,28 @@ export function monitor( ...state, dispatcherIsOpen: !state.dispatcherIsOpen, }; + case REHYDRATE: + const rehydratedState = action.payload as { + readonly monitor: MonitorState; + } | undefined; + if (!rehydratedState) return state; + if ( + rehydratedState.monitor.monitorState && + (typeof rehydratedState.monitor.monitorState.selectedActionId === + 'number' || + typeof rehydratedState.monitor.monitorState.startActionId === + 'number') + ) { + return { + ...rehydratedState.monitor, + monitorState: { + ...rehydratedState.monitor.monitorState, + selectedActionId: null, + startActionId: null, + }, + }; + } + return rehydratedState.monitor; default: return state; }