import { createRouter, createWebHistory } from 'vue-router' import LoginView from '../views/LoginView.vue' import MainMenuView from '../views/MainMenuView.vue' import createGameView from '../views/CreateGame.vue' import joinGameView from "@/views/JoinGameView.vue"; import defaultMenu from "../components/DefaultMenu.vue" import axios from "axios"; import { useUserInfo } from "@/composables/useUserInfo"; import rulesView from "../components/Rules.vue"; import Game from "@/views/Game.vue"; import OfflineView from "@/views/OfflineView.vue"; const api = window?.__RUNTIME_CONFIG__?.API_URL; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: '/', component: MainMenuView, meta: { requiresAuth: true }, children: [ { path: '', name: 'mainmenu', component: defaultMenu, meta: { requiresAuth: true } }, { path: 'create', name: 'create-Game', component: createGameView, meta: {requiresAuth: true } }, { path: 'join', name: 'join-Game', component: joinGameView, meta: {requiresAuth: true } }, { path: 'rules', name: 'rules-Game', component: rulesView, meta: {requiresAuth: true } }, ], }, { path: '/login', name: 'login', component: LoginView, meta: { requiresAuth: false } }, { path: '/game', name: 'game', component: Game, meta: {requiresAuth: true } }, { path: '/offline', name: 'offline', component: OfflineView, meta: {requiresAuth: false } } ], }) router.beforeEach(async (to, from, next) => { const info = useUserInfo(); const isOnline = navigator.onLine; if (to.name === 'offline') { if (isOnline) { try { const response = await axios.get(`${api}/userInfo`, { withCredentials: true }); info.setUserInfo(response.data.username, response.data.userId); return next({ name: 'mainmenu' }); } catch (err) { info.clearUserInfo(); return next('/login'); } } else { return next(); } } if (!isOnline) { return next({ name: 'offline' }); } if (!to.meta.requiresAuth) return next(); try { await axios.get(`${api}/userInfo`, { withCredentials: true }).then( res => { info.setUserInfo(res.data.username, res.data.userId); } ); next(); } catch (err) { info.clearUserInfo(); next('/login'); } }); export default router