import { createWebHistory, createRouter } from "vue-router"; import routes from "./routes"; import appConfig from "../../app.config"; import store from "../state/store"; const router = createRouter({ history: createWebHistory("/"), routes, }); router.beforeResolve(async (routeTo, routeFrom, next) => { try { if (routeTo.matched.some((record) => record.meta.requiresAuth)) { await store.dispatch("user/verifyLogin"); if (!store.getters["user/isAuthenticated"]) { return next({ name: "otpLogin" }); } } // For each matched route... for (const route of routeTo.matched) { await new Promise((resolve, reject) => { // If a `beforeResolve` hook is defined, call it with // the same arguments as the `beforeEnter` hook. if (route.meta && route.meta.beforeResolve) { route.meta.beforeResolve(routeTo, routeFrom, (...args) => { // If the user chose to redirect... if (args.length) { // If redirecting to the same route we're coming from... // Complete the redirect. next(...args); reject(new Error("Redirected")); } else { resolve(); } }); } else { // Otherwise, continue resolving the route. resolve(); } }); } // If a `beforeResolve` hook chose to redirect, just return. } catch (error) { return; } document.title = routeTo.meta.title + " | " + appConfig.title; // If we reach this point, continue resolving the route. next(); }); export default router;