Fix typecheck

This commit is contained in:
Christian Cueni 2024-08-10 13:30:15 +02:00
parent aca066a376
commit 05c4d471d8
10 changed files with 76 additions and 77 deletions

View File

@ -1,25 +1,33 @@
import {useCSRFFetch} from "@/fetchHelpers"; import { useCSRFFetch } from "@/fetchHelpers";
import type {CourseStatisticsType} from "@/gql/graphql"; import type { CourseStatisticsType } from "@/gql/graphql";
import {graphqlClient} from "@/graphql/client"; import { graphqlClient } from "@/graphql/client";
import {COURSE_QUERY, COURSE_SESSION_DETAIL_QUERY} from "@/graphql/queries"; import {
COMPETENCE_NAVI_CERTIFICATE_QUERY,
COURSE_QUERY,
COURSE_SESSION_DETAIL_QUERY,
} from "@/graphql/queries";
import { import {
circleFlatChildren, circleFlatChildren,
circleFlatLearningContents, circleFlatLearningContents,
circleFlatLearningUnits, circleFlatLearningUnits,
someFinishedInLearningSequence, someFinishedInLearningSequence,
} from "@/services/circle"; } from "@/services/circle";
import type {DashboardDueDate, DashboardPersonRoleType, DashboardPersonType,} from "@/services/dashboard"; import type {
DashboardDueDate,
DashboardPersonRoleType,
DashboardPersonType,
} from "@/services/dashboard";
import { import {
courseIdForCourseSlug, courseIdForCourseSlug,
fetchDashboardDueDates, fetchDashboardDueDates,
fetchDashboardPersons, fetchDashboardPersons,
fetchStatisticData, fetchStatisticData,
} from "@/services/dashboard"; } from "@/services/dashboard";
import {presignUpload, uploadFile} from "@/services/files"; import { presignUpload, uploadFile } from "@/services/files";
import {useCompletionStore} from "@/stores/completion"; import { useCompletionStore } from "@/stores/completion";
import {useCourseSessionsStore} from "@/stores/courseSessions"; import { useCourseSessionsStore } from "@/stores/courseSessions";
import {useDashboardStore} from "@/stores/dashboard"; import { useDashboardStore } from "@/stores/dashboard";
import {useUserStore} from "@/stores/user"; import { useUserStore } from "@/stores/user";
import type { import type {
ActionCompetence, ActionCompetence,
AgentParticipantRelation, AgentParticipantRelation,
@ -36,16 +44,15 @@ import type {
LearningUnitPerformanceCriteria, LearningUnitPerformanceCriteria,
PerformanceCriteria, PerformanceCriteria,
} from "@/types"; } from "@/types";
import {useQuery} from "@urql/vue"; import { useQuery } from "@urql/vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import {t} from "i18next"; import { t } from "i18next";
import orderBy from "lodash/orderBy"; import orderBy from "lodash/orderBy";
import log from "loglevel"; import log from "loglevel";
import type {ComputedRef, Ref} from "vue"; import type { ComputedRef, Ref } from "vue";
import {computed, onMounted, ref, watchEffect} from "vue"; import { computed, onMounted, ref, watchEffect } from "vue";
import {type RouteLocationRaw, useRouter} from "vue-router"; import { type RouteLocationRaw, useRouter } from "vue-router";
import {getCertificates} from "./services/competence"; import { mergeCompetenceCertificates } from "./pages/competence/utils";
import {mergeCompetenceCertificates} from "./pages/competence/utils";
export function useCurrentCourseSession() { export function useCurrentCourseSession() {
/** /**
@ -177,7 +184,7 @@ export function useCourseData(courseSlug: string) {
// urql.useQuery is not meant to be used programmatically, so we use graphqlClient.query instead // urql.useQuery is not meant to be used programmatically, so we use graphqlClient.query instead
const resultPromise = graphqlClient const resultPromise = graphqlClient
.query(COURSE_QUERY, {slug: `${courseSlug}`}) .query(COURSE_QUERY, { slug: `${courseSlug}` })
.toPromise(); .toPromise();
resultPromise.then((result) => { resultPromise.then((result) => {
@ -442,7 +449,7 @@ export function useFileUpload() {
const fileInfo = ref({} as { id: string; name: string; url: string }); const fileInfo = ref({} as { id: string; name: string; url: string });
async function upload(e: Event) { async function upload(e: Event) {
const {files} = e.target as HTMLInputElement; const { files } = e.target as HTMLInputElement;
if (!files?.length) return; if (!files?.length) return;
try { try {
@ -460,7 +467,7 @@ export function useFileUpload() {
} }
} }
return {upload, error, loading, fileInfo}; return { upload, error, loading, fileInfo };
} }
export function useMyLearningMentors() { export function useMyLearningMentors() {
@ -470,7 +477,7 @@ export function useMyLearningMentors() {
const fetchMentors = async () => { const fetchMentors = async () => {
loading.value = true; loading.value = true;
const {data} = await useCSRFFetch( const { data } = await useCSRFFetch(
`/api/mentor/${currentCourseSessionId}/mentors` `/api/mentor/${currentCourseSessionId}/mentors`
).json(); ).json();
learningMentors.value = data.value; learningMentors.value = data.value;
@ -622,7 +629,7 @@ export function useCourseCircleProgress(circles: Ref<CircleType[] | undefined>)
return circles.value?.length ?? 0; return circles.value?.length ?? 0;
}); });
return {inProgressCirclesCount, circlesCount}; return { inProgressCirclesCount, circlesCount };
} }
export function useCourseStatisticsv2(courseSlug: string) { export function useCourseStatisticsv2(courseSlug: string) {
@ -684,7 +691,7 @@ export function useCertificateQuery(
}); });
})(); })();
return {certificatesQuery}; return { certificatesQuery };
} }
export function useEvaluationWithFeedback() { export function useEvaluationWithFeedback() {
@ -695,7 +702,7 @@ export function useEvaluationWithFeedback() {
currentCourseSession.value.course.configuration.is_vv currentCourseSession.value.course.configuration.is_vv
); );
return {hasFeedback}; return { hasFeedback };
} }
export function useVVByLink() { export function useVVByLink() {
@ -705,11 +712,11 @@ export function useVVByLink() {
() => () =>
router.resolve({ router.resolve({
name: "accountConfirm", name: "accountConfirm",
params: {courseType: `vv-${userStore.language}`}, params: { courseType: `vv-${userStore.language}` },
}).href as RouteLocationRaw }).href as RouteLocationRaw
); );
return {href}; return { href };
} }
export function useAllCompetenceCertificates( export function useAllCompetenceCertificates(
@ -719,14 +726,17 @@ export function useAllCompetenceCertificates(
const courseSessionsStore = useCourseSessionsStore(); const courseSessionsStore = useCourseSessionsStore();
const certificateQueries = courseSessionsStore.allCourseSessions.map( const certificateQueries = courseSessionsStore.allCourseSessions.map(
(courseSession) => { (courseSession) => {
return useCertificateQuery([userId], courseSlug, courseSession).certificatesQuery; return useCertificateQuery([userId ?? ""], courseSlug, courseSession)
.certificatesQuery;
} }
); );
const competenceCertificatesPerCs = computed(() => const competenceCertificatesPerCs = computed(() =>
certificateQueries.map((query) => { certificateQueries.map((query) => {
return getCertificates(query.data.value, userId ?? null) return (
?.competence_certificates as unknown as CompetenceCertificate[]; (query.data.value?.competence_certificate_list
?.competence_certificates as unknown as CompetenceCertificate[]) ?? []
);
}) })
); );
const isLoaded = computed(() => !certificateQueries.some((q) => q.fetching.value)); const isLoaded = computed(() => !certificateQueries.some((q) => q.fetching.value));

View File

@ -19,7 +19,7 @@ const documents = {
"\n fragment CoursePageFields on CoursePageInterface {\n title\n id\n slug\n content_type\n frontend_url\n }\n": types.CoursePageFieldsFragmentDoc, "\n fragment CoursePageFields on CoursePageInterface {\n title\n id\n slug\n content_type\n frontend_url\n }\n": types.CoursePageFieldsFragmentDoc,
"\n query attendanceCheckQuery($courseSessionId: ID!) {\n course_session_attendance_course(id: $courseSessionId) {\n id\n attendance_user_list {\n user_id\n status\n }\n }\n }\n": types.AttendanceCheckQueryDocument, "\n query attendanceCheckQuery($courseSessionId: ID!) {\n course_session_attendance_course(id: $courseSessionId) {\n id\n attendance_user_list {\n user_id\n status\n }\n }\n }\n": types.AttendanceCheckQueryDocument,
"\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument, "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n solution_sample {\n id\n url\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n first_name\n last_name\n }\n assignment_user {\n avatar_url\n first_name\n last_name\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_points_deducted\n evaluation_points_deducted_reason\n evaluation_points_final\n\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument,
"\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument, "\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!, $userIds: [UUID!]) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument,
"\n query competenceCertificateForUserQuery(\n $courseSlug: String!\n $courseSessionId: ID!\n $userIds: [UUID!]!\n ) {\n competence_certificate_list(course_slug: $courseSlug, user_ids: $userIds) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_final\n evaluation_points_deducted\n evaluation_max_points\n evaluation_passed\n evaluation_percent\n assignment_user {\n id\n }\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateForUserQueryDocument, "\n query competenceCertificateForUserQuery(\n $courseSlug: String!\n $courseSessionId: ID!\n $userIds: [UUID!]!\n ) {\n competence_certificate_list(course_slug: $courseSlug, user_ids: $userIds) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_final\n evaluation_points_deducted\n evaluation_max_points\n evaluation_passed\n evaluation_percent\n assignment_user {\n id\n }\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateForUserQueryDocument,
"\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n }\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n optional_attendance\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument, "\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n }\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n optional_attendance\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument,
"\n query courseQuery($slug: String!, $user: String) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n profiles\n course_session_users(id: $user) {\n id\n __typename\n chosen_profile\n course_session {\n id\n }\n }\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n is_uk\n is_vv\n }\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n profiles\n is_base_circle\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n assignment_type\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n assignment_type\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n": types.CourseQueryDocument, "\n query courseQuery($slug: String!, $user: String) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n profiles\n course_session_users(id: $user) {\n id\n __typename\n chosen_profile\n course_session {\n id\n }\n }\n configuration {\n id\n enable_circle_documents\n enable_learning_mentor\n enable_competence_certificates\n is_uk\n is_vv\n }\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n profiles\n is_base_circle\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n assignment_type\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n assignment_type\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n": types.CourseQueryDocument,
@ -72,7 +72,7 @@ export function graphql(source: "\n query assignmentCompletionQuery(\n $assi
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"]; export function graphql(source: "\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!, $userIds: [UUID!]) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!, $userIds: [UUID!]) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n competence_certificate_weight\n completions(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_points_deducted\n evaluation_points_final\n evaluation_max_points\n evaluation_passed\n course_session {\n id\n title\n }\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import {graphql} from "@/gql"; import { graphql } from "@/gql";
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const CoursePageFragment = graphql(` const CoursePageFragment = graphql(`
@ -90,7 +90,11 @@ export const ASSIGNMENT_COMPLETION_QUERY = graphql(`
`); `);
export const COMPETENCE_NAVI_CERTIFICATE_QUERY = graphql(` export const COMPETENCE_NAVI_CERTIFICATE_QUERY = graphql(`
query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) { query competenceCertificateQuery(
$courseSlug: String!
$courseSessionId: ID!
$userIds: [UUID!]
) {
competence_certificate_list(course_slug: $courseSlug) { competence_certificate_list(course_slug: $courseSlug) {
...CoursePageFields ...CoursePageFields
competence_certificates { competence_certificates {

View File

@ -28,8 +28,8 @@ const getIconName = () => {
}; };
const openInCircle = (assignment: CompetenceCertificateAssignment) => { const openInCircle = (assignment: CompetenceCertificateAssignment) => {
if (assignment.completion?.course_session !== currentCourseSession.value) { if (assignment.completions[0]?.course_session !== currentCourseSession.value) {
switchCourseSessionById(assignment.completion!.course_session.id); switchCourseSessionById(assignment.completions[0]!.course_session.id);
} }
router.push(assignment.frontend_url); router.push(assignment.frontend_url);
}; };
@ -48,7 +48,7 @@ const openInCircle = (assignment: CompetenceCertificateAssignment) => {
v-if="showCourseSession" v-if="showCourseSession"
:data-cy="`assignment-${assignment.slug}-course-session`" :data-cy="`assignment-${assignment.slug}-course-session`"
> >
{{ assignment?.completion?.course_session.title }} {{ assignment?.completions[0]?.course_session.title }}
</p> </p>
<p class="text-gray-800"> <p class="text-gray-800">
<button <button

View File

@ -57,7 +57,8 @@ const showCourseSession = computed(() => {
const currentCourseSession = useCurrentCourseSession(); const currentCourseSession = useCurrentCourseSession();
return props.competenceCertificate.assignments.some((assignment) => { return props.competenceCertificate.assignments.some((assignment) => {
return ( return (
assignment.completion?.course_session.title !== currentCourseSession.value.title assignment.completions[0]?.course_session.title !==
currentCourseSession.value.title
); );
}); });
}); });

View File

@ -1,9 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import log from "loglevel"; import log from "loglevel";
import {computed} from "vue"; import { computed } from "vue";
import type {CompetenceCertificate} from "@/types"; import { useAllCompetenceCertificates } from "@/composables";
import {useAllCompetenceCertificates} from "@/composables"; import { getPreviousRoute } from "@/router/history";
import {getPreviousRoute} from "@/router/history";
import CompetenceCertificateComponent from "@/pages/competence/CompetenceCertificateComponent.vue"; import CompetenceCertificateComponent from "@/pages/competence/CompetenceCertificateComponent.vue";
const props = defineProps<{ const props = defineProps<{
@ -14,15 +13,7 @@ const props = defineProps<{
log.debug("CompetenceCertificateDetailPage setup", props); log.debug("CompetenceCertificateDetailPage setup", props);
const { competenceCertificates } = useAllCompetenceCertificates(
const competenceCertificates = computed(() => {
return (
(certificatesQuery.data.value?.competence_certificate_list
?.competence_certificates as unknown as CompetenceCertificate[]) ?? []
);
});
const {competenceCertificates} = useAllCompetenceCertificates(
props.userId, props.userId,
props.courseSlug props.courseSlug
); );

View File

@ -1,10 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import log from "loglevel"; import log from "loglevel";
import {computed, onMounted} from "vue"; import { computed, onMounted } from "vue";
import {useAllCompetenceCertificates} from "@/composables"; import { useAllCompetenceCertificates } from "@/composables";
import CompetenceCertificateComponent from "@/pages/competence/CompetenceCertificateComponent.vue"; import CompetenceCertificateComponent from "@/pages/competence/CompetenceCertificateComponent.vue";
import {assignmentsUserPoints, calcCompetencesTotalGrade,} from "@/pages/competence/utils"; import {
import {useRoute} from "vue-router"; assignmentsUserPoints,
calcCompetencesTotalGrade,
} from "@/pages/competence/utils";
import { useRoute } from "vue-router";
const props = defineProps<{ const props = defineProps<{
courseSlug: string; courseSlug: string;
@ -15,8 +18,7 @@ log.debug("CompetenceCertificateListPage setup", props);
const route = useRoute(); const route = useRoute();
const { competenceCertificates } = useAllCompetenceCertificates(
const {competenceCertificates} = useAllCompetenceCertificates(
props.userId, props.userId,
props.courseSlug props.courseSlug
); );

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import log from "loglevel"; import log from "loglevel";
import {computed} from "vue"; import { computed } from "vue";
import {useAllCompetenceCertificates, useCurrentCourseSession} from "@/composables"; import { useAllCompetenceCertificates, useCurrentCourseSession } from "@/composables";
import { import {
assignmentsUserPoints, assignmentsUserPoints,
calcCompetenceCertificateGrade, calcCompetenceCertificateGrade,
@ -9,10 +9,9 @@ import {
competenceCertificateProgressStatusCount, competenceCertificateProgressStatusCount,
} from "@/pages/competence/utils"; } from "@/pages/competence/utils";
import ItProgress from "@/components/ui/ItProgress.vue"; import ItProgress from "@/components/ui/ItProgress.vue";
import SelfEvaluationAndFeedbackOverview import SelfEvaluationAndFeedbackOverview from "@/components/selfEvaluationFeedback/SelfEvaluationAndFeedbackOverview.vue";
from "@/components/selfEvaluationFeedback/SelfEvaluationAndFeedbackOverview.vue"; import { useUserStore } from "@/stores/user";
import {useUserStore} from "@/stores/user"; import { useRouter } from "vue-router";
import {useRouter} from "vue-router";
const props = defineProps<{ const props = defineProps<{
courseSlug: string; courseSlug: string;
@ -22,16 +21,7 @@ log.debug("CompetenceIndexPage setup", props);
const user = useUserStore(); const user = useUserStore();
const certificatesQuery = useQuery({ const { competenceCertificates, isLoaded } = useAllCompetenceCertificates(
query: COMPETENCE_NAVI_CERTIFICATE_QUERY,
variables: {
courseSlug: props.courseSlug,
courseSessionId: courseSession.value.id,
userIds: user.id,
},
});
const {competenceCertificates, isLoaded} = useAllCompetenceCertificates(
user.id, user.id,
props.courseSlug props.courseSlug
); );

View File

@ -120,10 +120,10 @@ export function mergeCompetenceCertificates(
if (!existingAssignment) { if (!existingAssignment) {
mergedCertificate.assignments.push(assignment); mergedCertificate.assignments.push(assignment);
} else if ( } else if (
assignment.completion != null && assignment.completions[0] != null &&
(existingAssignment.completion == null || (existingAssignment.completions[0] == null ||
dayjs(existingAssignment.completion.evaluation_submitted_at).isBefore( dayjs(existingAssignment.completions[0].evaluation_submitted_at).isBefore(
assignment.completion.evaluation_submitted_at assignment.completions[0].evaluation_submitted_at
)) ))
) { ) {
mergedCertificate.assignments.splice( mergedCertificate.assignments.splice(