woodpecker/web/src/router.ts
Harikesh00 36e42914fa
Renamed procs/jobs to steps in code (#1331)
Renamed `procs` to `steps` in code for the issue #1288

Co-authored-by: Harikesh Prajapati <harikesh.prajapati@druva.com>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: qwerty287 <80460567+qwerty287@users.noreply.github.com>
Co-authored-by: 6543 <6543@obermui.de>
2022-10-28 17:38:53 +02:00

183 lines
4.9 KiB
TypeScript

import { Component } from 'vue';
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import useAuthentication from '~/compositions/useAuthentication';
import useUserConfig from '~/compositions/useUserConfig';
const routes: RouteRecordRaw[] = [
{
path: '/',
name: 'home',
redirect: '/repos',
},
{
path: '/repos',
name: 'repos',
component: (): Component => import('~/views/Repos.vue'),
meta: { authentication: 'required' },
},
{
path: '/repo/add',
name: 'repo-add',
component: (): Component => import('~/views/RepoAdd.vue'),
meta: { authentication: 'required' },
},
{
path: '/:repoOwner',
name: 'repos-owner',
component: (): Component => import('~/views/ReposOwner.vue'),
props: true,
},
{
path: '/org/:repoOwner',
component: (): Component => import('~/views/org/OrgWrapper.vue'),
props: true,
children: [
{
path: '',
name: 'org',
redirect: (route) => ({ name: 'repos-owner', params: route.params }),
},
{
path: 'settings',
name: 'org-settings',
component: (): Component => import('~/views/org/OrgSettings.vue'),
meta: { authentication: 'required' },
props: true,
},
],
},
{
path: '/:repoOwner/:repoName',
name: 'repo-wrapper',
component: (): Component => import('~/views/repo/RepoWrapper.vue'),
props: true,
children: [
{
path: '',
name: 'repo',
component: (): Component => import('~/views/repo/RepoPipelines.vue'),
meta: { repoHeader: true },
},
{
path: 'branches',
name: 'repo-branches',
component: (): Component => import('~/views/repo/RepoBranches.vue'),
meta: { repoHeader: true },
props: (route) => ({ branch: route.params.branch }),
},
{
path: 'branches/:branch',
name: 'repo-branch',
component: (): Component => import('~/views/repo/RepoBranch.vue'),
meta: { repoHeader: true },
props: (route) => ({ branch: route.params.branch }),
},
{
path: 'pipeline/:pipelineId',
component: (): Component => import('~/views/repo/pipeline/PipelineWrapper.vue'),
props: true,
children: [
{
path: ':stepId?',
name: 'repo-pipeline',
component: (): Component => import('~/views/repo/pipeline/Pipeline.vue'),
props: true,
},
{
path: 'changed-files',
name: 'repo-pipeline-changed-files',
component: (): Component => import('~/views/repo/pipeline/PipelineChangedFiles.vue'),
},
{
path: 'config',
name: 'repo-pipeline-config',
component: (): Component => import('~/views/repo/pipeline/PipelineConfig.vue'),
props: true,
},
],
},
{
path: 'settings',
name: 'repo-settings',
component: (): Component => import('~/views/repo/RepoSettings.vue'),
meta: { authentication: 'required' },
props: true,
},
// TODO: redirect to support backwards compatibility => remove after some time
{
path: ':pipelineId',
redirect: (route) => ({ name: 'repo-pipeline', params: route.params }),
},
{
path: 'build/:pipelineId',
redirect: (route) => ({ name: 'repo-pipeline', params: route.params }),
},
],
},
{
path: '/admin',
name: 'admin',
component: (): Component => import('~/views/admin/Admin.vue'),
meta: { authentication: 'required' },
props: true,
},
{
path: '/admin/settings',
name: 'admin-settings',
component: (): Component => import('~/views/admin/AdminSettings.vue'),
meta: { authentication: 'required' },
props: true,
},
{
path: '/user',
name: 'user',
component: (): Component => import('~/views/User.vue'),
meta: { authentication: 'required' },
props: true,
},
{
path: '/login/error',
name: 'login-error',
component: (): Component => import('~/views/Login.vue'),
meta: { blank: true },
props: true,
},
{
path: '/do-login',
name: 'login',
component: (): Component => import('~/views/Login.vue'),
meta: { blank: true },
props: true,
},
{
path: '/:pathMatch(.*)*',
name: 'not-found',
component: (): Component => import('~/views/NotFound.vue'),
},
];
const router = createRouter({
history: createWebHistory(),
routes,
});
router.beforeEach(async (to, _, next) => {
const config = useUserConfig();
const { redirectUrl } = config.userConfig.value;
if (redirectUrl !== '') {
config.setUserConfig('redirectUrl', '');
next(redirectUrl);
}
const authentication = useAuthentication();
if (to.meta.authentication === 'required' && !authentication.isAuthenticated) {
next({ name: 'login', query: { url: to.fullPath } });
return;
}
next();
});
export default router;