import * as log from 'loglevel'; import {defineStore} from 'pinia' import type {LearningPath, Topic} from '@/types' import {itGet} from '@/fetchHelpers'; import {Circle} from '@/services/circle'; export type LearningPathStoreState = { learningPath: LearningPath | undefined; } export const useLearningPathStore = defineStore({ id: 'learningPath', state: () => { return { learningPath: undefined, } as LearningPathStoreState; }, getters: { }, actions: { async loadLearningPath(slug: string, reload = false) { if (this.learningPath && !reload) { return this.learningPath; } try { const learningPathData = await itGet(`/learnpath/api/page/${slug}/`); const completionData = await itGet(`/api/completion/learning_path/${learningPathData.translation_key}/`); this.learningPath = learningPathData; if (this.learningPath) { this.learningPath.topics = []; this.learningPath.circles = []; let topic: Topic | undefined; this.learningPath.children.forEach((page) => { if (page.type === 'learnpath.Topic') { if (topic) { this.learningPath.topics.push(topic); } topic = Object.assign(page, {circles: []}); } if (page.type === 'learnpath.Circle') { const circle = Circle.fromJson(page); circle.parseCompletionData(completionData); if (topic) { topic.circles.push(circle); } this.learningPath.circles.push(circle); } }) this.learningPath.topics.push(topic); } return this.learningPath; } catch (error) { log.error(error); return error } }, } })