diff --git a/client/src/components/assignment/evaluation/EvaluationContainer.vue b/client/src/components/assignment/evaluation/EvaluationContainer.vue index 32ddcc08..7cd18bf6 100644 --- a/client/src/components/assignment/evaluation/EvaluationContainer.vue +++ b/client/src/components/assignment/evaluation/EvaluationContainer.vue @@ -2,13 +2,15 @@ import EvaluationIntro from "@/components/assignment/evaluation/EvaluationIntro.vue"; import EvaluationSummary from "@/components/assignment/evaluation/EvaluationSummary.vue"; import EvaluationTask from "@/components/assignment/evaluation/EvaluationTask.vue"; -import { useCourseSessionDetailQuery } from "@/composables"; +import { useCourseSessionDetailQuery, useCurrentCourseSession } from "@/composables"; +import { UPSERT_ASSIGNMENT_COMPLETION_MUTATION } from "@/graphql/mutations"; import type { Assignment, AssignmentCompletion, AssignmentEvaluationTask, CourseSessionUser, } from "@/types"; +import { useMutation } from "@urql/vue"; import { useRouteQuery } from "@vueuse/router"; import dayjs from "dayjs"; import { findIndex } from "lodash"; @@ -21,10 +23,12 @@ const props = defineProps<{ assignment: Assignment; }>(); -const emit = defineEmits(["close"]); +const emit = defineEmits(["close", "reopen"]); log.debug("UserEvaluation setup"); +const courseSession = useCurrentCourseSession(); + // 0 = introduction, 1 - n = tasks, n+1 = submission const stepIndex = useRouteQuery("step", "0", { transform: Number, mode: "push" }); @@ -58,6 +62,34 @@ function editTask(task: AssignmentEvaluationTask) { stepIndex.value = taskIndex + 1; } +function canReopen() { + return ( + evaluationSubmitted.value && + (props.assignment.assignment_type === "CASEWORK" || + props.assignment.assignment_type === "PRAXIS_ASSIGNMENT") + ); +} + +const upsertAssignmentCompletionMutation = useMutation( + UPSERT_ASSIGNMENT_COMPLETION_MUTATION +); + +async function reopen() { + log.debug("reopen"); + + await upsertAssignmentCompletionMutation.executeMutation({ + assignmentId: props.assignment.id, + courseSessionId: courseSession.value.id, + assignmentUserId: props.assignmentUser.id, + completionStatus: "EVALUATION_IN_PROGRESS", + completionDataString: JSON.stringify({}), + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + id: props.assignmentCompletion?.id, + }); + stepIndex.value = 1; +} + const courseSessionDetailResult = useCourseSessionDetailQuery(); const assignmentDetail = computed(() => { @@ -89,11 +121,11 @@ const taskExpertDataText = computed(() => { const text = computed(() => { if (props.assignment.assignment_type === "CASEWORK") { return { - evaluationFinish: "a.Bewertung abschliessen", + evaluationFinish: "a.Schliessen", }; } else if (props.assignment.assignment_type === "PRAXIS_ASSIGNMENT") { return { - evaluationFinish: "a.Feedback abschliessen", + evaluationFinish: "a.Schliessen", }; } else { return { @@ -109,6 +141,16 @@ function nextButtonEnabled() { return true; } +function previousButtonVisible() { + if ( + stepIndex.value > numTasks.value && + props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED" + ) { + return false; + } + return true; +} + function finishButtonEnabled() { return props.assignmentCompletion.completion_status === "EVALUATION_SUBMITTED"; } @@ -150,18 +192,19 @@ function finishButtonEnabled() {