import type { RouteRecordRaw, RouteLocationNormalized } from 'vue-router' import { useProjectsStore } from '../stores/projects' const setProjectBeforeEnter = (to: RouteLocationNormalized) => { const id = Number(to.params.id) const projectsStore = useProjectsStore() projectsStore.setCurrentProjectId( !isNaN(id) && projectsStore.projectById(id) ? id : null ) } const routes: RouteRecordRaw[] = [ { path: '/', component: () => import('layouts/MainLayout.vue'), children: [ { path: '', redirect: '/projects' }, { name: 'projects', path: '/projects', component: () => import('pages/ProjectsPage.vue'), meta: { hideBackButton: true } }, { name: 'project_add', path: '/project/add', component: () => import('pages/CreateProjectPage.vue') }, { name: 'project_info', path: '/project/:id(\\d+)/info', component: () => import('pages/ProjectInfoPage.vue'), beforeEnter: setProjectBeforeEnter }, { name: 'company_mask', path: '/project/:id(\\d+)/company-mask', component: () => import('pages/CompanyMaskPage.vue'), beforeEnter: setProjectBeforeEnter }, { path: '/project/:id(\\d+)', component: () => import('pages/ProjectPage.vue'), beforeEnter: setProjectBeforeEnter, children: [ { name: 'project', path: '', redirect: { name: 'chats' } }, { name: 'chats', path: 'chats', component: () => import('components/admin/project-page/ProjectPageChats.vue'), meta: { backRoute: '/projects' } }, { name: 'persons', path: 'persons', component: () => import('components/admin/project-page/ProjectPagePersons.vue'), meta: { backRoute: '/projects' } }, { name: 'companies', path: 'companies', component: () => import('components/admin/project-page/ProjectPageCompanies.vue'), meta: { backRoute: '/projects' } } ] }, { name: 'company_info', path: '/project/:id(\\d+)/company/:companyId', component: () => import('pages/CompanyInfoPage.vue'), beforeEnter: setProjectBeforeEnter }, { name: 'person_info', path: '/project/:id(\\d+)/person/:personId', component: () => import('pages/PersonInfoPage.vue'), beforeEnter: setProjectBeforeEnter }, { name: 'account', path: '/account', component: () => import('pages/AccountPage.vue') }, { name: 'create_account', path: '/create-account', component: () => import('pages/CreateAccountPage.vue') }, { name: 'login', path: '/login', component: () => import('pages/LoginPage.vue') }, { name: 'recovery_password', path: '/recovery-password', component: () => import('pages/ForgotPasswordPage.vue') }, { name: 'add_company', path: '/add-company', component: () => import('pages/CreateCompanyPage.vue') }, { name: 'person_info', path: '/person-info', component: () => import('pages/PersonInfoPage.vue') }, { name: 'settings', path: '/settings', component: () => import('pages/SettingsPage.vue') }, { name: 'terms', path: '/terms-of-use', component: () => import('pages/TermsPage.vue') } ] }, { path: '/:catchAll(.*)*', component: () => import('pages/ErrorNotFound.vue'), } ] export default routes