105 lines
4.3 KiB
JavaScript
105 lines
4.3 KiB
JavaScript
import { createRouter, createWebHistory, isNavigationFailure, NavigationFailureType } from 'vue-router';
|
|
|
|
import configuracoesRoutes from './routes.configs';
|
|
import meRoutes from './routes.account';
|
|
import adminRoutes from './routes.clinic';
|
|
import authRoutes from './routes.auth';
|
|
import billingRoutes from './routes.billing';
|
|
import miscRoutes from './routes.misc';
|
|
import portalRoutes from './routes.portal';
|
|
import publicRoutes from './routes.public';
|
|
import saasRoutes from './routes.saas';
|
|
import therapistRoutes from './routes.therapist';
|
|
import supervisorRoutes from './routes.supervisor';
|
|
import editorRoutes from './routes.editor';
|
|
import featuresRoutes from './routes.features';
|
|
|
|
import { pinia } from '@/plugins/pinia' // ← singleton compartilhado
|
|
import { supportGuard } from '@/support/supportGuard'
|
|
import { applyGuards } from './guards';
|
|
|
|
const routes = [
|
|
...(Array.isArray(publicRoutes) ? publicRoutes : [publicRoutes]),
|
|
...(Array.isArray(authRoutes) ? authRoutes : [authRoutes]),
|
|
...(Array.isArray(miscRoutes) ? miscRoutes : [miscRoutes]),
|
|
...(Array.isArray(billingRoutes) ? billingRoutes : [billingRoutes]),
|
|
...(Array.isArray(saasRoutes) ? saasRoutes : [saasRoutes]),
|
|
...(Array.isArray(meRoutes) ? meRoutes : [meRoutes]),
|
|
...(Array.isArray(adminRoutes) ? adminRoutes : [adminRoutes]),
|
|
...(Array.isArray(therapistRoutes) ? therapistRoutes : [therapistRoutes]),
|
|
...(Array.isArray(supervisorRoutes) ? supervisorRoutes : [supervisorRoutes]),
|
|
...(Array.isArray(editorRoutes) ? editorRoutes : [editorRoutes]),
|
|
...(Array.isArray(portalRoutes) ? portalRoutes : [portalRoutes]),
|
|
...(Array.isArray(configuracoesRoutes) ? configuracoesRoutes : [configuracoesRoutes]),
|
|
...(Array.isArray(featuresRoutes) ? featuresRoutes : [featuresRoutes]),
|
|
|
|
// ✅ compat: rota antiga /login → /auth/login
|
|
{
|
|
path: '/login',
|
|
redirect: (to) => ({
|
|
path: '/auth/login',
|
|
query: to.query || {}
|
|
})
|
|
},
|
|
];
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes,
|
|
scrollBehavior(to, from, savedPosition) {
|
|
if (savedPosition) return savedPosition;
|
|
return false;
|
|
}
|
|
});
|
|
|
|
/* 🔎 DEBUG: listar todas as rotas registradas */
|
|
console.log(
|
|
'[ROUTES]',
|
|
router.getRoutes().map((r) => r.path).sort()
|
|
);
|
|
|
|
// ===== DEBUG NAV + TRACE (remover depois) =====
|
|
const _push = router.push.bind(router);
|
|
router.push = async (loc) => {
|
|
console.log('[router.push]', loc);
|
|
console.trace('[push caller]');
|
|
const res = await _push(loc);
|
|
if (isNavigationFailure(res, NavigationFailureType.duplicated)) console.warn('[NAV FAIL] duplicated', res);
|
|
else if (isNavigationFailure(res, NavigationFailureType.cancelled)) console.warn('[NAV FAIL] cancelled', res);
|
|
else if (isNavigationFailure(res, NavigationFailureType.aborted)) console.warn('[NAV FAIL] aborted', res);
|
|
else if (isNavigationFailure(res, NavigationFailureType.redirected)) console.warn('[NAV FAIL] redirected', res);
|
|
return res;
|
|
};
|
|
|
|
const _replace = router.replace.bind(router);
|
|
router.replace = async (loc) => {
|
|
console.log('[router.replace]', loc);
|
|
console.trace('[replace caller]');
|
|
const res = await _replace(loc);
|
|
if (isNavigationFailure(res, NavigationFailureType.cancelled)) console.warn('[NAV FAIL replace] cancelled', res);
|
|
else if (isNavigationFailure(res, NavigationFailureType.aborted)) console.warn('[NAV FAIL replace] aborted', res);
|
|
else if (isNavigationFailure(res, NavigationFailureType.redirected)) console.warn('[NAV FAIL replace] redirected', res);
|
|
return res;
|
|
};
|
|
|
|
router.onError((e) => console.error('[router.onError]', e));
|
|
|
|
// ✅ support guard — passa pinia para garantir acesso ao store antes do app.use(pinia)
|
|
router.beforeEach(async (to) => {
|
|
await supportGuard(to, pinia)
|
|
})
|
|
|
|
router.beforeEach((to, from) => {
|
|
console.log('[beforeEach]', from.fullPath, '->', to.fullPath);
|
|
return true;
|
|
});
|
|
|
|
router.afterEach((to, from, failure) => {
|
|
if (failure) console.warn('[afterEach failure]', failure);
|
|
else console.log('[afterEach ok]', from.fullPath, '->', to.fullPath);
|
|
});
|
|
// ===== /DEBUG NAV + TRACE =====
|
|
|
|
applyGuards(router);
|
|
|
|
export default router; |