62 lines
1.6 KiB
TypeScript
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
|