Skip to content

Commit 38a8c01

Browse files
committed
refactor(router): extract createSpaRouter factory
Seven SPA routers (CAHFS, CMS, CTS, ClinicalScheduler, Computing, Effort, Students) duplicated the same createRouter + VITE_VIPER_HOME + scroll-top + useRouteFocus setup. Hoist into src/shared/createSpaRouter.ts so each router only owns its bespoke beforeEach guard. No behavior change.
1 parent 50faac0 commit 38a8c01

8 files changed

Lines changed: 34 additions & 70 deletions

File tree

VueApp/src/CAHFS/router/index.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
import { createRouter, createWebHistory } from "vue-router"
1+
import { createSpaRouter } from "@/shared/createSpaRouter"
22
import { routes } from "./routes"
33
import { useRequireLogin } from "@/composables/RequireLogin"
44
import { checkHasOnePermission } from "@/composables/CheckPagePermission"
5-
import { useRouteFocus } from "@/composables/use-route-focus"
65

7-
const baseUrl = import.meta.env.VITE_VIPER_HOME
8-
const router = createRouter({
9-
scrollBehavior: () => ({ left: 0, top: 0 }),
10-
history: createWebHistory(baseUrl),
11-
routes,
12-
})
6+
const router = createSpaRouter(routes)
137

148
router.beforeEach(async (to) => {
159
const { requireLogin } = useRequireLogin(to)
@@ -25,6 +19,4 @@ router.beforeEach(async (to) => {
2519
}
2620
})
2721

28-
useRouteFocus(router)
29-
3022
export { router as CAHFSRouter }

VueApp/src/CMS/router/index.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
import { createRouter, createWebHistory } from "vue-router"
1+
import { createSpaRouter } from "@/shared/createSpaRouter"
22
import { routes } from "./routes"
33
import { useRequireLogin } from "@/composables/RequireLogin"
44
import { checkHasOnePermission } from "@/composables/CheckPagePermission"
5-
import { useRouteFocus } from "@/composables/use-route-focus"
65

7-
const baseUrl = import.meta.env.VITE_VIPER_HOME
8-
const router = createRouter({
9-
scrollBehavior: () => ({ left: 0, top: 0 }),
10-
history: createWebHistory(baseUrl),
11-
routes,
12-
})
6+
const router = createSpaRouter(routes)
137

148
router.beforeEach(async (to) => {
159
const { requireLogin } = useRequireLogin(to)
@@ -25,6 +19,4 @@ router.beforeEach(async (to) => {
2519
}
2620
})
2721

28-
useRouteFocus(router)
29-
3022
export { router as cmsRouter }

VueApp/src/CTS/router/index.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
import { createRouter, createWebHistory } from "vue-router"
1+
import { createSpaRouter } from "@/shared/createSpaRouter"
22
import { routes } from "./routes"
33
import { useRequireLogin } from "@/composables/RequireLogin"
44
import { checkHasOnePermission } from "@/composables/CheckPagePermission"
5-
import { useRouteFocus } from "@/composables/use-route-focus"
65

7-
const baseUrl = import.meta.env.VITE_VIPER_HOME
8-
const router = createRouter({
9-
scrollBehavior: () => ({ left: 0, top: 0 }),
10-
history: createWebHistory(baseUrl),
11-
routes,
12-
})
6+
const router = createSpaRouter(routes)
137

148
router.beforeEach(async (to) => {
159
const { requireLogin } = useRequireLogin(to)
@@ -25,6 +19,4 @@ router.beforeEach(async (to) => {
2519
}
2620
})
2721

28-
useRouteFocus(router)
29-
3022
export { router }
Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
1-
import { createRouter, createWebHistory } from "vue-router"
1+
import { createSpaRouter } from "@/shared/createSpaRouter"
22
import { clinicalSchedulerRoutes as routes } from "./routes"
33
import { useRequireLogin } from "@/composables/RequireLogin"
4-
import { useRouteFocus } from "@/composables/use-route-focus"
54

6-
const baseUrl = import.meta.env.VITE_VIPER_HOME
7-
const router = createRouter({
8-
scrollBehavior: () => ({ left: 0, top: 0 }),
9-
history: createWebHistory(baseUrl),
10-
routes,
11-
})
5+
const router = createSpaRouter(routes)
126

137
router.beforeEach((to) => {
148
const { requireLogin } = useRequireLogin(to)
159
return requireLogin(true, "SVMSecure.ClnSched")
1610
})
1711

18-
useRouteFocus(router)
19-
2012
export { router as clinicalSchedulerRouter }
Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
1-
import { createRouter, createWebHistory } from "vue-router"
1+
import { createSpaRouter } from "@/shared/createSpaRouter"
22
import { routes } from "./routes"
33
import { useRequireLogin } from "@/composables/RequireLogin"
4-
import { useRouteFocus } from "@/composables/use-route-focus"
54

6-
const baseUrl = import.meta.env.VITE_VIPER_HOME
7-
const router = createRouter({
8-
scrollBehavior: () => ({ left: 0, top: 0 }),
9-
history: createWebHistory(baseUrl),
10-
routes,
11-
})
5+
const router = createSpaRouter(routes)
126

137
router.beforeEach((to) => {
148
const { requireLogin } = useRequireLogin(to)
159
return requireLogin()
1610
})
1711

18-
useRouteFocus(router)
19-
2012
export { router }

VueApp/src/Effort/router/index.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
1-
import { createRouter, createWebHistory } from "vue-router"
1+
import { createSpaRouter } from "@/shared/createSpaRouter"
22
import { effortRoutes as routes } from "./routes"
33
import { useRequireLogin } from "@/composables/RequireLogin"
44
import { checkHasOnePermission } from "@/composables/CheckPagePermission"
55
import { useFetch } from "@/composables/ViperFetch"
66
import { useUserStore } from "@/store/UserStore"
7-
import { useRouteFocus } from "@/composables/use-route-focus"
87

9-
const baseUrl = import.meta.env.VITE_VIPER_HOME
10-
const router = createRouter({
11-
scrollBehavior: () => ({ left: 0, top: 0 }),
12-
history: createWebHistory(baseUrl),
13-
routes,
14-
})
8+
const router = createSpaRouter(routes)
159

1610
// Dedup latch: reuse in-flight fetch so concurrent navigations don't fire multiple requests
1711
let evalPermissionsPromise: Promise<void> | null = null
@@ -63,6 +57,4 @@ router.beforeEach(async (to, from) => {
6357
}
6458
})
6559

66-
useRouteFocus(router)
67-
6860
export { router as effortRouter }

VueApp/src/Students/router/index.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
1-
import { createRouter, createWebHistory } from "vue-router"
1+
import { createSpaRouter } from "@/shared/createSpaRouter"
22
import { routes } from "./routes"
33
import { useRequireLogin } from "@/composables/RequireLogin"
4-
import { useRouteFocus } from "@/composables/use-route-focus"
54
import { checkHasOnePermission } from "@/composables/CheckPagePermission"
65
import { useFetch } from "@/composables/ViperFetch"
76
import { useUserStore } from "@/store/UserStore"
87

9-
const baseUrl = import.meta.env.VITE_VIPER_HOME
10-
const router = createRouter({
11-
scrollBehavior: () => ({ left: 0, top: 0 }),
12-
history: createWebHistory(baseUrl),
13-
routes,
14-
})
8+
const router = createSpaRouter(routes)
159

1610
// In-flight latch: dedups concurrent navigations but resets after each attempt so later
1711
// sessions (e.g. re-auth into an SIS role) can re-fetch instead of reusing a stale resolution.
@@ -66,6 +60,4 @@ router.beforeEach(async (to, from) => {
6660
}
6761
})
6862

69-
useRouteFocus(router)
70-
7163
export { router }
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { createRouter, createWebHistory } from "vue-router"
2+
import type { RouteRecordRaw, Router } from "vue-router"
3+
import { useRouteFocus } from "@/composables/use-route-focus"
4+
5+
/**
6+
* Standard VIPER SPA router: web history rooted at VITE_VIPER_HOME,
7+
* scroll-to-top on every navigation, and route-change focus management
8+
* for accessibility. Callers wire their own `beforeEach` guard since
9+
* auth/permission rules vary per SPA.
10+
*/
11+
export function createSpaRouter(routes: RouteRecordRaw[]): Router {
12+
const baseUrl = import.meta.env.VITE_VIPER_HOME
13+
const router = createRouter({
14+
scrollBehavior: () => ({ left: 0, top: 0 }),
15+
history: createWebHistory(baseUrl),
16+
routes,
17+
})
18+
useRouteFocus(router)
19+
return router
20+
}

0 commit comments

Comments
 (0)