diff --git a/client/src/composables.ts b/client/src/composables.ts
index 0b898845..15ecb645 100644
--- a/client/src/composables.ts
+++ b/client/src/composables.ts
@@ -51,6 +51,7 @@ import orderBy from "lodash/orderBy";
import log from "loglevel";
import type { ComputedRef, Ref } from "vue";
import { computed, onMounted, ref, watchEffect } from "vue";
+import { useRouter, type RouteLocationRaw } from "vue-router";
export function useCurrentCourseSession() {
/**
@@ -728,3 +729,17 @@ export function useEvaluationWithFeedback() {
return { hasFeedback };
}
+
+export function useVVByLink() {
+ const router = useRouter();
+ const userStore = useUserStore();
+ const href = computed(
+ () =>
+ router.resolve({
+ name: "accountConfirm",
+ params: { courseType: `vv-${userStore.language}` },
+ }).href as RouteLocationRaw
+ );
+
+ return { href };
+}
diff --git a/client/src/utils/utils.ts b/client/src/utils/utils.ts
index 2892cf6d..5080fd4b 100644
--- a/client/src/utils/utils.ts
+++ b/client/src/utils/utils.ts
@@ -1,4 +1,4 @@
-import type { AssignmentType } from "@/types";
+import type { AssignmentType, CourseSession } from "@/types";
import { useTranslation } from "i18next-vue";
export function assertUnreachable(msg: string): never {
@@ -66,3 +66,12 @@ export function getAssignmentTypeIcon(assignmentType: AssignmentType): string {
return "it-icon-lc-assignment";
}
}
+
+export function isVVLearningMentor(courseSession: CourseSession | undefined): boolean {
+ return (
+ (courseSession?.actions.includes("is_learning_mentor") &&
+ !courseSession?.actions.includes("learning-mentor::edit-mentors") &&
+ courseSession?.course.configuration.is_vv) ??
+ false
+ );
+}
diff --git a/server/vbv_lernwelt/static/icons/icon-media-library.svg b/server/vbv_lernwelt/static/icons/icon-media-library.svg
index 685a3af1..4cc4f13a 100755
--- a/server/vbv_lernwelt/static/icons/icon-media-library.svg
+++ b/server/vbv_lernwelt/static/icons/icon-media-library.svg
@@ -1 +1 @@
-
\ No newline at end of file
+