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

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
const CoursePageFragment = graphql(`
@ -90,7 +90,11 @@ export const ASSIGNMENT_COMPLETION_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) {
...CoursePageFields
competence_certificates {

View File

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

View File

@ -57,7 +57,8 @@ const showCourseSession = computed(() => {
const currentCourseSession = useCurrentCourseSession();
return props.competenceCertificate.assignments.some((assignment) => {
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">
import log from "loglevel";
import {computed} from "vue";
import type {CompetenceCertificate} from "@/types";
import {useAllCompetenceCertificates} from "@/composables";
import {getPreviousRoute} from "@/router/history";
import { computed } from "vue";
import { useAllCompetenceCertificates } from "@/composables";
import { getPreviousRoute } from "@/router/history";
import CompetenceCertificateComponent from "@/pages/competence/CompetenceCertificateComponent.vue";
const props = defineProps<{
@ -14,15 +13,7 @@ const props = defineProps<{
log.debug("CompetenceCertificateDetailPage setup", props);
const competenceCertificates = computed(() => {
return (
(certificatesQuery.data.value?.competence_certificate_list
?.competence_certificates as unknown as CompetenceCertificate[]) ?? []
);
});
const {competenceCertificates} = useAllCompetenceCertificates(
const { competenceCertificates } = useAllCompetenceCertificates(
props.userId,
props.courseSlug
);

View File

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

View File

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

View File

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