diff --git a/apps/app/src/components-v2/layout/AppTopbar.vue b/apps/app/src/components-v2/layout/AppTopbar.vue index dc3a501a..4da4dc39 100644 --- a/apps/app/src/components-v2/layout/AppTopbar.vue +++ b/apps/app/src/components-v2/layout/AppTopbar.vue @@ -37,6 +37,7 @@ import Menu from 'primevue/menu' import OverlayBadge from 'primevue/overlaybadge' import Popover from 'primevue/popover' import { computed, ref } from 'vue' +import { useRouter } from 'vue-router' import type { MenuItem } from 'primevue/menuitem' import Icon from '@/components/Icon.vue' import { useBreadcrumb } from '@/composables/useBreadcrumb' @@ -45,11 +46,12 @@ import { useShellUiStore } from '@/stores/useShellUiStore' import { computeOrgGradient } from '@/utils/v2/gradient' // --------------------------------------------------------------------------- -// Stores +// Stores / router // --------------------------------------------------------------------------- const shell = useShellUiStore() const authStore = useAuthStore() +const router = useRouter() // --------------------------------------------------------------------------- // Breadcrumb — route-driven via useBreadcrumb() @@ -59,14 +61,27 @@ const { items: breadcrumbItems } = useBreadcrumb() /** * Map BreadcrumbItem[] → PrimeVue MenuItem[]. - * Non-last items get a `route` for router-link rendering. - * Last item (current) has no route/command — plain label only. + * + * The installed PrimeVue Breadcrumb (BreadcrumbItem.vue) renders + * `` and calls `item.command` on click. + * It does NOT honour a `route` key — router-link is never invoked. + * + * Fix: non-last items navigate via `command: () => router.push(item.to)` (client-side, + * no full reload, no href="#"). Last/current item has no `to` from useBreadcrumb() + * → no command → non-interactive. */ const breadcrumbModel = computed(() => - breadcrumbItems.value.map(item => ({ - label: item.label, - ...(item.to !== undefined ? { route: item.to } : {}), - })), + breadcrumbItems.value.map(item => { + const base: MenuItem = { label: item.label } + + if (item.to !== undefined) { + base.command = () => { + router.push(item.to!) + } + } + + return base + }), ) // --------------------------------------------------------------------------- @@ -214,7 +229,9 @@ const userMenuItems = computed(() => [ { label: 'Sign out', icon: 'tabler-logout', - command: () => authStore.logout(), + command: () => { + authStore.logout() + }, }, ], }, @@ -235,6 +252,7 @@ const userMenuItems = computed(() => [ .icon-btn: 38x38, rounded, transparent bg, fg-muted color, hover bg-hover -->