-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.ts
37 lines (28 loc) · 1.27 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import {createWrapper, Context} from "next-redux-wrapper";
import {applyMiddleware, createStore, Middleware, Store} from "redux";
import {createLogger} from "redux-logger"
import createSagaMiddleware, {Task} from "redux-saga";
import rootReducer, {RootState} from "./reducers";
import rootSaga from "./sagas";
// ref: https://github.com/vercel/next.js/tree/canary/examples/with-redux-saga
// ref: https://github.com/kirill-konshin/next-redux-wrapper#usage-with-redux-saga
export interface SagaStore extends Store {
sagaTask?: Task;
}
const bindMiddleware = (middlewares: Middleware<any, any, any>[]) => {
if (process.env.NODE_ENV !== "production") {
const {composeWithDevTools} = require("redux-devtools-extension")
return composeWithDevTools(applyMiddleware(...middlewares))
}
return applyMiddleware(...middlewares)
}
const logger = createLogger();
export const makeStore = (context: Context) => {
const sagaMiddleware = createSagaMiddleware()
const store = createStore(rootReducer, bindMiddleware([sagaMiddleware, logger])) as SagaStore
store.sagaTask = sagaMiddleware.run(rootSaga)
return store
}
export const wrapper = createWrapper<Store<RootState>>(makeStore, {debug: true})
export * as dataStore from "./data"
export * as navigationStore from "./navigation"