diff --git a/.changeset/giant-oranges-report.md b/.changeset/giant-oranges-report.md new file mode 100644 index 00000000..f1303e36 --- /dev/null +++ b/.changeset/giant-oranges-report.md @@ -0,0 +1,7 @@ +--- +'@redux-devtools/app': patch +'@redux-devtools/core': patch +'remotedev-redux-devtools-extension': patch +--- + +Avoid persisting the selected action index between sessions 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..9dc3f8bf 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,31 @@ 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; }