- Add /integritetspolicy and /villkor to Vue Router - Add Router tests confirming both public legal routes resolve Co-authored-by: Cursor <cursoragent@cursor.com>
127 lines
3.3 KiB
TypeScript
127 lines
3.3 KiB
TypeScript
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
|