diff --git a/client/src/App.vue b/client/src/App.vue index 46133b7b..7d453d8b 100644 --- a/client/src/App.vue +++ b/client/src/App.vue @@ -13,6 +13,7 @@ - - - - diff --git a/client/src/pages/mediaLibrary/MLMediaListPage.vue b/client/src/pages/mediaLibrary/MLMediaListPage.vue new file mode 100644 index 00000000..980b8502 --- /dev/null +++ b/client/src/pages/mediaLibrary/MLMediaListPage.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/client/src/router/index.ts b/client/src/router/index.ts index 1c63b7bf..2f23c424 100644 --- a/client/src/router/index.ts +++ b/client/src/router/index.ts @@ -1,7 +1,7 @@ -import { redirectToLoginIfRequired, updateLoggedIn } from "@/router/guards"; -import { useAppStore } from "@/stores/app"; import CockpitView from "@/pages/CockpitView.vue"; import LoginView from "@/pages/LoginView.vue"; +import { redirectToLoginIfRequired, updateLoggedIn } from "@/router/guards"; +import { useAppStore } from "@/stores/app"; import { createRouter, createWebHistory } from "vue-router"; const router = createRouter({ @@ -35,7 +35,8 @@ const router = createRouter({ }, { path: "category/:mediaCategorySlug/media", - component: () => import("@/pages/mediaLibrary/MLMediaList.vue"), + props: true, + component: () => import("@/pages/mediaLibrary/MLMediaListPage.vue"), }, { path: "category/:mediaCategorySlug", @@ -44,8 +45,7 @@ const router = createRouter({ }, { path: "category", - component: () => - import("@/pages/mediaLibrary/MLCategoryIndexPage.vue"), + component: () => import("@/pages/mediaLibrary/MLCategoryIndexPage.vue"), }, ], }, diff --git a/client/src/types.ts b/client/src/types.ts index 45add270..8b049f0d 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -222,28 +222,49 @@ export interface CourseCategory { general: boolean; } -export interface MediaDocument { - type: "Documents"; - value: number; +export type MediaLibraryContentBlockValue = { + title: string; + description: string; + icon_url: string; + link_display_text: string; + url: string; + open_window: boolean; +}; + +export interface LearnMediaBlock { + type: "learn_media"; id: string; + value: MediaLibraryContentBlockValue; } -export interface MediaLink { - type: "Links"; +export interface ExternalLinkBlock { + type: "external_link"; id: string; - value: { - title: string; - description: string; - link_display_text: string; - url: string; - }; + value: MediaLibraryContentBlockValue; +} + +export interface InternalLinkBlock { + type: "internal_link"; + id: string; + value: MediaLibraryContentBlockValue; +} + +export interface RelativeLinkBlock { + type: "relative_link"; + id: string; + value: MediaLibraryContentBlockValue; } export interface MediaContentCollection { type: "content_collection"; value: { title: string; - contents: (MediaDocument | MediaLink)[]; + contents: ( + | LearnMediaBlock + | ExternalLinkBlock + | InternalLinkBlock + | RelativeLinkBlock + )[]; }; } diff --git a/server/vbv_lernwelt/course/views.py b/server/vbv_lernwelt/course/views.py index cebb2961..0aab4be3 100644 --- a/server/vbv_lernwelt/course/views.py +++ b/server/vbv_lernwelt/course/views.py @@ -11,8 +11,6 @@ logger = structlog.get_logger(__name__) @api_view(["GET"]) -# TODO readd -# @cache_page(60 * 60 * 8, cache="api_page_cache") def page_api_view(request, slug): try: page = Page.objects.get(slug=slug, locale__language_code="de-CH")