import { InternshipPlanAction, InternshipPlanActions } from "@/state/actions"; import { Serializable } from "@/serialization/types"; import { createSubmissionReducer, defaultDeanApprovalsState, defaultSubmissionState, MayRequireDeanApproval, SubmissionState } from "@/state/reducer/submission"; import { Reducer } from "react"; import { SubmissionAction } from "@/state/actions/submission"; import { InternshipDocument, SubmissionState as ApiSubmissionState } from "@/api/dto/internship-registration"; import { Api } from "mdi-material-ui"; export type InternshipPlanState = SubmissionState & MayRequireDeanApproval & { document: Serializable | null; } const defaultInternshipPlanState: InternshipPlanState = { ...defaultDeanApprovalsState, ...defaultSubmissionState, document: null, } const internshipPlanSubmissionReducer: Reducer = createSubmissionReducer({ [InternshipPlanActions.Approve]: SubmissionAction.Approve, [InternshipPlanActions.Decline]: SubmissionAction.Decline, [InternshipPlanActions.Receive]: SubmissionAction.Receive, [InternshipPlanActions.Save]: SubmissionAction.Save, [InternshipPlanActions.Send]: SubmissionAction.Send, }) const internshipPlanReducer = (state: InternshipPlanState = defaultInternshipPlanState, action: InternshipPlanAction): InternshipPlanState => { state = internshipPlanSubmissionReducer(state, action); switch (action.type) { case InternshipPlanActions.Save: case InternshipPlanActions.Send: return { ...state, document: action.document, } case InternshipPlanActions.Receive: if (state.overwritten) { return state; } return { ...state, accepted: action.state === ApiSubmissionState.Accepted, declined: action.state === ApiSubmissionState.Rejected, sent: [ ApiSubmissionState.Accepted, ApiSubmissionState.Rejected, ApiSubmissionState.Submitted ].includes(action.state), comment: action.comment || null, document: action.document, } case InternshipPlanActions.Reset: return defaultInternshipPlanState; default: return state; } } export default internshipPlanReducer;