Skip to content

Commit 4a7bb85

Browse files
committed
Save & load redux store to localStorage
1 parent e8fa9e8 commit 4a7bb85

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

mithril-explorer/pages/_app.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ import 'bootstrap/dist/css/bootstrap.min.css';
22
import 'bootstrap-icons/font/bootstrap-icons.css';
33
import '../styles/globals.css'
44
import Script from "next/script";
5-
import { storeWrapper } from "../store/store";
65
import {Provider} from "react-redux";
6+
import {saveToLocalStorage, storeWrapper} from "../store/store";
77

88
function MithrilExplorer({ Component, ...rest }) {
99
const {store, pageProps} = storeWrapper.useWrappedStore(rest);
10+
store.subscribe(() => saveToLocalStorage(store.getState()));
1011

1112
return (
1213
<>

mithril-explorer/store/settingsSlice.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export const settingsSlice = createSlice({
55
name: 'settings',
66
initialState: {
77
aggregator: available_aggregators[0],
8+
availableAggregators: available_aggregators,
89
updateInterval: 10000,
910
autoUpdate: true,
1011
},

mithril-explorer/store/store.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,27 @@ import { configureStore } from "@reduxjs/toolkit";
22
import { createWrapper } from "next-redux-wrapper";
33
import {settingsSlice} from "./settingsSlice";
44

5-
const makeStore = () => configureStore({
5+
const SAVED_STATE_KEY = "Explorer_State";
6+
7+
export function saveToLocalStorage(state) {
8+
if (typeof window !== 'undefined' && localStorage) {
9+
localStorage.setItem(SAVED_STATE_KEY, JSON.stringify(state));
10+
}
11+
}
12+
13+
function loadFromLocalStorage() {
14+
if (typeof window !== 'undefined' && localStorage) {
15+
const serialisedState = localStorage.getItem(SAVED_STATE_KEY);
16+
return serialisedState ? JSON.parse(serialisedState) : undefined;
17+
}
18+
return undefined;
19+
}
20+
21+
const storeBuilder = () => configureStore({
622
reducer: {
723
settings: settingsSlice.reducer,
824
},
9-
})
25+
preloadedState: loadFromLocalStorage(),
26+
});
1027

11-
export const storeWrapper = createWrapper(makeStore);
28+
export const storeWrapper = createWrapper(storeBuilder);

0 commit comments

Comments
 (0)