Redux -> add localstorage backup & state loader functionality

feature/2_forms
TBS093A 2021-02-17 14:58:14 +01:00
parent 08102edbd0
commit f5747c51b0
2 changed files with 70 additions and 0 deletions

View File

@ -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')
}
};

View File

@ -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))