diff --git a/src/redux/stateLoader.js b/src/redux/stateLoader.js index e69de29..5186487 100644 --- a/src/redux/stateLoader.js +++ b/src/redux/stateLoader.js @@ -0,0 +1,38 @@ +export const loadState = () => { + try { + const stateName = localStorage.getItem('user_key') + const serializedState = localStorage.getItem(stateName) + + if (stateName === null) { + return {} + } else if (serializedState === null) { + return {} + } else { + return JSON.parse(serializedState) + } + + + } catch (err) { + console.log(err) + return undefined + } +}; + +export const saveState = (state) => { + try { + + const stateName = localStorage.getItem('user_key') + const serializedState = JSON.stringify(state) + + if (stateName === null) { + return undefined + } else if (serializedState === null) { + return undefined + } else { + localStorage.setItem(stateName, serializedState) + + } + } catch (err) { + console.log('save in local storage error') + } +}; \ No newline at end of file diff --git a/src/redux/store.js b/src/redux/store.js index e69de29..d47e423 100644 --- a/src/redux/store.js +++ b/src/redux/store.js @@ -0,0 +1,32 @@ +import { configureStore } from '@reduxjs/toolkit'; + +import { loadState, saveState } from './stateLoader' +import lodash from 'lodash' + +import { modelCrudReducer } from './slices/modelCrudSlice' +import { renderCrudReducer } from './slices/renderCrudSlice' +import { renderWebsocketReducer } from './slices/renderWebsocketSlice' +import { userAuthReducer } from './slices/userAuthSlice' +import { userCrudReducer } from './slices/userCrudSlice' + + +let persistedState = loadState() + +export const store = configureStore({ + reducer: { + modelCrudReducer, + renderCrudReducer, + renderWebsocketReducer, + userAuthReducer, + userCrudReducer + }, + preloadedState: persistedState +}) + +store.subscribe(() => { + saveState(store.getState()); +}); + +store.subscribe(lodash.throttle(() => { + saveState(store.getState()) +}, 100))