import { useCourseData } from "@/composables"; import { useUserStore } from "@/stores/user"; import type { CircleLight, CourseSessionUser, ExpertSessionUser } from "@/types"; import log from "loglevel"; import { defineStore } from "pinia"; type CircleExpertCockpit = CircleLight & { name: string; }; export type ExpertCockpitStoreState = { courseSessionMembers: CourseSessionUser[] | undefined; circles: CircleExpertCockpit[] | undefined; currentCircle: CircleExpertCockpit | undefined; }; export const useExpertCockpitStore = defineStore({ id: "expertCockpit", state: () => { return { courseSessionMembers: undefined, circles: [], currentCircle: undefined, } as ExpertCockpitStoreState; }, actions: { async loadCircles( courseSlug: string, currentCourseSessionUser: CourseSessionUser | undefined ) { log.debug("loadCircles called", courseSlug); this.circles = await courseCircles(courseSlug, currentCourseSessionUser); if (this.circles?.length) { await this.setCurrentCourseCircle(this.circles[0].slug); } }, async setCurrentCourseCircle(circleSlug: string) { this.currentCircle = this.circles?.find((c) => c.slug === circleSlug); }, async setCurrentCourseCircleFromEvent(event: CircleLight) { await this.setCurrentCourseCircle(event.slug); }, }, }); async function courseCircles( courseSlug: string, currentCourseSessionUser: CourseSessionUser | undefined ) { if (currentCourseSessionUser && currentCourseSessionUser.role === "EXPERT") { const expert = currentCourseSessionUser as ExpertSessionUser; return expert.circles.map((c) => { return { ...c, name: c.title }; }); } const userStore = useUserStore(); // Return all circles from learning path for admin users if (userStore.is_superuser) { const lpQueryResult = useCourseData(courseSlug); await lpQueryResult.resultPromise; return (lpQueryResult.circles.value ?? []).map((c) => { return { id: c.id, slug: c.slug, title: c.title, name: c.title, } as const; }); } return []; }