1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
<script>
import { GlAlert, GlSkeletonLoader } from '@gitlab/ui';
import { __ } from '~/locale';
import GetJobs from './graphql/queries/get_jobs.query.graphql';
import JobsTable from './jobs_table.vue';
import JobsTableTabs from './jobs_table_tabs.vue';
export default {
i18n: {
errorMsg: __('There was an error fetching the jobs for your project.'),
},
components: {
GlAlert,
GlSkeletonLoader,
JobsTable,
JobsTableTabs,
},
inject: {
fullPath: {
default: '',
},
},
apollo: {
jobs: {
query: GetJobs,
variables() {
return {
fullPath: this.fullPath,
};
},
update({ project }) {
return project?.jobs;
},
error() {
this.hasError = true;
},
},
},
data() {
return {
jobs: null,
hasError: false,
isAlertDismissed: false,
};
},
computed: {
shouldShowAlert() {
return this.hasError && !this.isAlertDismissed;
},
},
methods: {
fetchJobsByStatus(scope) {
this.$apollo.queries.jobs.refetch({ statuses: scope });
},
},
};
</script>
<template>
<div>
<gl-alert
v-if="shouldShowAlert"
class="gl-mt-2"
variant="danger"
dismissible
@dismiss="isAlertDismissed = true"
>
{{ $options.i18n.errorMsg }}
</gl-alert>
<jobs-table-tabs @fetchJobsByStatus="fetchJobsByStatus" />
<div v-if="$apollo.loading" class="gl-mt-5">
<gl-skeleton-loader
preserve-aspect-ratio="none"
equal-width-lines
:lines="5"
:width="600"
:height="66"
/>
</div>
<jobs-table v-else :jobs="jobs.nodes" />
</div>
</template>
|