12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- import {
- createRouter,
- createWebHistory,
- type NavigationGuard,
- type NavigationHookAfter,
- type Router,
- type RouteRecordRaw,
- } from 'vue-router'
- import { useApplicationStore } from '#shared/stores/application.ts'
- import type { RouteRecordMeta } from '#shared/types/router.ts'
- import { errorAfterGuard } from './error.ts'
- import headerTitleGuard from './guards/after/headerTitle.ts'
- import authenticationGuard from './guards/before/authentication.ts'
- import permissionGuard from './guards/before/permission.ts'
- import { initializeWalker } from './walker.ts'
- import type { App } from 'vue'
- declare module 'vue-router' {
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
- interface RouteMeta extends RouteRecordMeta {}
- }
- export default function initializeRouter(
- app: App,
- routes: Array<RouteRecordRaw>,
- beforeGuards?: NavigationGuard[],
- afterGuards?: NavigationHookAfter[],
- historyBase?: string,
- ): Router {
- const router: Router = createRouter({
- history: createWebHistory(historyBase),
- routes,
- })
- const removeInitializer = router.beforeResolve(() => {
- const { setInitialized } = useApplicationStore()
- setInitialized()
- removeInitializer()
- })
- router.beforeEach(authenticationGuard)
- router.beforeEach(permissionGuard)
- beforeGuards?.forEach((guard) => router.beforeEach(guard))
- router.afterEach(headerTitleGuard)
- router.afterEach(errorAfterGuard)
- afterGuards?.forEach((guard) => router.afterEach(guard))
- app.use(router)
- initializeWalker(app, router)
- return router
- }
|