45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { itGet, itPost } from "@/fetchHelpers";
|
|
import type { CourseCompletion, CourseWagtailPage } from "@/types";
|
|
import { defineStore } from "pinia";
|
|
|
|
export type CompletionStoreState = {
|
|
completionData: CourseCompletion[] | undefined;
|
|
};
|
|
|
|
export const useCompletionStore = defineStore({
|
|
id: "completion",
|
|
state: () => {
|
|
return {
|
|
completionData: undefined,
|
|
} as CompletionStoreState;
|
|
},
|
|
getters: {},
|
|
actions: {
|
|
async loadCompletionData(courseId: number, reload = false) {
|
|
if (this.completionData && !reload) {
|
|
return this.completionData;
|
|
}
|
|
const completionData = await itGet(`/api/course/completion/${courseId}/`);
|
|
|
|
if (!completionData) {
|
|
throw `No completionData found with: ${courseId}`;
|
|
}
|
|
|
|
this.completionData = completionData;
|
|
return this.completionData || [];
|
|
},
|
|
async markPage(page: CourseWagtailPage) {
|
|
const completionData = await itPost("/api/course/completion/mark/", {
|
|
page_key: page.translation_key,
|
|
completion_status: page.completion_status,
|
|
});
|
|
|
|
if (completionData) {
|
|
this.completionData = completionData;
|
|
}
|
|
|
|
return this.completionData || [];
|
|
},
|
|
},
|
|
});
|