diff --git a/src/components/models/navigation/items/NavigationMenuItems.vue b/src/components/models/navigation/items/NavigationMenuItems.vue index f5db7bff..abecb5e0 100644 --- a/src/components/models/navigation/items/NavigationMenuItems.vue +++ b/src/components/models/navigation/items/NavigationMenuItems.vue @@ -8,7 +8,8 @@ import { } from "@/components/models/navigation/items/NavigationMenuItemsSuperUser.vue"; import { items as itemsAdmin, - parsedItems as parsedItemsAdmin + parsedItems as parsedItemsAdmin, + syncAdminNavigationRoute } from "@/components/models/navigation/items/NavigationMenuItemsAdmin.vue"; import { items as itemsUser, @@ -50,6 +51,7 @@ export function useNavigationItems() { if ((SessionUser.canAccessUser() || SessionUser.isSubuser.value) && isUser.value) { return parsedItemsUser(); } else if (SessionUser.canAccessAdmin() && isAdmin.value) { + syncAdminNavigationRoute(route); return parsedItemsAdmin(); } else if (SessionUser.canAccessSuperUser()) { return parsedItemsSuperUser(); @@ -73,4 +75,4 @@ export default defineComponent({ return useNavigationItems(); } }); - \ No newline at end of file + diff --git a/src/components/models/navigation/items/NavigationMenuItemsAdmin.vue b/src/components/models/navigation/items/NavigationMenuItemsAdmin.vue index 3ce49629..7d79231a 100644 --- a/src/components/models/navigation/items/NavigationMenuItemsAdmin.vue +++ b/src/components/models/navigation/items/NavigationMenuItemsAdmin.vue @@ -3,13 +3,24 @@ import { NavigationItemProps } from "@/components/models/navigation/NavigationIt import {defineComponent, ref, computed, watch} from 'vue'; import { SessionUser } from '@/components/session/token/SessionUser.vue'; import { getDepartmentName } from "@/components/session/token/SessionUser/Objects/economicDepartments.vue"; -import { router } from "@/router.js"; import i18n from '@/i18n'; const t = (key: string) => i18n.global.t(key); +const routeContext = ref({ + path: window.location.pathname || '', + params: {} as Record +}); + +const syncAdminNavigationRoute = (route: any) => { + routeContext.value = { + path: String(route?.path ?? window.location.pathname ?? ''), + params: (route?.params ?? {}) as Record + }; +}; + const department_id = computed(() => { - const currentRoute = router.currentRoute.value; + const currentRoute = routeContext.value; const fromParams = Number.parseInt(String(currentRoute?.params?.departmentId ?? ''), 10); if (Number.isInteger(fromParams) && fromParams > 0) { @@ -213,6 +224,7 @@ export default defineComponent({ // Named exports if needed export { + syncAdminNavigationRoute, items, parsedItems } diff --git a/tests/unit/navigation-menu-items-admin-contract.spec.js b/tests/unit/navigation-menu-items-admin-contract.spec.js index 7ce465e2..5b69e42a 100644 --- a/tests/unit/navigation-menu-items-admin-contract.spec.js +++ b/tests/unit/navigation-menu-items-admin-contract.spec.js @@ -9,10 +9,12 @@ const source = readFileSync( ).replace(/\r\n/g, '\n'); describe('NavigationMenuItemsAdmin contract', () => { - it('derives department id from reactive route context', () => { - expect(source).toContain('import { useRoute } from "vue-router";'); - expect(source).toContain('const route = useRoute();'); - expect(source).toContain('route.params.departmentId'); - expect(source).toContain('route.path.match(/^\\/admin\\/(\\d+)(?:\\/|$)/)'); + it('derives department id from synced route context without router import', () => { + expect(source).not.toContain('import { router } from "@/router.js";'); + expect(source).toContain('const routeContext = ref('); + expect(source).toContain('const syncAdminNavigationRoute = (route: any) => {'); + expect(source).toContain('const currentRoute = routeContext.value;'); + expect(source).toContain('currentRoute?.params?.departmentId'); + expect(source).toContain('currentRoute?.path?.match(/^\\/admin\\/(\\d+)(?:\\/|$)/)'); }); });