UNPKG

webpack-typescript-builder

Version:

Webpack config builder for typescript, styles (css and sass), fonts and images.

62 lines (50 loc) 1.85 kB
// @ts-nocheck import { connectRouter } from "connected-react-router"; import { routerMiddleware } from "connected-react-router"; import { createBrowserHistory, History } from "history"; import * as Redux from "redux"; import { Context } from "../../common"; // @ts-ignore import devMiddlewares from "injected-default-middlewares"; import { middlewares, reducers } from "injected-app-module/store"; export function createContext(abstractHistory?: History): Context { const initialState = typeof window === "undefined" || typeof (window as any).__PRELOADED_STATE__ === "undefined" ? undefined : JSON.parse((window as any)?.__PRELOADED_STATE__); const history = abstractHistory ?? createBrowserHistory(); return { history, store: configureStore(history, initialState), }; } function createRootReducer(history: History, appReducers: any) { return Redux.combineReducers({ ...appReducers, router: connectRouter(history), }); } function configureStore(history: History, initialState?: any): any { // Create reducers from root const rootReducers = createRootReducer(history, reducers); // Adding logger and router to middlewares const isSsr = typeof window === "undefined"; const defaultMiddlewares: Redux.Middleware = !isSsr ? devMiddlewares : []; defaultMiddlewares.push(routerMiddleware(history)); const pipeline = Redux.applyMiddleware(...defaultMiddlewares, ...middlewares); // create store const store = Redux.createStore( rootReducers, initialState, Redux.compose(pipeline), ); if (module.hot) { module.hot.accept(["injected-app-module/store"], () => { const newStore = require("injected-app-module/store"); const nextReducer = createRootReducer(history, newStore.reducers); store.replaceReducer(nextReducer); }); } return store; }