70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
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<InternshipDocument> | null;
|
|
}
|
|
|
|
const defaultInternshipPlanState: InternshipPlanState = {
|
|
...defaultDeanApprovalsState,
|
|
...defaultSubmissionState,
|
|
document: null,
|
|
}
|
|
|
|
const internshipPlanSubmissionReducer: Reducer<InternshipPlanState, InternshipPlanAction> = 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;
|