Fix navigation when assignment completion is submitted

This commit is contained in:
Daniel Egger 2023-05-05 17:59:57 +02:00
parent 313417dfd6
commit 447d1d8915
3 changed files with 29 additions and 9 deletions

View File

@ -39,6 +39,10 @@ const circleExpertName = computed(() => {
return `${circleExpert.value?.first_name} ${circleExpert.value?.last_name}`; return `${circleExpert.value?.first_name} ${circleExpert.value?.last_name}`;
}); });
const completionStatus = computed(() => {
return assignmentStore.assignmentCompletion?.completion_status ?? "in_progress";
});
const onEditTask = (task: AssignmentTask) => { const onEditTask = (task: AssignmentTask) => {
emit("editTask", task); emit("editTask", task);
}; };
@ -67,7 +71,7 @@ const onSubmit = async () => {
{{ $t("assignment.acceptConditionsDisclaimer") }} {{ $t("assignment.acceptConditionsDisclaimer") }}
</h3> </h3>
<div v-if="!assignmentStore.submitted"> <div v-if="completionStatus === 'in_progress'">
<ItCheckbox <ItCheckbox
class="w-full border-b border-gray-400 py-6" class="w-full border-b border-gray-400 py-6"
:checkbox-item="{ :checkbox-item="{
@ -100,7 +104,7 @@ const onSubmit = async () => {
</div> </div>
<div class="flex flex-col space-x-2 pt-6 text-base sm:flex-row"> <div class="flex flex-col space-x-2 pt-6 text-base sm:flex-row">
<p>{{ $t("assignment.assessmentDocumentDisclaimer") }}</p> <p>{{ $t("assignment.assessmentDocumentDisclaimer") }}</p>
<a :href="props.assignment.assessment_document_url" class="underline"> <a :href="props.assignment.evaluation_document_url" class="underline">
{{ $t("assignment.showAssessmentDocument") }} {{ $t("assignment.showAssessmentDocument") }}
</a> </a>
</div> </div>
@ -129,7 +133,7 @@ const onSubmit = async () => {
<AssignmentSubmissionResponses <AssignmentSubmissionResponses
:assignment="props.assignment" :assignment="props.assignment"
:assignment-completion-data="props.assignmentCompletionData" :assignment-completion-data="props.assignmentCompletionData"
:allow-edit="true" :allow-edit="completionStatus === 'in_progress'"
@edit-task="onEditTask" @edit-task="onEditTask"
></AssignmentSubmissionResponses> ></AssignmentSubmissionResponses>
</template> </template>

View File

@ -11,7 +11,7 @@ import type {
} from "@/types"; } from "@/types";
import { useDebounceFn } from "@vueuse/core"; import { useDebounceFn } from "@vueuse/core";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { reactive, ref } from "vue"; import { computed, reactive, ref } from "vue";
const props = defineProps<{ const props = defineProps<{
assignmentId: number; assignmentId: number;
@ -87,6 +87,10 @@ const onToggleCheckbox = (id: string) => {
checkboxState[id] = !checkboxState[id]; checkboxState[id] = !checkboxState[id];
onUpdateConfirmation(id, checkboxState[id]); onUpdateConfirmation(id, checkboxState[id]);
}; };
const completionStatus = computed(() => {
return assignmentStore.assignmentCompletion?.completion_status ?? "in_progress";
});
</script> </script>
<template> <template>
@ -95,6 +99,7 @@ const onToggleCheckbox = (id: string) => {
<div v-if="block.type === 'explanation'"> <div v-if="block.type === 'explanation'">
<p class="default-wagtail-rich-text text-large" v-html="block.value.text"></p> <p class="default-wagtail-rich-text text-large" v-html="block.value.text"></p>
</div> </div>
<div v-if="block.type === 'user_confirmation'"> <div v-if="block.type === 'user_confirmation'">
<ItCheckbox <ItCheckbox
:checkbox-item="{ :checkbox-item="{
@ -102,7 +107,7 @@ const onToggleCheckbox = (id: string) => {
value: `confirmation-${index}`, value: `confirmation-${index}`,
checked: getBlockData(block.id) as boolean, checked: getBlockData(block.id) as boolean,
}" }"
:disabled="assignmentStore.submitted" :disabled="completionStatus !== 'in_progress'"
@toggle="onToggleCheckbox(block.id)" @toggle="onToggleCheckbox(block.id)"
></ItCheckbox> ></ItCheckbox>
</div> </div>
@ -111,7 +116,7 @@ const onToggleCheckbox = (id: string) => {
<ItTextarea <ItTextarea
:model-value="(getBlockData(block.id) as string) ?? ''" :model-value="(getBlockData(block.id) as string) ?? ''"
:cy-key="`user-text-input-${index}`" :cy-key="`user-text-input-${index}`"
:disabled="assignmentStore.submitted" :disabled="completionStatus !== 'in_progress'"
label="" label=""
@update:model-value="onUpdateText(block.id, $event)" @update:model-value="onUpdateText(block.id, $event)"
></ItTextarea> ></ItTextarea>

View File

@ -38,6 +38,11 @@ const props = defineProps<{
learningContent: LearningContent; learningContent: LearningContent;
}>(); }>();
const assignmentCompletion = computed(() => assignmentStore.assignmentCompletion);
const completionStatus = computed(() => {
return assignmentCompletion.value?.completion_status ?? "in_progress";
});
onMounted(async () => { onMounted(async () => {
log.debug("AssignmentView mounted", props.assignmentId, props.learningContent); log.debug("AssignmentView mounted", props.assignmentId, props.learningContent);
@ -52,7 +57,12 @@ onMounted(async () => {
props.assignmentId, props.assignmentId,
courseSessionId.value courseSessionId.value
); );
log.debug(state.assignment, state.courseSessionAssignmentDetails);
if (completionStatus.value === "in_progress") {
state.pageIndex = 0;
} else {
state.pageIndex = numPages.value - 1;
}
} catch (error) { } catch (error) {
log.error(error); log.error(error);
} }
@ -60,7 +70,9 @@ onMounted(async () => {
const numTasks = computed(() => state.assignment?.tasks?.length ?? 0); const numTasks = computed(() => state.assignment?.tasks?.length ?? 0);
const numPages = computed(() => numTasks.value + 2); const numPages = computed(() => numTasks.value + 2);
const showPreviousButton = computed(() => state.pageIndex != 0); const showPreviousButton = computed(
() => state.pageIndex != 0 && completionStatus.value === "in_progress"
);
const showNextButton = computed(() => state.pageIndex + 1 < numPages.value); const showNextButton = computed(() => state.pageIndex + 1 < numPages.value);
const showExitButton = computed(() => numPages.value === state.pageIndex + 1); const showExitButton = computed(() => numPages.value === state.pageIndex + 1);
const dueDate = computed(() => const dueDate = computed(() =>
@ -75,7 +87,6 @@ const currentTask = computed(() => {
} }
return undefined; return undefined;
}); });
const assignmentCompletion = computed(() => assignmentStore.assignmentCompletion);
const handleBack = () => { const handleBack = () => {
log.debug("handleBack"); log.debug("handleBack");