66 lines
1.9 KiB
TypeScript
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 [];
|
|
},
|
|
},
|
|
});
|