agola-web/src/router.js
Simone Gotti 3f2c57394a *: Format with prettier
Use latest prettier as devDependency so tools will use (or can be
configured to use) the npm provided version.
The unique config change is to use single quotes instead of double
quotes.
2022-02-24 09:02:02 +01:00

564 lines
16 KiB
JavaScript

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './views/Home.vue';
import User from './views/User.vue';
import Org from './views/Org.vue';
import Project from './views/Project.vue';
import ProjectGroup from './views/ProjectGroup.vue';
import AddLinkedAccount from './views/AddLinkedAccount.vue';
import usersettings from './components/usersettings.vue';
import projects from './components/projects.vue';
import projectsettings from './components/projectsettings.vue';
import projectgroupsettings from './components/projectgroupsettings.vue';
import createproject from './components/createproject.vue';
import createprojectgroup from './components/createprojectgroup.vue';
import createorganization from './components/createorganization.vue';
import orgmembers from './components/orgmembers.vue';
import runs from './components/runs.vue';
import runsummary from './components/runsummary.vue';
import tasksummary from './components/tasksummary.vue';
import Oauth2 from './views/Oauth2.vue';
import Register from './views/Register.vue';
import Login from './views/Login.vue';
import Logout from './views/Logout.vue';
import CreateSource from './views/CreateSource.vue';
import { parseRef, projectRunLink } from '@/util/link.js';
import { fetchProject } from '@/util/data.js';
import store from './store';
Vue.use(VueRouter);
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/register',
name: 'register',
component: Register,
},
{
path: '/newsource',
name: 'newsource',
component: CreateSource,
},
{
path: '/login',
name: 'login',
component: Login,
},
{
path: '/logout',
name: 'logout',
component: Logout,
},
{
path: '/oauth2/callback',
name: 'oauth2callback',
component: Oauth2,
},
{
path: '/',
name: 'home',
component: Home,
},
{
path: '/neworganization',
component: createorganization,
},
{
path: '/user/:username',
component: User,
props: (route) => ({ username: route.params.username }),
children: [
{
path: '',
name: 'user',
component: projects,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
}),
},
{
path: 'projects',
name: 'user projects',
component: projects,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
}),
},
{
path: 'runs',
name: 'user direct runs',
component: runs,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
}),
},
{
path: 'runs/:runid',
name: 'user direct run',
component: runsummary,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
runid: route.params.runid,
}),
},
{
path: 'runs/:runid/tasks/:taskid',
name: 'user direct run task',
component: tasksummary,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
runid: route.params.runid,
taskid: route.params.taskid,
}),
},
{
path: 'settings',
name: 'user settings',
component: usersettings,
props: (route) => ({ username: route.params.username }),
},
{
path: 'linkedaccounts/add/:remotesource',
name: 'user add linked account',
component: AddLinkedAccount,
props: (route) => ({
username: route.params.username,
remoteSourceName: route.params.remotesource,
}),
},
{
path: 'createprojectgroup',
name: 'user create project group',
component: createprojectgroup,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
}),
},
{
path: 'createproject',
name: 'user create project',
component: createproject,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
}),
},
],
},
{
path: '/user/:username/projects/:projectref(.*\\.proj)',
component: Project,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
}),
children: [
{
path: '',
name: 'user project',
component: runs,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
}),
},
{
path: 'runs',
name: 'user project runs',
component: runs,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
}),
},
{
path: 'branches',
name: 'user project branches runs',
component: runs,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
query: 'branches',
}),
},
{
path: 'tags',
name: 'user project tags runs',
component: runs,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
query: 'tags',
}),
},
{
path: 'pullrequests',
name: 'user project pull requests runs',
component: runs,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
query: 'pullrequests',
}),
},
{
path: 'runs/:runid',
name: 'user project run',
component: runsummary,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
runid: route.params.runid,
}),
},
{
path: 'runs/:runid/tasks/:taskid',
name: 'user project run task',
component: tasksummary,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
runid: route.params.runid,
taskid: route.params.taskid,
}),
},
{
path: 'settings',
name: 'user project settings',
component: projectsettings,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectref: parseRef(route.params.projectref),
}),
},
],
},
{
path: '/user/:username/projectgroups/:projectgroupref(.*\\.proj)',
component: ProjectGroup,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectgroupref: parseRef(route.params.projectgroupref),
}),
children: [
{
path: '',
name: 'user project group',
component: projects,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'projects',
name: 'user project group projects',
component: projects,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'settings',
name: 'user project group settings',
component: projectgroupsettings,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'createprojectgroup',
name: 'user project group create project group',
component: createprojectgroup,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'createproject',
name: 'user project group create project',
component: createproject,
props: (route) => ({
ownertype: 'user',
ownername: route.params.username,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
],
},
{
path: '/org/:orgname',
component: Org,
props: (route) => ({ orgname: route.params.orgname }),
children: [
{
path: '',
name: 'org',
component: projects,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
}),
},
{
path: 'projects',
name: 'org projects',
component: projects,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
}),
},
{
path: 'members',
name: 'org members',
component: orgmembers,
props: (route) => ({ orgname: route.params.orgname }),
},
/* {
path: "settings",
name: "org settings",
component: orgsettings,
props: (route) => ({ username: route.params.username }),
}, */
{
path: 'createprojectgroup',
name: 'org create project group',
component: createprojectgroup,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
}),
},
{
path: 'createproject',
name: 'org create project',
component: createproject,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
}),
},
],
},
{
path: '/org/:orgname/projects/:projectref(.*\\.proj)',
component: Project,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
}),
children: [
{
path: '',
name: 'org project',
component: runs,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
}),
},
{
path: 'runs',
name: 'org project runs',
component: runs,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
}),
},
{
path: 'branches',
name: 'org project branches runs',
component: runs,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
query: 'branches',
}),
},
{
path: 'tags',
name: 'org project tags runs',
component: runs,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
query: 'tags',
}),
},
{
path: 'pullrequests',
name: 'org project pull requests runs',
component: runs,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
query: 'pullrequests',
}),
},
{
path: 'runs/:runid',
name: 'org project run',
component: runsummary,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
runid: route.params.runid,
}),
},
{
path: 'runs/:runid/tasks/:taskid',
name: 'org project run task',
component: tasksummary,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
runid: route.params.runid,
taskid: route.params.taskid,
}),
},
{
path: 'settings',
name: 'org project settings',
component: projectsettings,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectref: parseRef(route.params.projectref),
}),
},
],
},
{
path: '/org/:orgname/projectgroups/:projectgroupref(.*\\.proj)',
component: ProjectGroup,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectgroupref: parseRef(route.params.projectgroupref),
}),
children: [
{
path: '',
name: 'org project group',
component: projects,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'projects',
name: 'org project group projects',
component: projects,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'settings',
name: 'org project group settings',
component: projectgroupsettings,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'createprojectgroup',
name: 'org project group create project group',
component: createprojectgroup,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
{
path: 'createproject',
name: 'org project group create project',
component: createproject,
props: (route) => ({
ownertype: 'org',
ownername: route.params.orgname,
projectgroupref: parseRef(route.params.projectgroupref),
}),
},
],
},
],
});
router.beforeEach(async (to, from, next) => {
store.dispatch('setError', null);
const { path, query } = to;
if (path == '/run') {
// generic run handler by projectref and runid
let projectref = query.projectref;
let runid = query.runid;
let { data, error } = await fetchProject(projectref);
if (error) {
this.$store.dispatch('setError', error);
return;
}
let project = data;
let parts = project.path.split('/');
let nextPath = projectRunLink(parts[0], parts[1], parts.slice(2), runid);
next({ path: nextPath.path, replace: true });
}
next();
});
export default router;