sidebar_details_block.vue 4.38 KB
Newer Older
1 2 3 4 5 6 7 8
<script>
  import detailRow from './sidebar_detail_row.vue';
  import loadingIcon from '../../vue_shared/components/loading_icon.vue';
  import timeagoMixin from '../../vue_shared/mixins/timeago';
  import { timeIntervalInWords } from '../../lib/utils/datetime_utility';

  export default {
    name: 'SidebarDetailsBlock',
Filipa Lacerda's avatar
Filipa Lacerda committed
9 10 11 12 13 14 15
    components: {
      detailRow,
      loadingIcon,
    },
    mixins: [
      timeagoMixin,
    ],
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
    props: {
      job: {
        type: Object,
        required: true,
      },
      isLoading: {
        type: Boolean,
        required: true,
      },
    },
    computed: {
      shouldRenderContent() {
        return !this.isLoading && Object.keys(this.job).length > 0;
      },
      coverage() {
        return `${this.job.coverage}%`;
      },
      duration() {
        return timeIntervalInWords(this.job.duration);
      },
      queued() {
        return timeIntervalInWords(this.job.queued);
      },
      runnerId() {
        return `#${this.job.runner.id}`;
      },
42 43 44 45 46 47 48 49 50
      timeout() {
        let t = `${this.job.timeout.value}`;

        if (this.job.timeout.source != null) {
          t += ` (from ${this.job.timeout.source})`;
        }

        return t;
      },
51 52 53 54 55 56 57 58 59 60 61
      renderBlock() {
        return this.job.merge_request ||
          this.job.duration ||
          this.job.finished_data ||
          this.job.erased_at ||
          this.job.queued ||
          this.job.runner ||
          this.job.coverage ||
          this.job.tags.length ||
          this.job.cancel_path;
      },
62 63 64 65 66 67 68 69
    },
  };
</script>
<template>
  <div>
    <template v-if="shouldRenderContent">
      <div
        class="block retry-link"
Filipa Lacerda's avatar
Filipa Lacerda committed
70 71
        v-if="job.retry_path || job.new_issue_path"
      >
72 73 74
        <a
          v-if="job.new_issue_path"
          class="js-new-issue btn btn-new btn-inverted"
Filipa Lacerda's avatar
Filipa Lacerda committed
75 76
          :href="job.new_issue_path"
        >
77 78 79 80 81 82 83
          New issue
        </a>
        <a
          v-if="job.retry_path"
          class="js-retry-job btn btn-inverted-secondary"
          :href="job.retry_path"
          data-method="post"
Filipa Lacerda's avatar
Filipa Lacerda committed
84 85
          rel="nofollow"
        >
86 87 88
          Retry
        </a>
      </div>
89
      <div :class="{block : renderBlock }">
90 91
        <p
          class="build-detail-row js-job-mr"
Filipa Lacerda's avatar
Filipa Lacerda committed
92 93 94
          v-if="job.merge_request"
        >
          <span class="build-light-text">
95 96 97
            Merge Request:
          </span>
          <a :href="job.merge_request.path">
Filipa Lacerda's avatar
Filipa Lacerda committed
98
            !{{ job.merge_request.iid }}
99 100 101 102 103 104 105 106
          </a>
        </p>

        <detail-row
          class="js-job-duration"
          v-if="job.duration"
          title="Duration"
          :value="duration"
Filipa Lacerda's avatar
Filipa Lacerda committed
107
        />
108 109 110 111 112
        <detail-row
          class="js-job-finished"
          v-if="job.finished_at"
          title="Finished"
          :value="timeFormated(job.finished_at)"
Filipa Lacerda's avatar
Filipa Lacerda committed
113
        />
114 115 116 117 118
        <detail-row
          class="js-job-erased"
          v-if="job.erased_at"
          title="Erased"
          :value="timeFormated(job.erased_at)"
Filipa Lacerda's avatar
Filipa Lacerda committed
119
        />
120 121 122 123 124
        <detail-row
          class="js-job-queued"
          v-if="job.queued"
          title="Queued"
          :value="queued"
Filipa Lacerda's avatar
Filipa Lacerda committed
125
        />
126 127 128 129
        <detail-row
          class="js-job-timeout"
          v-if="job.timeout"
          title="Timeout"
130
          help-url="/help/ci/runners/README.html#setting-maximum-job-timeout-for-a-runner"
131 132
          :value="timeout"
        />
133 134 135 136 137
        <detail-row
          class="js-job-runner"
          v-if="job.runner"
          title="Runner"
          :value="runnerId"
Filipa Lacerda's avatar
Filipa Lacerda committed
138
        />
139 140 141 142 143
        <detail-row
          class="js-job-coverage"
          v-if="job.coverage"
          title="Coverage"
          :value="coverage"
Filipa Lacerda's avatar
Filipa Lacerda committed
144
        />
145 146
        <p
          class="build-detail-row js-job-tags"
Filipa Lacerda's avatar
Filipa Lacerda committed
147 148 149
          v-if="job.tags.length"
        >
          <span class="build-light-text">
150 151 152
            Tags:
          </span>
          <span
Filipa Lacerda's avatar
Filipa Lacerda committed
153 154
            v-for="(tag, i) in job.tags"
            :key="i"
155
            class="label label-primary">
Filipa Lacerda's avatar
Filipa Lacerda committed
156
            {{ tag }}
157 158 159 160 161 162 163 164 165 166 167
          </span>
        </p>

        <div
          v-if="job.cancel_path"
          class="btn-group prepend-top-5"
          role="group">
          <a
            class="js-cancel-job btn btn-sm btn-default"
            :href="job.cancel_path"
            data-method="post"
Filipa Lacerda's avatar
Filipa Lacerda committed
168 169
            rel="nofollow"
          >
170 171 172 173 174 175 176 177 178
            Cancel
          </a>
        </div>
      </div>
    </template>
    <loading-icon
      class="prepend-top-10"
      v-if="isLoading"
      size="2"
Filipa Lacerda's avatar
Filipa Lacerda committed
179
    />
180 181
  </div>
</template>