funkwhale/front/src/router/routes/index.ts

109 wiersze
2.6 KiB
TypeScript

import type { RouteRecordRaw } from 'vue-router'
import settings from './settings'
import library from './library'
import content from './content'
import manage from './manage'
import store from '~/store'
import auth from './auth'
import user from './user'
import { requireLoggedIn } from '~/router/guards'
export default [
{
path: '/',
name: 'index',
component: () => import('~/components/Home.vue'),
beforeEnter (to, from, next) {
if (store.state.auth.authenticated) return next('/library')
return next()
}
},
{
path: '/instance-chooser',
name: 'instance-chooser',
component: () => import('~/views/ChooseInstance.vue'),
},
{
path: '/index.html',
redirect: to => {
const { hash, query } = to
return { name: 'index', hash, query }
}
},
{
path: '/front',
name: 'front',
redirect: to => {
const { hash, query } = to
return { name: 'index', hash, query }
}
},
{
path: '/about',
name: 'about',
component: () => import('~/components/About.vue')
},
{
// TODO (wvffle): Make it a child of /about to have the active style on the sidebar link
path: '/about/pod',
name: 'about-pod',
component: () => import('~/components/AboutPod.vue')
},
{
path: '/notifications',
name: 'notifications',
component: () => import('~/views/Notifications.vue')
},
{
path: '/search',
name: 'search',
component: () => import('~/views/Search.vue')
},
...auth,
...settings,
...user,
{
path: '/favorites',
name: 'favorites',
component: () => import('~/components/favorites/List.vue'),
props: route => ({
defaultOrdering: route.query.ordering,
defaultPage: route.query.page ? +route.query.page : undefined
}),
beforeEnter: requireLoggedIn()
},
...content,
...manage,
...library,
{
path: '/channels/:id',
props: true,
component: () => import('~/views/channels/DetailBase.vue'),
children: [
{
path: '',
name: 'channels.detail',
component: () => import('~/views/channels/DetailOverview.vue')
},
{
path: 'episodes',
name: 'channels.detail.episodes',
component: () => import('~/views/channels/DetailEpisodes.vue')
}
]
},
{
path: '/subscriptions',
name: 'subscriptions',
component: () => import('~/views/channels/SubscriptionsList.vue'),
props: route => ({ defaultQuery: route.query.q })
},
{
path: '/:pathMatch(.*)*',
name: '404',
component: () => import('~/components/PageNotFound.vue')
}
] as RouteRecordRaw[]