import { reducerWithInitialState } from 'typescript-fsa-reducers' import { combineReducers } from 'redux' import { User, LoginStatus, AccessTokenStore, ISubmitLoginSuccess } from './interfaces' import * as actions from './actions' export const accessToken = reducerWithInitialState({} as AccessTokenStore) .case(actions.submitLoginSuccess, (state, { token }: ISubmitLoginSuccess) => { return { token, status: LoginStatus.SUCCESS } }) .case(actions.submitLoginPending, (state) => { return { ...state, status: LoginStatus.PENDING } }) .case(actions.submitLoginFailed, (state) => { return { ...state, status: LoginStatus.FAILED } }) .case(actions.logout, (state) => { return {} as AccessTokenStore }) export const user = reducerWithInitialState({}) .case(actions.fetchUserSuccess, (state, user: User) => { return user }) .case(actions.recieveGates, (state: any, gates: boolean) => { return { ...state, gates } }) .case(actions.logout, (state) => { return {} }) export const googleScopes = reducerWithInitialState([]) .case(actions.fetchGoogleScopesSuccess, (state, scopes) => scopes) export default combineReducers({ accessToken, user, googleScopes, })