import { createRouter, createWebHistory } from 'vue-router' import HomePage from '@/pages/HomePage.vue' import ComposePage from '@/pages/ComposePage.vue' import AboutPage from '@/pages/AboutPage.vue' import ContactPage from '@/pages/ContactPage.vue' import PrivacyPolicyPage from '@/pages/PrivacyPolicyPage.vue' import TermsOfServicePage from '@/pages/TermsOfServicePage.vue' import RegisterPage from '@/pages/RegisterPage.vue' import LoginPage from '@/pages/LoginPage.vue' import ForgotPasswordPage from '@/pages/ForgotPasswordPage.vue' import ResetPasswordPage from '@/pages/ResetPasswordPage.vue' import ChangePasswordPage from '@/pages/ChangePasswordPage.vue' import OrdersPage from '@/pages/OrdersPage.vue' import EditOrderPage from '@/pages/EditOrderPage.vue' import AdminPage from '@/pages/AdminPage.vue' import PaymentRedirect from '@/pages/PaymentRedirect.vue' import { useAuthStore } from '@/stores/authStore' import { getActivePinia } from 'pinia' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: '/', name: 'home', component: HomePage, }, { path: '/compose', name: 'compose', component: ComposePage, meta: { requiresAuth: true }, }, { path: '/orders', name: 'orders', component: OrdersPage, meta: { requiresAuth: true }, }, { path: '/bestallning/:orderId/redigera', name: 'edit-order', component: EditOrderPage, meta: { requiresAuth: true }, }, { path: '/andra-losenord', name: 'change-password', component: ChangePasswordPage, meta: { requiresAuth: true }, }, { path: '/admin', name: 'admin', component: AdminPage, meta: { requiresAuth: true, requiresAdmin: true }, }, { path: '/betalning/:orderId', name: 'payment', component: PaymentRedirect, meta: { requiresAuth: true }, }, { path: '/registrera', name: 'register', component: RegisterPage, meta: { guestOnly: true }, }, { path: '/logga-in', name: 'login', component: LoginPage, meta: { guestOnly: true }, }, { path: '/glomt-losenord', name: 'forgot-password', component: ForgotPasswordPage, meta: { guestOnly: true }, }, { path: '/aterstall-losenord', name: 'reset-password', component: ResetPasswordPage, meta: { guestOnly: true }, }, { path: '/om-oss', name: 'about', component: AboutPage, }, { path: '/om', redirect: '/om-oss', }, { path: '/kontakt', name: 'contact', component: ContactPage, }, { path: '/integritetspolicy', name: 'privacy', component: PrivacyPolicyPage, }, { path: '/villkor', name: 'terms', component: TermsOfServicePage, }, ], }) router.beforeEach((to) => { if (!getActivePinia()) return const auth = useAuthStore() if (to.meta.guestOnly && auth.isAuthenticated) return { name: 'home' } if (to.meta.requiresAuth && !auth.isAuthenticated) { return { name: 'login', query: { redirect: to.fullPath } } } if (to.meta.requiresAdmin && !auth.isAdmin) return { name: 'home' } }) export default router