mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-04-11 00:56:20 +00:00
Create dedicated store module
This commit is contained in:
33
src/store/index.ts
Normal file
33
src/store/index.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { configureStore } from '@reduxjs/toolkit';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import type { RLSOptions } from 'redux-localstorage-simple';
|
||||
import { load, save } from 'redux-localstorage-simple';
|
||||
import type { ShlinkState } from '../container/types';
|
||||
import { migrateDeprecatedSettings } from '../settings/helpers';
|
||||
import { initReducers } from './reducers';
|
||||
|
||||
const localStorageConfig: RLSOptions = {
|
||||
states: ['settings', 'servers'],
|
||||
namespace: 'shlink',
|
||||
namespaceSeparator: '.',
|
||||
debounce: 300,
|
||||
};
|
||||
const getStateFromLocalStorage = () => migrateDeprecatedSettings(load(localStorageConfig) as ShlinkState);
|
||||
|
||||
const isProduction = process.env.NODE_ENV === 'production';
|
||||
export const setUpStore = (preloadedState = getStateFromLocalStorage()) => configureStore({
|
||||
devTools: !isProduction,
|
||||
reducer: initReducers(),
|
||||
preloadedState,
|
||||
middleware: (defaultMiddlewaresIncludingReduxThunk) =>
|
||||
defaultMiddlewaresIncludingReduxThunk({ immutableCheck: false, serializableCheck: false }) // State is too big for these
|
||||
.concat(save(localStorageConfig)),
|
||||
});
|
||||
|
||||
export type StoreType = ReturnType<typeof setUpStore>;
|
||||
export type AppDispatch = StoreType['dispatch'];
|
||||
export type RootState = ReturnType<StoreType['getState']>;
|
||||
|
||||
// Typed versions of useDispatch() and useSelector()
|
||||
export const useAppDispatch = useDispatch.withTypes<AppDispatch>();
|
||||
export const useAppSelector = useSelector.withTypes<RootState>();
|
||||
12
src/store/reducers.ts
Normal file
12
src/store/reducers.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { combineReducers } from '@reduxjs/toolkit';
|
||||
import { appUpdatesReducer } from '../app/reducers/appUpdates';
|
||||
import { selectedServerReducer } from '../servers/reducers/selectedServer';
|
||||
import { serversReducer } from '../servers/reducers/servers';
|
||||
import { settingsReducer } from '../settings/reducers/settings';
|
||||
|
||||
export const initReducers = () => combineReducers({
|
||||
appUpdated: appUpdatesReducer,
|
||||
servers: serversReducer,
|
||||
selectedServer: selectedServerReducer,
|
||||
settings: settingsReducer,
|
||||
});
|
||||
Reference in New Issue
Block a user