vbv/client/src/stores/completion.ts

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 || [];
},
},
});