Newer
Older
import { DARSState, INITIAL_DARS_STATE } from '@app/dars/store/state';
import { DarsActionTypes, AddAuditMetadata } from './actions';
import * as darsActions from './actions';
type SupportedActions =
| darsActions.ErrorLoadingMetadata
| darsActions.AddAuditMetadata
| darsActions.StartLoadingAudit
| darsActions.DoneLoadingAudit
export function darsReducer(
state = INITIAL_DARS_STATE,
action: SupportedActions,
): DARSState {
switch (action.type) {
case DarsActionTypes.PopulateDarsState: {
return { ...state, ...action.payload };
}
case DarsActionTypes.ErrorLoadingMetadata: {
return {
...state,
metadata: {
status: 'Error',
message: action.payload.message,
},
};
}
case DarsActionTypes.AddAuditMetadata: {
const programMetadata = (state.metadata.status === 'Loaded'
? state.metadata.programMetadata
: []
).concat(action.payload.programMetadata);
const whatIfMetadata = (state.metadata.status === 'Loaded'
? state.metadata.whatIfMetadata
: []
).concat(action.payload.whatIfMetadata);
return {
...state,
metadata: {
status: 'Loaded',
programMetadata: programMetadata,
whatIfMetadata,
},
};
}
case DarsActionTypes.StartLoadingAudit: {
return {
...state,
audits: {
...state.audits,
[action.payload.darsDegreeAuditReportId]: {
status: 'Loading',
metadata: action.payload,
},
},
};
}
case DarsActionTypes.DoneLoadingAudit: {
return {
...state,
audits: {
...state.audits,
[action.payload.metadata.darsDegreeAuditReportId]: {
status: 'Loaded',
metadata: action.payload.metadata,
audit: action.payload.audit,
},
},
};
}
case DarsActionTypes.DismissAlert: {
return {
...state,
alerts: state.alerts.filter(({ key }) => {
return key !== action.payload.key;
}),
};
}
default:
return state;
}
}