vbv/client/src/stores/completion.ts

66 lines
1.9 KiB
TypeScript

import { bustItGetCache, itGetCached, itPost } from "@/fetchHelpers";
import { useCourseSessionsStore } from "@/stores/courseSessions";
import { useUserStore } from "@/stores/user";
import type { BaseCourseWagtailPage, CourseCompletion } from "@/types";
import { defineStore } from "pinia";
export const useCompletionStore = defineStore({
id: "completion",
state: () => {
return {};
},
getters: {},
actions: {
async loadCourseSessionCompletionData(
courseSessionId: number,
userId: string,
reload = false
) {
const userCompletionData = (await itGetCached(
`/api/course/completion/${courseSessionId}/${userId}/`,
{
reload: reload,
}
)) as CourseCompletion[];
if (userCompletionData === undefined) {
throw `No completionData found with: ${courseSessionId}, ${userId}`;
}
return userCompletionData || [];
},
async markPage(
page: BaseCourseWagtailPage,
userId: string | undefined = undefined,
courseSessionId: number | undefined = undefined
) {
if (!courseSessionId) {
const courseSessionsStore = useCourseSessionsStore();
const courseSession = courseSessionsStore.currentCourseSession;
if (courseSession) {
courseSessionId = courseSession.id;
}
}
if (courseSessionId) {
const completionData = await itPost("/api/course/completion/mark/", {
page_id: page.id,
completion_status: page.completion_status,
course_session_id: courseSessionId,
});
if (completionData && completionData.length > 0) {
if (!userId) {
const userStore = useUserStore();
userId = userStore.id;
}
bustItGetCache(`/api/course/completion/${courseSessionId}/${userId}/`);
}
return completionData as CourseCompletion[];
}
return [];
},
},
});