Signal-Desktop/ts/state/createStore.ts

52 lines
1.1 KiB
TypeScript
Raw Normal View History

2020-10-30 20:34:04 +00:00
// Copyright 2019-2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
import {
applyMiddleware,
createStore as reduxCreateStore,
DeepPartial,
Store,
} from 'redux';
2019-01-14 21:49:58 +00:00
import promise from 'redux-promise-middleware';
import thunk from 'redux-thunk';
2019-01-14 21:49:58 +00:00
import { createLogger } from 'redux-logger';
import { reducer, StateType } from './reducer';
declare global {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
interface Console {
_log: Console['log'];
}
}
2019-01-14 21:49:58 +00:00
const env = window.getEnvironment();
// So Redux logging doesn't go to disk, and so we can get colors/styles
const directConsole = {
log: console._log,
groupCollapsed: console.groupCollapsed,
group: console.group,
groupEnd: console.groupEnd,
warn: console.warn,
error: console.error,
};
const logger = createLogger({
logger: directConsole,
});
const middlewareList = [
promise,
thunk,
...(env === 'production' ? [] : [logger]),
];
2019-01-14 21:49:58 +00:00
const enhancer = applyMiddleware(...middlewareList);
2019-01-14 21:49:58 +00:00
export const createStore = (initialState: DeepPartial<StateType>): Store =>
2019-01-14 21:49:58 +00:00
reduxCreateStore(reducer, initialState, enhancer);