import { createRouter, createWebHistory } from 'vue-router'; import CatalogPage from '@/pages/CatalogPage.vue'; import ListingDetailPage from '@/pages/ListingDetailPage.vue'; import ProductDetailPage from '@/pages/ProductDetailPage.vue'; import AdminHomePage from '@/pages/AdminHomePage.vue'; import AdminShell from '@/pages/AdminShell.vue'; import LoginPage from '@/pages/LoginPage.vue'; import { useAuth } from '@/composables/useAuth.js'; import AdminImagePage from '@/pages/AdminImagePage.vue'; import AdminSettingsPage from '@/pages/AdminSettingsPage.vue'; import AdminSavedViewsPage from '@/pages/AdminSavedViewsPage.vue'; import AdminListingsPage from '@/pages/AdminListingsPage.vue'; import AdminSalesPage from '@/pages/AdminSalesPage.vue'; import AdminAcquisitionsPage from '@/pages/AdminAcquisitionsPage.vue'; import AdminInventoryPage from '@/pages/AdminInventoryPage.vue'; const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', name: 'catalog', component: CatalogPage }, { path: '/listings/:id', name: 'listing-detail', component: ListingDetailPage }, { path: '/products/:slug', name: 'product-detail', component: ProductDetailPage }, { path: '/login', name: 'login', component: LoginPage }, { path: '/admin', component: AdminShell, children: [ { path: '', name: 'admin-home', component: AdminHomePage }, { path: 'inventory/:id/images', name: 'admin-image-manager', component: AdminImagePage }, { path: 'inventory', name: 'admin-inventory', component: AdminInventoryPage }, { path: 'listings', name: 'admin-listings', component: AdminListingsPage }, { path: 'sales', name: 'admin-sales', component: AdminSalesPage }, { path: 'acquisitions', name: 'admin-acquisitions', component: AdminAcquisitionsPage }, { path: 'settings', name: 'admin-settings', component: AdminSettingsPage }, { path: 'saved-views', name: 'admin-saved-views', component: AdminSavedViewsPage }, ], }, ], }); export default router; const auth = useAuth(); router.beforeEach(async (to) => { if (!to.path.startsWith('/admin')) return true; if (!auth.isAuthenticated.value) await auth.load(); return auth.isAuthenticated.value ? true : { name: 'login' }; });