refactor: redux

This commit is contained in:
cha0s 2024-01-24 06:46:37 -06:00
parent 2a67740911
commit 85958c2d87
5 changed files with 7 additions and 18 deletions

View File

@ -28,7 +28,6 @@
"@reduxjs/toolkit": "^1.5.0", "@reduxjs/toolkit": "^1.5.0",
"debug": "^4.3.3", "debug": "^4.3.3",
"lodash.throttle": "^4.1.1", "lodash.throttle": "^4.1.1",
"react-redux": "^7.2.2",
"reduce-reducers": "^1.0.4" "reduce-reducers": "^1.0.4"
}, },
"devDependencies": { "devDependencies": {

View File

@ -1,21 +1,19 @@
import {Flecks} from '@flecks/core'; import {Flecks} from '@flecks/core';
import {Provider} from 'react-redux';
import configureStore, {createReducer} from '../store'; import configureStore, {createReducer} from '../store';
import localStorageEnhancer from './local-storage'; import localStorageEnhancer from './local-storage';
export const hooks = { export const hooks = {
'@flecks/react.providers': Flecks.priority( '@flecks/web/client.up': Flecks.priority(
async (req, flecks) => { async (flecks) => {
const slices = await flecks.invokeMergeUnique('@flecks/redux.slices'); const slices = await flecks.invokeMergeUnique('@flecks/redux.slices');
const reducer = createReducer(flecks, slices); const reducer = createReducer(flecks, slices);
// Hydrate from server. // Hydrate from server.
const {preloadedState} = flecks.get('@flecks/redux'); const {preloadedState} = flecks.get('@flecks/redux');
const store = await configureStore(flecks, reducer, {preloadedState}); const store = await configureStore(flecks, reducer, {preloadedState});
flecks.redux = store; flecks.redux = store;
return [Provider, {store}];
}, },
{before: '@flecks/react/router/client'}, {before: '@flecks/react/client'},
), ),
'@flecks/redux.store': ({enhancers}) => { '@flecks/redux.store': ({enhancers}) => {
// Hydrate from and subscribe to localStorage. // Hydrate from and subscribe to localStorage.

View File

@ -21,9 +21,7 @@ const localStorageEnhancer = (createStore) => (reducer, initialState, enhancer)
// Hydrate. // Hydrate.
const storage = JSON.parse(window.localStorage.getItem('@flecks/redux/state')); const storage = JSON.parse(window.localStorage.getItem('@flecks/redux/state'));
if (storage) { if (storage) {
setTimeout(() => { store.dispatch(hydrateLocalStorage(storage));
store.dispatch(hydrateLocalStorage(storage));
}, 0);
} }
// Subscribes to changes. // Subscribes to changes.
store.subscribe( store.subscribe(

View File

@ -1,13 +1,12 @@
import {Flecks} from '@flecks/core'; import {Flecks} from '@flecks/core';
export * from '@reduxjs/toolkit'; export * from '@reduxjs/toolkit';
export * from 'react-redux';
export * from './actions'; export * from './actions';
export const hooks = { export const hooks = {
'@flecks/socket.packets': Flecks.provide(require.context('./packets', false, /\.js$/)), '@flecks/socket.packets': Flecks.provide(require.context('./packets', false, /\.js$/)),
'@flecks/web.config': async (req) => ({ '@flecks/web.config': async (req) => ({
preloadedState: req.redux.getState(), preloadedState: req['@flecks/redux'].getState(),
}), }),
}; };

View File

@ -1,5 +1,4 @@
import {D, Flecks} from '@flecks/core'; import {D} from '@flecks/core';
import {Provider} from 'react-redux';
import {hydrateServer} from './actions'; import {hydrateServer} from './actions';
import createReducer from './store/create-reducer'; import createReducer from './store/create-reducer';
@ -10,10 +9,6 @@ const debugSilly = debug.extend('silly');
export const hooks = { export const hooks = {
'@flecks/electron/server.extensions': (installer) => [installer.REDUX_DEVTOOLS], '@flecks/electron/server.extensions': (installer) => [installer.REDUX_DEVTOOLS],
'@flecks/react.providers': Flecks.priority(
(req) => [Provider, {store: req.redux}],
{before: '@flecks/react/router/server'},
),
'@flecks/web/server.request.route': (flecks) => async (req, res, next) => { '@flecks/web/server.request.route': (flecks) => async (req, res, next) => {
const slices = await flecks.invokeMergeUnique('@flecks/redux.slices'); const slices = await flecks.invokeMergeUnique('@flecks/redux.slices');
const reducer = createReducer(flecks, slices); const reducer = createReducer(flecks, slices);
@ -27,7 +22,7 @@ export const hooks = {
Object.keys(slices), Object.keys(slices),
preloadedState, preloadedState,
); );
req.redux = await configureStore(flecks, reducer, {preloadedState}); req['@flecks/redux'] = await configureStore(flecks, reducer, {preloadedState});
next(); next();
}, },
}; };