mirror of
https://github.com/kremalicious/umami.git
synced 2024-10-31 23:35:32 +01:00
41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
|
import { useMemo } from 'react';
|
||
|
import { configureStore } from '@reduxjs/toolkit';
|
||
|
import thunk from 'redux-thunk';
|
||
|
import rootReducer from './reducers';
|
||
|
|
||
|
let store;
|
||
|
|
||
|
export function getStore(preloadedState) {
|
||
|
return configureStore({
|
||
|
reducer: rootReducer,
|
||
|
middleware: [thunk],
|
||
|
preloadedState,
|
||
|
});
|
||
|
}
|
||
|
|
||
|
export const initializeStore = preloadedState => {
|
||
|
let _store = store ?? getStore(preloadedState);
|
||
|
|
||
|
// After navigating to a page with an initial Redux state, merge that state
|
||
|
// with the current state in the store, and create a new store
|
||
|
if (preloadedState && store) {
|
||
|
_store = getStore({
|
||
|
...store.getState(),
|
||
|
...preloadedState,
|
||
|
});
|
||
|
// Reset the current store
|
||
|
store = undefined;
|
||
|
}
|
||
|
|
||
|
// For SSG and SSR always create a new store
|
||
|
if (typeof window === 'undefined') return _store;
|
||
|
// Create the store once in the client
|
||
|
if (!store) store = _store;
|
||
|
|
||
|
return _store;
|
||
|
};
|
||
|
|
||
|
export function useStore(initialState) {
|
||
|
return useMemo(() => initializeStore(initialState), [initialState]);
|
||
|
}
|