import { combineReducers } from 'redux'; import auth, { State as AuthState } from 'app/components/auth/reducer'; import user, { User } from 'app/components/user/reducer'; import accounts, { State as AccountsState } from 'app/components/accounts/reducer'; import i18n, { State as I18nState } from 'app/components/i18n/reducer'; import popup, { State as PopupState } from 'app/components/ui/popup/reducer'; import bsod, { State as BsodState } from 'app/components/ui/bsod/reducer'; import apps, { Apps } from 'app/components/dev/apps/reducer'; import { ThunkDispatch, ThunkAction as ReduxThunkAction } from 'redux-thunk'; import { Store as ReduxStore } from 'redux'; export interface RootState { auth: AuthState; bsod: BsodState; accounts: AccountsState; user: User; popup: PopupState; apps: Apps; i18n: I18nState; } export interface Action<T = any> { type: string; payload?: T; } export type Dispatch<T extends Action = Action> = ThunkDispatch<RootState, undefined, T>; export type GetState = () => RootState; export type ThunkAction<T = any> = ReduxThunkAction<T, RootState, undefined, Action>; export type Store = ReduxStore<RootState> & { dispatch: Dispatch; }; export default combineReducers<RootState>({ bsod, auth, user, accounts, i18n, popup, apps, });