summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/vue_pipelines_index/status.js
blob: 8d9f83ac1130fb7b1b7928447da5bfc5440c87cb (plain)
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
/* global Vue, gl */
/* eslint-disable no-param-reassign */

import canceledSvg from 'icons/_icon_status_canceled.svg';
import createdSvg from 'icons/_icon_status_created.svg';
import failedSvg from 'icons/_icon_status_failed.svg';
import manualSvg from 'icons/_icon_status_manual.svg';
import pendingSvg from 'icons/_icon_status_pending.svg';
import runningSvg from 'icons/_icon_status_running.svg';
import skippedSvg from 'icons/_icon_status_skipped.svg';
import successSvg from 'icons/_icon_status_success.svg';
import warningSvg from 'icons/_icon_status_warning.svg';

((gl) => {
  gl.VueStatusScope = Vue.extend({
    props: [
      'pipeline',
    ],

    data() {
      const svgsDictionary = {
        icon_status_canceled: canceledSvg,
        icon_status_created: createdSvg,
        icon_status_failed: failedSvg,
        icon_status_manual: manualSvg,
        icon_status_pending: pendingSvg,
        icon_status_running: runningSvg,
        icon_status_skipped: skippedSvg,
        icon_status_success: successSvg,
        icon_status_warning: warningSvg,
      };

      return {
        svg: svgsDictionary[this.pipeline.details.status.icon],
      };
    },

    computed: {
      cssClasses() {
        const cssObject = { 'ci-status': true };
        cssObject[`ci-${this.pipeline.details.status.group}`] = true;
        return cssObject;
      },

      detailsPath() {
        const { status } = this.pipeline.details;
        return status.has_details ? status.details_path : false;
      },

      content() {
        return `${this.svg} ${this.pipeline.details.status.text}`;
      },
    },
    template: `
      <td class="commit-link">
        <a
          :class="cssClasses"
          :href="detailsPath"
          v-html="content">
        </a>
      </td>
    `,
  });
})(window.gl || (window.gl = {}));