Files
frangipane-client/src/router.ts
2025-12-31 16:23:08 +01:00

62 lines
1.6 KiB
TypeScript

import { createRouter, createWebHistory } from 'vue-router'
import { initAuth, getLastRoom, setLastRoom } from './store'
import LoginPage from './pages/LoginPage.vue'
import RegisterPage from './pages/RegisterPage.vue'
import ChatPage from './pages/ChatPage.vue'
import FriendListPage from './pages/FriendListPage.vue'
import NofificationsPage from './pages/NotificationsPage.vue'
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/', name: 'root', component: { render: () => null } },
{
path: '/login',
name: 'login',
component: LoginPage,
meta: { hideNavbar: true }
},
{
path: '/register',
name: 'register',
component: RegisterPage,
meta: { hideNavbar: true }
},
{
path: '/rooms/:uuid',
name: 'chat',
component: ChatPage,
props: true
},
{ path: '/friendlist', component: FriendListPage },
{ path: '/notifications', component: NofificationsPage }
],
})
router.beforeEach(async (to) => {
if (to.path === '/login' || to.path === '/register') return true
const auth = await initAuth()
if (!auth.isAuthenticated) {
return '/login'
}
// Handle the redirect from "/" to the last room
if (to.path === '/') {
const lastRoom = await getLastRoom()
return `/rooms/${lastRoom || 'none'}`
}
return true
})
// Save the room UUID to storage after every successful navigation to a chat room
router.afterEach((to) => {
if (to.name === 'chat' && to.params.uuid) {
setLastRoom(to.params.uuid as string)
}
})
export default router