Farmbot-Web-App/frontend/redux/store.ts

39 lines
1.1 KiB
TypeScript

import { createStore } from "redux";
import { Store } from "./interfaces";
import { rootReducer } from "./root_reducer";
import { registerSubscribers } from "./subscribers";
import { getMiddleware } from "./middlewares";
import { set } from "lodash";
function dev(): Store {
return createStore(rootReducer,
maybeFetchOldState(),
getMiddleware("development"));
}
function prod(): Store {
// tslint:disable-next-line:no-any
return createStore(rootReducer, ({} as any), getMiddleware("production"));
}
export function configureStore() {
const ENV = process.env.NODE_ENV || "development";
const store2: Store = (ENV === "production" ? prod() : dev());
// Make store global in case I need to probe it.
set(window, "store", store2);
registerSubscribers(store2);
return store2;
}
export const store = configureStore();
/** Tries to fetch previous state from `sessionStorage`.
* Returns {} if nothing is found. Used mostly for hot reloading. */
function maybeFetchOldState() {
try {
return JSON.parse(sessionStorage.getItem("lastState") || "{}");
} catch (e) {
return {};
}
}