64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
import { itGetCached } from "@/fetchHelpers";
|
|
import type { CourseSessionUser, ExpertSessionUser } from "@/types";
|
|
import log from "loglevel";
|
|
|
|
import { useUserStore } from "@/stores/user";
|
|
import { defineStore } from "pinia";
|
|
|
|
export type CockpitStoreState = {
|
|
courseSessionUsers: CourseSessionUser[] | undefined;
|
|
cockpitSessionUser: ExpertSessionUser | undefined;
|
|
selectedCircles: string[];
|
|
};
|
|
|
|
export const useCockpitStore = defineStore({
|
|
id: "cockpit",
|
|
state: () => {
|
|
return {
|
|
courseSessionUsers: undefined,
|
|
cockpitSessionUser: undefined,
|
|
selectedCircles: [],
|
|
} as CockpitStoreState;
|
|
},
|
|
actions: {
|
|
async loadCourseSessionUsers(courseSessionId: number, reload = false) {
|
|
log.debug("loadCockpitData called");
|
|
const users = (await itGetCached(
|
|
`/api/course/sessions/${courseSessionId}/users/`,
|
|
{
|
|
reload: reload,
|
|
}
|
|
)) as CourseSessionUser[];
|
|
|
|
this.courseSessionUsers = users.filter((user) => user.role === "MEMBER");
|
|
|
|
const userStore = useUserStore();
|
|
const currentUser = users.find((user) => user.user_id === userStore.id);
|
|
|
|
if (currentUser && currentUser.role === "EXPERT") {
|
|
this.cockpitSessionUser = currentUser as ExpertSessionUser;
|
|
}
|
|
|
|
if (this.cockpitSessionUser && this.cockpitSessionUser.circles?.length > 0) {
|
|
this.selectedCircles = [this.cockpitSessionUser.circles[0].translation_key];
|
|
}
|
|
|
|
if (!this.courseSessionUsers) {
|
|
throw `No courseSessionUsers data found for user`;
|
|
}
|
|
return this.courseSessionUsers;
|
|
},
|
|
toggleCircleSelection(translationKey: string) {
|
|
if (this.selectedCircles.indexOf(translationKey) < 0) {
|
|
this.selectedCircles.push(translationKey);
|
|
} else {
|
|
if (this.selectedCircles.length === 1) {
|
|
return;
|
|
}
|
|
const index = this.selectedCircles.indexOf(translationKey);
|
|
this.selectedCircles.splice(index, 1);
|
|
}
|
|
},
|
|
},
|
|
});
|