From da00ac8d444f14cc274eb2773fc4c7ba134b6eec Mon Sep 17 00:00:00 2001 From: Warrick Corfe-Tan Date: Thu, 24 Jun 2021 15:31:20 +1000 Subject: [PATCH] Saving userConfig redux slice to local storage. --- package.json | 1 + ts/components/session/SessionInboxView.tsx | 18 +++++++++++++----- .../session/settings/SessionSettings.tsx | 4 +++- ts/state/createStore.ts | 14 +++++++++++++- yarn.lock | 5 +++++ 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 258ec57cd..72a9eb215 100644 --- a/package.json +++ b/package.json @@ -108,6 +108,7 @@ "read-last-lines": "1.3.0", "redux": "4.0.1", "redux-logger": "3.0.6", + "redux-persist": "^6.0.0", "redux-promise-middleware": "6.1.0", "reselect": "4.0.0", "rimraf": "2.6.2", diff --git a/ts/components/session/SessionInboxView.tsx b/ts/components/session/SessionInboxView.tsx index fdc97520b..8e925767b 100644 --- a/ts/components/session/SessionInboxView.tsx +++ b/ts/components/session/SessionInboxView.tsx @@ -19,6 +19,9 @@ import { makeLookup } from '../../util'; import { LeftPane } from '../LeftPane'; import { SessionMainPanel } from '../SessionMainPanel'; +import { PersistGate } from 'redux-persist/integration/react'; +import { persistStore } from 'redux-persist'; + // Workaround: A react component's required properties are filtering up through connect() // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31363 @@ -54,13 +57,18 @@ export class SessionInboxView extends React.Component { return <>; } + let persistor = persistStore(this.store); + return ( -
-
- {this.renderLeftPane()} -
- + + +
+
+ {this.renderLeftPane()} +
+ + ); } diff --git a/ts/components/session/settings/SessionSettings.tsx b/ts/components/session/settings/SessionSettings.tsx index f13d9087e..6daf1e68d 100644 --- a/ts/components/session/settings/SessionSettings.tsx +++ b/ts/components/session/settings/SessionSettings.tsx @@ -362,7 +362,9 @@ class SettingsViewInner extends React.Component { setFn: () => { window.inboxStore?.dispatch(toggleAudioAutoplay()); }, - content: undefined, + content: { + defaultValue: window.inboxStore?.getState().userConfig.audioAutoplay + }, comparisonValue: undefined, onClick: undefined, confirmationDialogParams: undefined, diff --git a/ts/state/createStore.ts b/ts/state/createStore.ts index 8f936c93a..9ce6b5e98 100644 --- a/ts/state/createStore.ts +++ b/ts/state/createStore.ts @@ -2,6 +2,8 @@ import promise from 'redux-promise-middleware'; import { createLogger } from 'redux-logger'; import { configureStore } from '@reduxjs/toolkit'; import { reducer as allReducers } from './reducer'; +import { persistReducer } from "redux-persist"; +import storage from 'redux-persist/lib/storage'; // @ts-ignore const env = window.getEnvironment(); @@ -22,13 +24,23 @@ const logger = createLogger({ logger: directConsole, }); +const persistConfig = { + key: 'root', + storage, + whitelist: ['userConfig'] +} + +const persistedReducer = persistReducer(persistConfig, allReducers); + // Exclude logger if we're in production mode const disableLogging = env === 'production' || true; // ALWAYS TURNED OFF +// const middlewareList = disableLogging ? [promise, thunk] : [promise, logger, thunk ]; const middlewareList = disableLogging ? [promise] : [promise, logger]; export const createStore = (initialState: any) => configureStore({ - reducer: allReducers, + // reducer: allReducers, + reducer: persistedReducer, preloadedState: initialState, middleware: (getDefaultMiddleware: any) => getDefaultMiddleware().concat(middlewareList), }); diff --git a/yarn.lock b/yarn.lock index c7405d35e..e566548e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9660,6 +9660,11 @@ redux-logger@3.0.6: dependencies: deep-diff "^0.3.5" +redux-persist@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" + integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== + redux-promise-middleware@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/redux-promise-middleware/-/redux-promise-middleware-6.1.0.tgz#ecdb22488cdd673c1a3f0d278d82b48d92ca5d06"