73 lines
2.8 KiB
TypeScript
73 lines
2.8 KiB
TypeScript
import { InternshipReportAction, InternshipReportActions } from "@/state/actions";
|
|
import { Serializable } from "@/serialization/types";
|
|
import {
|
|
createSubmissionReducer,
|
|
defaultDeanApprovalsState,
|
|
defaultSubmissionState,
|
|
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 { Report } from "@/data/report";
|
|
import { reportSerializationTransformer } from "@/serialization/report";
|
|
|
|
export type InternshipReportState = SubmissionState & {
|
|
report: Serializable<Report> | null;
|
|
evaluation: InternshipDocument | null;
|
|
}
|
|
|
|
const defaultInternshipReportState: InternshipReportState = {
|
|
...defaultDeanApprovalsState,
|
|
...defaultSubmissionState,
|
|
report: null,
|
|
evaluation: null,
|
|
}
|
|
|
|
export const getInternshipReport = ({ report }: InternshipReportState): Report | null =>
|
|
report && reportSerializationTransformer.reverseTransform(report);
|
|
|
|
const internshipReportSubmissionReducer: Reducer<InternshipReportState, InternshipReportAction> = createSubmissionReducer({
|
|
[InternshipReportActions.Approve]: SubmissionAction.Approve,
|
|
[InternshipReportActions.Decline]: SubmissionAction.Decline,
|
|
[InternshipReportActions.Receive]: SubmissionAction.Receive,
|
|
[InternshipReportActions.Save]: SubmissionAction.Save,
|
|
[InternshipReportActions.Send]: SubmissionAction.Send,
|
|
})
|
|
|
|
const internshipReportReducer = (state: InternshipReportState = defaultInternshipReportState, action: InternshipReportAction): InternshipReportState => {
|
|
state = internshipReportSubmissionReducer(state, action);
|
|
|
|
switch (action.type) {
|
|
case InternshipReportActions.Reset:
|
|
return defaultInternshipReportState;
|
|
case InternshipReportActions.Save:
|
|
case InternshipReportActions.Send:
|
|
return {
|
|
...state,
|
|
}
|
|
case InternshipReportActions.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),
|
|
report: reportSerializationTransformer.transform(action.report),
|
|
comment: action.comment,
|
|
evaluation: action.evaluation,
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
}
|
|
|
|
export default internshipReportReducer;
|