import { DARSState, INITIAL_DARS_STATE } from '@app/dars/store/state'; import { DarsActionTypes } from './actions'; import * as darsActions from './actions'; type SupportedActions = | darsActions.ErrorLoadingMetadata | darsActions.AddAuditMetadata | darsActions.StartLoadingAudit | darsActions.DoneLoadingAudit | darsActions.CloseAudit; export function darsReducer( state = INITIAL_DARS_STATE, action: SupportedActions, ): DARSState { switch (action.type) { case DarsActionTypes.ErrorLoadingMetadata: { return { ...state, metadata: { status: 'Error', message: action.payload.message, }, }; } case DarsActionTypes.AddAuditMetadata: { if (state.metadata.status === 'Loaded') { return { ...state, metadata: { status: 'Loaded', metadata: state.metadata.metadata.concat(action.payload.metadata), }, }; } else { return { ...state, metadata: { status: 'Loaded', metadata: action.payload.metadata, }, }; } } case DarsActionTypes.StartLoadingAudit: { return { ...state, visibleAudit: { status: 'Loading', metadata: action.payload, }, }; } case DarsActionTypes.DoneLoadingAudit: { return { ...state, visibleAudit: { status: 'Loaded', metadata: action.payload.metadata, audit: action.payload.audit, }, }; } case DarsActionTypes.CloseAudit: { return { ...state, visibleAudit: { status: 'NotLoaded' }, }; } default: return state; } }