chore: cockpit for mentor

This commit is contained in:
Livio Bieri 2023-12-13 18:43:17 +01:00
parent 14e8d5da49
commit e61dce95f6
3 changed files with 41 additions and 6 deletions

View File

@ -70,12 +70,31 @@ onMounted(() => {
log.debug("MainNavigationBar mounted");
});
const hasMediaLibrary = computed(() => {
const hasMediaLibraryMenu = computed(() => {
if (useCockpitStore().hasMentorCockpitType) {
return false;
}
return inCourse() && Boolean(courseSessionsStore.currentCourseSession);
});
const hasCockpitMenu = computed(() => {
return courseSessionsStore.currentCourseSessionHasCockpit;
});
const hasPreviewMenu = computed(() => {
return useCockpitStore().hasExpertCockpitType;
});
const hasAppointmentsMenu = computed(() => {
if (useCockpitStore().hasMentorCockpitType) {
return false;
}
return userStore.loggedIn;
});
const hasNotificationsMenu = computed(() => {
return userStore.loggedIn;
});
</script>
<template>
@ -86,7 +105,7 @@ const hasMediaLibrary = computed(() => {
v-if="userStore.loggedIn"
:show="state.showMobileNavigationMenu"
:course-session="courseSessionsStore.currentCourseSession"
:has-media-library="hasMediaLibrary"
:has-media-library="hasMediaLibraryMenu"
:media-url="
getMediaCenterUrl(courseSessionsStore.currentCourseSession?.course?.slug)
"
@ -146,6 +165,7 @@ const hasMediaLibrary = computed(() => {
<div class="hidden space-x-8 lg:flex">
<template v-if="courseSessionsStore.currentCourseSessionHasCockpit">
<router-link
v-if="hasCockpitMenu"
data-cy="navigation-cockpit-link"
:to="
getCockpitUrl(
@ -159,6 +179,7 @@ const hasMediaLibrary = computed(() => {
</router-link>
<router-link
v-if="hasPreviewMenu"
data-cy="navigation-preview-link"
:to="
getLearningPathUrl(
@ -220,7 +241,7 @@ const hasMediaLibrary = computed(() => {
<div class="flex items-stretch justify-start space-x-8">
<router-link
v-if="hasMediaLibrary"
v-if="hasMediaLibraryMenu"
:to="
getMediaCenterUrl(
courseSessionsStore.currentCourseSession?.course.slug
@ -234,7 +255,7 @@ const hasMediaLibrary = computed(() => {
</router-link>
<router-link
v-if="userStore.loggedIn"
v-if="hasAppointmentsMenu"
:to="appointmentsUrl"
data-cy="all-duedates-link"
class="nav-item"
@ -244,7 +265,7 @@ const hasMediaLibrary = computed(() => {
</router-link>
<!-- Notification Bell & Menu -->
<div v-if="userStore.loggedIn" class="nav-item leading-none">
<div v-if="hasNotificationsMenu" class="nav-item leading-none">
<NotificationPopover>
<template #toggleButtonContent>
<div class="relative h-8 w-8">

View File

@ -1,4 +1,5 @@
import { itGetCached } from "@/fetchHelpers";
import { useCockpitStore } from "@/stores/cockpit";
import type { CourseSession, DueDate } from "@/types";
import eventBus from "@/utils/eventBus";
import { useRouteLookups } from "@/utils/route";
@ -149,6 +150,9 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
function hasCockpit(courseSession: CourseSession) {
const userStore = useUserStore();
return (
useCockpitStore().hasMentorCockpitType ||
useCockpitStore().hasExpertCockpitType ||
// for legacy reasons: don't forget course session supervisors!
userStore.course_session_experts.includes(courseSession.id) ||
userStore.is_superuser
);

View File

@ -24,6 +24,7 @@ from vbv_lernwelt.iam.permissions import (
is_circle_expert,
is_course_session_expert,
)
from vbv_lernwelt.learning_mentor.models import LearningMentor
logger = structlog.get_logger(__name__)
@ -142,8 +143,17 @@ def get_course_sessions(request):
).values_list("course_session", flat=True)
).prefetch_related("course")
# enrich with mentor course sessions
mentor_course_sessions = CourseSession.objects.filter(
course__in=LearningMentor.objects.filter(mentor=request.user).values_list(
"course", flat=True
)
).prefetch_related("course")
all_to_serialize = (
regular_course_sessions | supervisor_course_sessions
regular_course_sessions
| supervisor_course_sessions
| mentor_course_sessions
).distinct()
return Response(