import * as Actions from "../actions"; import { ILearner } from "../models/learner"; import { IUser } from "../models/user"; import { IVocab } from "../models/vocab"; interface IState { drawer: boolean; drawerButton: boolean; authenticated: boolean; // TODO: Rework this user: IUser | {}, login: { loading: boolean; snackMsg: string; snackOpen: boolean; }; level: { currentVocab: IVocab; lookedAt: number[]; toReview: boolean; vocab: IVocab[]; loading: boolean; }; topTen: ILearner[]; }; const initialState: IState = { // Show the drawer? drawer: false, // Should we show the button to open the drawer? drawerButton: true, // Is the user authenticated? // TODO: Set this to false authenticated: true, user: {}, login: { loading: false, snackMsg: "", snackOpen: false, }, level: { currentVocab: {} as IVocab, lookedAt: [0], toReview: false, vocab: [], loading: true, }, // The top ten topTen: [], }; export function LateinicusApp(state: IState = initialState, action: any) { switch (action.type) { case Actions.SET_DRAWER: return Object.assign({}, state, { drawer: action.show, }); case Actions.SET_DRAWER_BUTTON: return Object.assign({}, state, { drawerButton: action.show, }); case Actions.LOGIN_SET_SNACKBAR: return Object.assign({}, state, { login: { loading: state.login.loading, snackMsg: action.msg, snackOpen: action.show, }, }); case Actions.LOGIN_SET_LOADING: return Object.assign({}, state, { login: { loading: action.show, snackMsg: state.login.snackMsg, snackOpen: state.login.snackOpen, }, }); case Actions.SET_AUTHENTICATED: return Object.assign({}, state, { authenticated: action.status, }); case Actions.SET_USER: return Object.assign({}, state, { user: action.user, }); case Actions.LEVEL_SET_REVIEW: return Object.assign({}, state, { level: Object.assign({}, state.level, { toReview: action.state, // Make sure that we are in a "loading mode", when the page gets // called the next time loading: true, }), }); case Actions.LEVEL_SET_LOOKEDAT: return Object.assign({}, state, { level: Object.assign({}, state.level, { lookedAt: action.lookedAt, }), }); case Actions.LEVEL_SET_CUR_VOCAB: return Object.assign({}, state, { level: Object.assign({}, state.level, { currentVocab: action.vocab, }), }); case Actions.LEVEL_SET_VOCAB: return Object.assign({}, state, { level: Object.assign({}, state.level, { vocab: action.vocab, }), }); case Actions.LEVEL_SET_LOADING: return Object.assign({}, state, { level: Object.assign({}, state.level, { loading: action.state, }), }); default: return state; } };