77 lines
2.1 KiB
TypeScript
77 lines
2.1 KiB
TypeScript
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 [];
|
|
}
|