summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/merge_request_widget/approvals/components/approvals_footer.js.es6
blob: dfa9c62e3440d9c2c9835a9248b79460082aee77 (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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/* global Vue */
//= require ../approvals_store
//= require vue_common_component/link_to_member_avatar

(() => {
  Vue.component('approvals-footer', {
    name: 'approvals-footer',
    props: {
      approvedBy: {
        type: Array,
        required: false,
      },
      approvalsLeft: {
        type: Number,
        required: false,
      },
      userCanApprove: {
        type: Boolean,
        required: false,
      },
      userHasApproved: {
        type: Boolean,
        required: false,
      },
      suggestedApprovers: {
        type: Array,
        required: false,
      },
      pendingAvatarSvg: {
        type: String,
        required: true,
      },
      checkmarkSvg: {
        type: String,
        required: true,
      },
    },
    data() {
      return {
        unapproving: false,
      };
    },
    computed: {
      showUnapproveButton() {
        return this.userHasApproved && !this.userCanApprove;
      },
    },
    methods: {
      unapproveMergeRequest() {
        this.unapproving = true;
        gl.ApprovalsStore.unapprove().then(() => {
          this.unapproving = false;
        });
      },
    },
    beforeCreate() {
      gl.ApprovalsStore.initStoreOnce();
    },
    template: `
      <div class='mr-widget-footer approved-by-users approvals-footer clearfix'>
        <span class='approvers-prefix'> Approved by </span>
        <span v-for='approver in approvedBy'>
          <link-to-member-avatar
            extra-link-class='approver-avatar'
            :avatar-url='approver.user.avatar_url'
            :display-name='approver.user.name'
            :profile-url='approver.user.web_url'
            :avatar-html='checkmarkSvg'
            :show-tooltip='true'>
          </link-to-member-avatar>
        </span>
        <span v-for='n in approvalsLeft'>
          <link-to-member-avatar
            :clickable='false'
            :avatar-html='pendingAvatarSvg'
            :show-tooltip='false'
            extra-link-class='hide-asset'>
          </link-to-member-avatar>
        </span>
        <span class='unapprove-btn-wrap' v-if='showUnapproveButton'>
          <button
            :disabled='unapproving'
            @click='unapproveMergeRequest'
            class='btn btn-link unapprove-btn'>
            <i class='fa fa-close'></i>
            Remove your approval</span>
          </button>
        </span>
      </div>
    `,
  });
})();