agola-web/src/views/User.vue

246 lines
7.2 KiB
Vue
Raw Normal View History

2018-12-09 13:21:20 +00:00
<template>
<div>
<nav class="mb-4 bg-grey-light rounded font-sans w-full">
<ol class="list-reset flex text-grey-dark">
<li>
<a>user</a>
</li>
<li>
<span class="mx-2">/</span>
</li>
<li>
<router-link :to="ownerLink('user', username)">{{username}}</router-link>
</li>
</ol>
</nav>
<div class="mb-8 flex justify-between">
<span class="text-3xl">{{username}}</span>
2019-07-09 09:21:37 +00:00
<createprojectbutton v-on:click="goToCreate($event)" />
</div>
<div class="flex justify-between">
<ul class="flex-grow tab">
<li
class="tab-element"
:class="[{ 'tab-element-selected': $route.name === 'user projects' || $route.name === 'user' }]"
>
2019-05-06 11:43:15 +00:00
<router-link :to="ownerProjectsLink('user', username)">
2019-07-09 09:21:37 +00:00
<i class="mr-1 mdi mdi-home" />
2019-05-06 11:43:15 +00:00
<span>Projects</span>
</router-link>
2018-12-09 13:21:20 +00:00
</li>
<li
class="tab-element"
:class="[{ 'tab-element-selected': $route.name === 'user direct runs' }]"
>
<router-link :to="userDirectRunsLink(username)">
2019-07-09 09:21:37 +00:00
<i class="mr-1 mdi mdi-run-fast" />
<span>Direct Runs</span>
2019-05-06 11:43:15 +00:00
</router-link>
2018-12-09 13:21:20 +00:00
</li>
<li
v-if="run && ($route.name === 'user direct run' || $route.name == 'user direct run task')"
>
2019-07-09 09:21:37 +00:00
<tabarrow />
2018-12-09 13:21:20 +00:00
</li>
<li
class="tab-element"
v-if="run && ($route.name === 'user direct run' || $route.name == 'user direct run task')"
:class="[{ 'tab-element-selected': $route.name === 'user direct run' }]"
2018-12-09 13:21:20 +00:00
>
<router-link :to="userDirectRunLink(username, $route.params.runid)">
<span>
2018-12-09 13:21:20 +00:00
Run
<strong>#{{run.counter}}</strong>
</span>
2018-12-09 13:21:20 +00:00
</router-link>
</li>
<li v-if="run && $route.name === 'user direct run task'">
2019-07-09 09:21:37 +00:00
<tabarrow />
2018-12-09 13:21:20 +00:00
</li>
<li
class="tab-element"
v-if="run && $route.name == 'user direct run task'"
:class="[{ 'tab-element-selected': $route.name === 'user direct run task' }]"
>
2018-12-09 13:21:20 +00:00
<router-link
:to="userDirectRunTaskLink(username, $route.params.runid, $route.params.taskid)"
2018-12-09 13:21:20 +00:00
>
<span>
2018-12-09 13:21:20 +00:00
Task
<strong>{{run.tasks[$route.params.taskid].name}}</strong>
</span>
2018-12-09 13:21:20 +00:00
</router-link>
</li>
<li
v-if="$route.name.endsWith('user project group settings')"
class="tab-element"
:class="[{ 'tab-element-selected': $route.name.endsWith('user project group settings') }]"
>
2019-05-14 13:47:35 +00:00
<router-link :to="projectGroupSettingsLink('user', username, [])">
2019-07-09 09:21:37 +00:00
<i class="mr-1 mdi mdi-settings" />
2019-05-14 13:47:35 +00:00
<span>Root Project Group Settings</span>
</router-link>
</li>
<li
v-if="$route.name.endsWith('user settings')"
class="tab-element"
:class="[{ 'tab-element-selected': $route.name.endsWith('user settings') }]"
>
2019-05-06 22:31:44 +00:00
<router-link :to="ownerSettingsLink('user', username)">
2019-07-09 09:21:37 +00:00
<i class="mr-1 mdi mdi-settings" />
2019-05-06 11:43:15 +00:00
<span>User Settings</span>
</router-link>
</li>
</ul>
<ul class="flex tab">
<li>
<div class="relative">
<div
class="flex -mt-3"
v-click-outside="() => dropdownActive = false"
@click="dropdownActive = !dropdownActive"
>
<button
class="relative flex items-center focus:outline-none bg-transparent hover:bg-gray-300 text-dark font-semibold hover:text-dark py-1 px-4 border border-gray-500 rounded"
>
2019-07-09 09:21:37 +00:00
<i class="mr-4 mdi mdi-settings" />
<i class="mdi mdi-chevron-down"></i>
</button>
</div>
<div
v-if="dropdownActive"
class="z-10 origin-top-right absolute right-0 mt-2 w-64 bg-white rounded-lg border shadow-md py-2"
>
<ul>
<li>
<router-link
class="block px-4 py-2 hover:bg-blue-500 hover:text-white"
:to="projectGroupSettingsLink('user', username, [])"
>
2019-07-09 09:21:37 +00:00
<i class="mr-1 mdi mdi-settings" />
<span>Root Project Group Settings</span>
</router-link>
</li>
</ul>
</div>
</div>
</li>
</ul>
2018-12-09 13:21:20 +00:00
</div>
<router-view class="mt-8"></router-view>
2018-12-09 13:21:20 +00:00
</div>
</template>
<script>
import * as vClickOutside from "v-click-outside-x";
2018-12-09 13:21:20 +00:00
import {
ownerLink,
ownerProjectsLink,
userDirectRunsLink,
userDirectRunLink,
userDirectRunTaskLink,
ownerSettingsLink,
projectGroupCreateProjectGroupLink,
2019-05-14 13:47:35 +00:00
projectGroupCreateProjectLink,
projectGroupSettingsLink
2018-12-09 13:21:20 +00:00
} from "@/util/link.js";
import { fetchRun } from "@/util/data.js";
import createprojectbutton from "@/components/createprojectbutton.vue";
2018-12-09 13:21:20 +00:00
import tabarrow from "@/components/tabarrow.vue";
export default {
name: "User",
components: { createprojectbutton, tabarrow },
directives: {
clickOutside: vClickOutside.directive
},
2018-12-09 13:21:20 +00:00
props: {
username: String
2018-12-09 13:21:20 +00:00
},
data() {
return {
fetchAbort: null,
dropdownActive: false,
2018-12-09 13:21:20 +00:00
run: null
};
},
2019-03-29 17:21:57 +00:00
watch: {
$route: async function(route) {
if (this.fetchAbort) {
this.fetchAbort.abort();
}
this.fetchAbort = new AbortController();
this.run = null;
2019-03-29 17:21:57 +00:00
if (route.params.runid) {
let { data, error, aborted } = await fetchRun(
route.params.runid,
this.fetchAbort.signal
);
if (aborted) {
return;
}
if (error) {
this.$store.dispatch("setError", error);
return;
}
this.run = data;
2019-03-29 17:21:57 +00:00
}
}
2018-12-09 13:21:20 +00:00
},
methods: {
ownerLink: ownerLink,
ownerProjectsLink: ownerProjectsLink,
userDirectRunsLink: userDirectRunsLink,
userDirectRunLink: userDirectRunLink,
userDirectRunTaskLink: userDirectRunTaskLink,
ownerSettingsLink: ownerSettingsLink,
projectGroupCreateProjectGroupLink: projectGroupCreateProjectGroupLink,
projectGroupCreateProjectLink: projectGroupCreateProjectLink,
2019-05-14 13:47:35 +00:00
projectGroupSettingsLink: projectGroupSettingsLink,
goToCreate(type) {
if (type == "project") {
2019-05-14 13:47:35 +00:00
this.$router.push(
projectGroupCreateProjectLink("user", this.username, [])
);
return;
}
this.$router.push(
2019-05-14 13:47:35 +00:00
projectGroupCreateProjectGroupLink("user", this.username, [])
);
}
2019-07-09 09:21:37 +00:00
},
created: async function() {
this.fetchAbort = new AbortController();
2019-07-09 09:21:37 +00:00
if (this.$route.params.runid) {
let { data, error, aborted } = await fetchRun(
this.$route.params.runid,
this.fetchAbort.signal
);
if (aborted) {
return;
}
2019-07-09 09:21:37 +00:00
if (error) {
this.$store.dispatch("setError", error);
return;
}
this.run = data;
}
},
beforeDestroy() {
if (this.fetchAbort) {
this.fetchAbort.abort();
}
2018-12-09 13:21:20 +00:00
}
};
</script>
<style scoped lang="scss">
</style>