From 44e618bf9d6517d208459946ef4d18097623d511 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Sun, 27 Oct 2024 20:24:35 +0100 Subject: [PATCH] Move SubNavigation to its own component --- client/src/components/header/SubNavItem.vue | 9 +- .../src/components/header/SubNavigation.vue | 95 +++++++++++++++++++ .../pages/competence/CompetenceParentPage.vue | 81 +--------------- client/src/utils/route.ts | 2 +- 4 files changed, 108 insertions(+), 79 deletions(-) create mode 100644 client/src/components/header/SubNavigation.vue diff --git a/client/src/components/header/SubNavItem.vue b/client/src/components/header/SubNavItem.vue index 69c4f074..736e93ab 100644 --- a/client/src/components/header/SubNavItem.vue +++ b/client/src/components/header/SubNavItem.vue @@ -28,7 +28,14 @@ const isExternalLink = computed(() => { - + + +import SubNavItem from "@/components/header/SubNavItem.vue"; +import { Listbox, ListboxOption, ListboxOptions } from "@headlessui/vue"; +import { computed, ref } from "vue"; +import { useRouter } from "vue-router"; +const router = useRouter(); + +export interface EntryRoute { + name: string; +} + +export type EntryOrExternalRoute = EntryRoute | string; + +export interface SubNavEntry { + id: number; + name: string; + route: EntryOrExternalRoute; +} + +export interface Props { + items: SubNavEntry[]; +} +const props = defineProps(); + +const isCurrentRoute = (route: { name: string } | string) => { + return typeof route !== "string" && route?.name === router.currentRoute.value.name; +}; +const currentRouteName = computed(() => { + return props.items.find((item) => isCurrentRoute(item.route))?.name || ""; +}); +const open = ref(false); +const currentRoute = ref(props.items.find((item) => isCurrentRoute(item.route))); +const selectRoute = (current: SubNavEntry) => { + // we use this to mimic VueRouter's active flag + open.value = false; + currentRoute.value = current; +}; + + diff --git a/client/src/pages/competence/CompetenceParentPage.vue b/client/src/pages/competence/CompetenceParentPage.vue index 665507ba..170f2a85 100644 --- a/client/src/pages/competence/CompetenceParentPage.vue +++ b/client/src/pages/competence/CompetenceParentPage.vue @@ -1,5 +1,5 @@