mirror of
https://github.com/edumeet/edumeet.git
synced 2026-07-25 20:03:55 +00:00
153 lines
3.6 KiB
JavaScript
153 lines
3.6 KiB
JavaScript
import {
|
|
createStore,
|
|
applyMiddleware,
|
|
compose
|
|
} from 'redux';
|
|
import thunk from 'redux-thunk';
|
|
import { createLogger } from 'redux-logger';
|
|
import { createMigrate, persistStore, persistReducer } from 'redux-persist';
|
|
import storage from 'redux-persist/lib/storage';
|
|
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';
|
|
// import { createFilter } from 'redux-persist-transform-filter';
|
|
import { diff } from 'deep-object-diff';
|
|
import rootReducer from './reducers/rootReducer';
|
|
import Logger from './Logger';
|
|
import { config } from './config';
|
|
|
|
const logger = new Logger('store');
|
|
|
|
const migrations =
|
|
{
|
|
// initial version 0: we will clean up all historical data
|
|
// from local storage for the time
|
|
// before we began with migration versioning
|
|
// next version 1 we have to implement like this:
|
|
// oldValue = undefined; // will remove oldValue from next local storage
|
|
// new values can be defined from app/public/config.js and go that way to new local storage
|
|
// redux-persist will save a version number to each local store.
|
|
// Next time store is initialized it will check if there are newer versions here in migrations
|
|
// and iterate over all defined greater version functions until version in persistConfig is reached.
|
|
0 : (state) =>
|
|
{
|
|
state = {};
|
|
|
|
return { ...state };
|
|
},
|
|
1 : (state) =>
|
|
{
|
|
state.me = undefined;
|
|
|
|
return { ...state };
|
|
},
|
|
2 : (state) =>
|
|
{
|
|
state.settings.autoGainControl = true;
|
|
|
|
return { ...state };
|
|
}
|
|
// Next version
|
|
// 4 : (state) =>
|
|
// {
|
|
// return { ...state };
|
|
// }
|
|
};
|
|
|
|
const persistConfig =
|
|
{
|
|
key : 'root',
|
|
storage : storage,
|
|
// migrate will iterate state over all version-functions
|
|
// from migrations until version is reached
|
|
version : 2,
|
|
migrate : createMigrate(migrations, { debug: true }),
|
|
stateReconciler : autoMergeLevel2,
|
|
whitelist : [ 'settings', 'intl', 'config' ]
|
|
};
|
|
|
|
/* const saveSubsetFilter = createFilter(
|
|
'me',
|
|
[ 'loggedIn' ]
|
|
);*/
|
|
|
|
const reduxMiddlewares =
|
|
[
|
|
thunk
|
|
];
|
|
|
|
if (process.env.REACT_APP_DEBUG === '*' || process.env.NODE_ENV !== 'production')
|
|
{
|
|
const LOG_IGNORE = [
|
|
'SET_PEER_VOLUME',
|
|
'SET_ROOM_ACTIVE_SPEAKER',
|
|
'ADD_TRANSPORT_STATS'
|
|
];
|
|
|
|
const reduxLogger = createLogger(
|
|
{
|
|
predicate : (getState, action) => LOG_IGNORE.indexOf(action.type) === -1,
|
|
duration : true,
|
|
collapsed : true,
|
|
timestamp : false,
|
|
level : 'info',
|
|
logErrors : true
|
|
});
|
|
|
|
reduxMiddlewares.push(reduxLogger);
|
|
}
|
|
|
|
const composeEnhancers =
|
|
typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
|
|
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) :
|
|
compose;
|
|
|
|
const enhancer = composeEnhancers(
|
|
applyMiddleware(...reduxMiddlewares)
|
|
);
|
|
|
|
const pReducer = persistReducer(persistConfig, rootReducer);
|
|
|
|
const initialState = {
|
|
intl : {
|
|
locale : null,
|
|
messages : null
|
|
}
|
|
// ...other initialState
|
|
};
|
|
|
|
export const store = createStore(
|
|
pReducer,
|
|
initialState,
|
|
enhancer
|
|
);
|
|
|
|
export const persistor = persistStore(store, null, () =>
|
|
{
|
|
// Check if the app config differs from the stored version.
|
|
const currentConfig = store.getState().config;
|
|
const changed = diff(currentConfig, config);
|
|
const changedKeys = Object.keys(changed);
|
|
|
|
if (changedKeys.length)
|
|
{
|
|
logger.debug('store config changed:', changed);
|
|
const changedSettings = {};
|
|
|
|
changedKeys.forEach((key) =>
|
|
{
|
|
changedSettings[key] = config[key];
|
|
});
|
|
|
|
store.dispatch({ type: 'SETTINGS_UPDATE', payload: changedSettings });
|
|
store.dispatch({ type: 'CONFIG_SET', payload: config });
|
|
}
|
|
});
|
|
|
|
/*
|
|
|
|
export const persistor = persistStore(store, {
|
|
transforms : [
|
|
saveSubsetFilter
|
|
]
|
|
|
|
});
|
|
*/
|