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.
307 lines
7.9 KiB
Vue
307 lines
7.9 KiB
Vue
<template>
|
|
<div>
|
|
<projbreadcrumbs
|
|
:ownertype="ownertype"
|
|
:ownername="ownername"
|
|
:projectref="projectref"
|
|
/>
|
|
|
|
<div class="mb-8">
|
|
<span class="text-3xl">{{ projectName() }}</span>
|
|
</div>
|
|
|
|
<div class="flex justify-between">
|
|
<ul class="flex-grow tab">
|
|
<li class="tab-element-disabled">
|
|
<i class="mr-1 mdi mdi-run-fast" />
|
|
<span>Runs</span>
|
|
</li>
|
|
<li>
|
|
<tabarrow />
|
|
</li>
|
|
<li
|
|
class="tab-element"
|
|
:class="[
|
|
{
|
|
'tab-element-selected':
|
|
$route.name.match('project runs') ||
|
|
$route.name.endsWith('project'),
|
|
},
|
|
]"
|
|
>
|
|
<router-link :to="projectRunsLink(ownertype, ownername, projectref)">
|
|
<i class="mr-1 mdi mdi-asterisk" />
|
|
<span>All</span>
|
|
</router-link>
|
|
</li>
|
|
<li
|
|
class="tab-element"
|
|
:class="[
|
|
{
|
|
'tab-element-selected': $route.name.match(
|
|
'project branches runs'
|
|
),
|
|
},
|
|
]"
|
|
>
|
|
<router-link
|
|
:to="projectBranchesRunsLink(ownertype, ownername, projectref)"
|
|
>
|
|
<i class="mr-1 mdi mdi-source-branch" />
|
|
<span>Branches</span>
|
|
</router-link>
|
|
</li>
|
|
<li
|
|
class="tab-element"
|
|
:class="[
|
|
{ 'tab-element-selected': $route.name.match('project tags runs') },
|
|
]"
|
|
>
|
|
<router-link
|
|
:to="projectTagsRunsLink(ownertype, ownername, projectref)"
|
|
>
|
|
<i class="mr-1 mdi mdi-tag" />
|
|
<span>Tags</span>
|
|
</router-link>
|
|
</li>
|
|
<li
|
|
class="tab-element"
|
|
:class="[
|
|
{
|
|
'tab-element-selected': $route.name.match(
|
|
'project pull requests runs'
|
|
),
|
|
},
|
|
]"
|
|
>
|
|
<router-link
|
|
:to="projectPRsRunsLink(ownertype, ownername, projectref)"
|
|
>
|
|
<i class="mr-1 mdi mdi-source-pull" />
|
|
<span>Pull Requests</span>
|
|
</router-link>
|
|
</li>
|
|
<li
|
|
v-if="
|
|
run &&
|
|
($route.name.endsWith('project run') ||
|
|
$route.name.endsWith('project run task'))
|
|
"
|
|
>
|
|
<tabarrow />
|
|
</li>
|
|
<li
|
|
class="tab-element"
|
|
v-if="
|
|
run &&
|
|
($route.name.endsWith('project run') ||
|
|
$route.name.endsWith('project run task'))
|
|
"
|
|
:class="[
|
|
{ 'tab-element-selected': $route.name.endsWith('project run') },
|
|
]"
|
|
>
|
|
<router-link
|
|
:to="
|
|
projectRunLink(
|
|
ownertype,
|
|
ownername,
|
|
projectref,
|
|
$route.params.runid
|
|
)
|
|
"
|
|
>
|
|
<p>
|
|
Run
|
|
<strong>#{{ run.counter }}</strong>
|
|
</p>
|
|
</router-link>
|
|
</li>
|
|
<li v-if="run && $route.name.endsWith('project run task')">
|
|
<tabarrow />
|
|
</li>
|
|
<li
|
|
class="tab-element"
|
|
v-if="run && $route.name.endsWith('project run task')"
|
|
:class="[
|
|
{
|
|
'tab-element-selected': $route.name.endsWith('project run task'),
|
|
},
|
|
]"
|
|
>
|
|
<router-link
|
|
:to="
|
|
projectRunTaskLink(
|
|
ownertype,
|
|
ownername,
|
|
projectref,
|
|
$route.params.runid,
|
|
$route.params.taskid
|
|
)
|
|
"
|
|
>
|
|
<p>
|
|
Task
|
|
<strong>{{ run.tasks[$route.params.taskid].name }}</strong>
|
|
</p>
|
|
</router-link>
|
|
</li>
|
|
<li
|
|
v-if="$route.name.endsWith('project settings')"
|
|
class="tab-element"
|
|
:class="[
|
|
{
|
|
'tab-element-selected': $route.name.endsWith('project settings'),
|
|
},
|
|
]"
|
|
>
|
|
<router-link
|
|
:to="projectSettingsLink(ownertype, ownername, projectref)"
|
|
>
|
|
<i class="mr-1 mdi mdi-settings" />
|
|
<span>Project 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"
|
|
>
|
|
<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="projectSettingsLink(ownertype, ownername, projectref)"
|
|
>
|
|
<i class="mr-1 mdi mdi-settings" />
|
|
<span>Project Settings</span>
|
|
</router-link>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<router-view class="mt-8"></router-view>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import * as vClickOutside from 'v-click-outside-x';
|
|
|
|
import {
|
|
projectLink,
|
|
projectRunsLink,
|
|
projectBranchesRunsLink,
|
|
projectTagsRunsLink,
|
|
projectPRsRunsLink,
|
|
projectRunLink,
|
|
projectRunTaskLink,
|
|
projectSettingsLink,
|
|
} from '@/util/link.js';
|
|
|
|
import { fetchRun } from '@/util/data.js';
|
|
|
|
import projbreadcrumbs from '@/components/projbreadcrumbs.vue';
|
|
import tabarrow from '@/components/tabarrow.vue';
|
|
|
|
export default {
|
|
name: 'Project',
|
|
components: { projbreadcrumbs, tabarrow },
|
|
directives: {
|
|
clickOutside: vClickOutside.directive,
|
|
},
|
|
props: {
|
|
ownertype: String,
|
|
ownername: String,
|
|
projectref: Array,
|
|
},
|
|
data() {
|
|
return {
|
|
fetchAbort: null,
|
|
|
|
dropdownActive: false,
|
|
run: null,
|
|
};
|
|
},
|
|
watch: {
|
|
$route: async function (route) {
|
|
if (this.fetchAbort) {
|
|
this.fetchAbort.abort();
|
|
}
|
|
this.fetchAbort = new AbortController();
|
|
|
|
this.run = null;
|
|
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;
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
projectLink: projectLink,
|
|
projectRunsLink: projectRunsLink,
|
|
projectBranchesRunsLink: projectBranchesRunsLink,
|
|
projectTagsRunsLink: projectTagsRunsLink,
|
|
projectPRsRunsLink: projectPRsRunsLink,
|
|
projectRunLink: projectRunLink,
|
|
projectRunTaskLink: projectRunTaskLink,
|
|
projectSettingsLink: projectSettingsLink,
|
|
projectName() {
|
|
return this.projectref[this.projectref.length - 1];
|
|
},
|
|
},
|
|
created: async function () {
|
|
this.fetchAbort = new AbortController();
|
|
|
|
if (this.$route.params.runid) {
|
|
let { data, error, aborted } = await fetchRun(
|
|
this.$route.params.runid,
|
|
this.fetchAbort.signal
|
|
);
|
|
if (aborted) {
|
|
return;
|
|
}
|
|
if (error) {
|
|
this.$store.dispatch('setError', error);
|
|
return;
|
|
}
|
|
this.run = data;
|
|
}
|
|
},
|
|
beforeDestroy() {
|
|
if (this.fetchAbort) {
|
|
this.fetchAbort.abort();
|
|
}
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss"></style>
|