-
Jens Christian Aanestad authoredJens Christian Aanestad authored
index.ts 3.69 KiB
// Import necessary dependencies from Vue Router and your views
import { createRouter, createWebHistory } from 'vue-router';
import LoginView from '../views/Authentication/LoginView.vue';
import { useUserInfoStore } from '@/stores/UserStore';
import UserProfileView from "@/views/User/UserProfileView.vue";
import SignUp from '@/components/SignUp/SignUp.vue'
const routes = [
{
path: '/',
name: 'base',
component: () => import('@/views/BasePageView.vue'),
children: [
{
path: '',
name: 'home',
component: () => import('../views/HomeView.vue'),
meta: { requiresAuth: true },
},
{
path: '/news',
name: 'news',
component: () => import('@/views/NewsView.vue'),
},
{
path: 'leaderboard',
name: 'leaderboard',
component: () => import('@/views/LeaderboardView.vue'),
},
{
path: 'test',
name: 'test',
component: () => import('@/views/TestView.vue'),
},
{
path: 'roadmap',
name: 'roadmap',
component: () => import('@/views/SavingGoalView/RoadmapView.vue'),
},
{
path: 'feedback',
name: 'feedback',
component: () => import('@/views/FeedbackView.vue'),
},
{
path: 'shop',
name: 'shop',
component: () => import('@/views/ShopView.vue'),
},
{
path: 'admin',
name: 'admin',
component: () => import('@/views/TestView.vue'),
meta: { requiresAdmin: true }
},
{
path: 'unauthorized',
name: 'unauthorized',
component: () => import('@/views/UnauthorizedView.vue'),
},
{
path: '/:pathMatch(.*)*',
name: 'not-found',
component: () => import('@/views/NotFoundView.vue'),
},
]
},
{
path: '/login',
name: 'login',
component: LoginView,
},
{
path: '/profile',
name: 'profile',
component: UserProfileView
},
{
path: '/sign-up',
name: 'sign up',
component: () => import('@/views/Authentication/SignUpView.vue'),
},
{
path: '/configuration',
name: 'configuration',
component: () => import('@/views/ConfigurationView.vue'),
children: [
{
path: '/bank-id',
name: 'bankId',
component: () => import('@/components/Configuration/ConfigurationSteps/BankId.vue'),
},
{
path: '/commitment',
name: 'commitment',
component: () => import('@/components/Configuration/ConfigurationSteps/Commitment.vue'),
},
{
path: '/experience',
name: 'experience',
component: () => import('@/components/Configuration/ConfigurationSteps/Experience.vue'),
},
{
path: '/suitable-challenges',
name: 'suitable challenges',
component: () => import('@/components/Configuration/ConfigurationSteps/SuitableChallenges.vue'),
},
{
path: '/first-saving-goal',
name: 'first saving goal',
component: () => import('@/components/Configuration/ConfigurationSteps/FirstSavingGoal.vue'),
}
]
},
{
path: '/:pathMatch(.*)*',
redirect: { name: 'not-found' },
},
];
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes,
scrollBehavior() {
return { top: 0 };
},
});
router.beforeEach((to, from, next) => {
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
const requiresAdmin = to.matched.some(record => record.meta.requiresAdmin);
const userRole = useUserInfoStore().role;
if (requiresAdmin && userRole !== 'admin') {
next({ name: 'unauthorized' });
} else {
next();
}
});
export default router;