diff --git a/client/src/composables.ts b/client/src/composables.ts index 54c968bc..32102146 100644 --- a/client/src/composables.ts +++ b/client/src/composables.ts @@ -47,6 +47,7 @@ import type { import { useQuery } from "@urql/vue"; import dayjs from "dayjs"; import { t } from "i18next"; +import { cloneDeep } from "lodash"; import orderBy from "lodash/orderBy"; import log from "loglevel"; import type { ComputedRef, Ref } from "vue"; @@ -192,10 +193,12 @@ export function useCourseData(courseSlug: string) { log.error(result.error); } - course.value = result.data?.course as unknown as Course; - actionCompetences.value = result.data?.course - ?.action_competences as ActionCompetence[]; - learningPath.value = result.data?.course?.learning_path as LearningPathType; + // VBV-757: clone data from `COURSE_QUERY` here, so that each user in + // `useCourseDataWithCompletion` has its own completion instance in the course + const courseData = cloneDeep(result.data?.course) as unknown as Course; + course.value = courseData; + actionCompetences.value = courseData.action_competences as ActionCompetence[]; + learningPath.value = courseData.learning_path as LearningPathType; // attach circle information to learning contents if (learningPath.value) { diff --git a/client/src/types.ts b/client/src/types.ts index 93ed9552..a24f6ecb 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -204,6 +204,8 @@ export interface Course { slug: string; profiles: string[]; configuration: CourseConfiguration; + learning_path?: LearningPathType; + action_competences?: ActionCompetence[]; } export interface CourseCategory {