2022-11-02 20:40:14 +01:00
|
|
|
import { IContainer } from 'bottlejs';
|
2020-08-22 08:47:19 +02:00
|
|
|
import { save, load, RLSOptions } from 'redux-localstorage-simple';
|
2022-11-01 12:52:27 +01:00
|
|
|
import { configureStore } from '@reduxjs/toolkit';
|
|
|
|
import reducer from '../reducers';
|
2021-12-23 17:53:06 +01:00
|
|
|
import { migrateDeprecatedSettings } from '../settings/helpers';
|
|
|
|
import { ShlinkState } from './types';
|
2018-12-17 20:03:36 +01:00
|
|
|
|
2022-04-02 08:31:15 +02:00
|
|
|
const isProduction = process.env.NODE_ENV === 'production';
|
2020-08-22 08:47:19 +02:00
|
|
|
const localStorageConfig: RLSOptions = {
|
2022-03-26 12:17:42 +01:00
|
|
|
states: ['settings', 'servers'],
|
2020-04-26 19:04:17 +02:00
|
|
|
namespace: 'shlink',
|
|
|
|
namespaceSeparator: '.',
|
2020-05-03 20:16:21 +02:00
|
|
|
debounce: 300,
|
2020-04-26 19:04:17 +02:00
|
|
|
};
|
2021-12-23 17:53:06 +01:00
|
|
|
const preloadedState = migrateDeprecatedSettings(load(localStorageConfig) as ShlinkState);
|
2020-04-26 19:04:17 +02:00
|
|
|
|
2022-11-02 20:40:14 +01:00
|
|
|
export const setUpStore = (container: IContainer) => configureStore({
|
2022-11-01 12:52:27 +01:00
|
|
|
devTools: !isProduction,
|
2022-11-02 20:40:14 +01:00
|
|
|
reducer: reducer(container),
|
2022-11-01 12:52:27 +01:00
|
|
|
preloadedState,
|
2022-11-11 19:31:05 +01:00
|
|
|
middleware: (defaultMiddlewaresIncludingReduxThunk) =>
|
2022-11-12 17:51:37 +01:00
|
|
|
defaultMiddlewaresIncludingReduxThunk({ immutableCheck: false, serializableCheck: false }) // State is too big for these
|
2022-11-11 19:31:05 +01:00
|
|
|
.prepend(container.selectServerListener.middleware)
|
|
|
|
.concat(save(localStorageConfig)),
|
2022-11-01 12:52:27 +01:00
|
|
|
});
|