import * as ModalActions from '../actions/modal' import { ModalState } from '../data' const initialModalState: ModalState = { modalType: '', modalProps: {}, modalHistory: [], } export const modalReducer = (state = initialModalState, action: ModalActions.ModalAction): ModalState => { switch (action.type) { case ModalActions.SHOW_MODAL: return showModal(state, action) case ModalActions.HIDE_MODAL: return hideModal(state, action) case ModalActions.UPDATE_MODAL_PROPS: return updateModal(state, action) default: return state } } const showModal = (state = initialModalState, action: ModalActions.ShowModalAction) => { const modalHistory = state.modalHistory.slice(0) if (state.modalType !== '') { modalHistory.push({ modalType: state.modalType, modalProps: state.modalProps }) } return { ...state, modalType: action.modalType, modalProps: action.modalProps, modalHistory } } const hideModal = (state = initialModalState, action: ModalActions.HideModalAction) => { const modalHistory = state.modalHistory.slice(0) const oldState = (modalHistory.length > 0) ? modalHistory.pop() : null if (oldState) { return { ...state, modalType: oldState.modalType, modalProps: oldState.modalProps, modalHistory, } } else { return initialModalState } } const updateModal = (state = initialModalState, action: ModalActions.UpdateModalPropsAction) => ({ ...state, modalProps: action.modalProps })