group_item.vue 4.4 KB
Newer Older
A
Alfredo Sumaran 已提交
1
<script>
2 3
import eventHub from '../event_hub';

A
Alfredo Sumaran 已提交
4 5 6 7 8
export default {
  props: {
    group: {
      type: Object,
      required: true,
9
    },
10 11 12
    baseGroup: {
      type: Object,
      required: false,
A
Alfredo Sumaran 已提交
13
      default: () => ({}),
14
    },
A
Alfredo Sumaran 已提交
15 16 17 18 19
    collection: {
      type: Object,
      required: false,
      default: () => ({}),
    },
20 21
  },
  methods: {
A
Alfredo Sumaran 已提交
22
    onClickRowGroup(e) {
A
Alfredo Sumaran 已提交
23
      e.stopPropagation();
A
Alfredo Sumaran 已提交
24 25

      // Skip for buttons
A
Alfredo Sumaran 已提交
26
      if (!(e.target.tagName === 'A') && !(e.target.tagName === 'I' && e.target.parentElement.tagName === 'A')) {
A
Alfredo Sumaran 已提交
27 28 29 30 31
        if (this.group.hasSubgroups) {
          eventHub.$emit('toggleSubGroups', this.group);
        } else {
          window.location.href = this.group.webUrl;
        }
A
Alfredo Sumaran 已提交
32 33
      }
    },
A
Alfredo Sumaran 已提交
34 35 36
    onLeaveGroup(e) {
      e.preventDefault();

37
      // eslint-disable-next-line no-alert
A
Alfredo Sumaran 已提交
38 39 40 41 42
      if (confirm(`Are you sure you want to leave the "${this.group.fullName}" group?`)) {
        this.leaveGroup();
      }
    },
    leaveGroup() {
A
Alfredo Sumaran 已提交
43
      eventHub.$emit('leaveGroup', this.group, this.collection);
44
    },
A
Alfredo Sumaran 已提交
45 46
  },
  computed: {
47 48 49
    groupDomId() {
      return `group-${this.group.id}`;
    },
A
Alfredo Sumaran 已提交
50 51 52 53
    rowClass() {
      return {
        'group-row': true,
        'is-open': this.group.isOpen,
54
        'has-subgroups': this.group.hasSubgroups,
A
Alfredo Sumaran 已提交
55 56 57
        'no-description': !this.group.description,
      };
    },
A
Alfredo Sumaran 已提交
58 59 60 61 62 63 64 65
    visibilityIcon() {
      return {
        fa: true,
        'fa-globe': this.group.visibility === 'public',
        'fa-shield': this.group.visibility === 'internal',
        'fa-lock': this.group.visibility === 'private',
      };
    },
66 67 68 69 70
    fullPath() {
      let fullPath = '';

      if (this.group.isOrphan) {
        // check if current group is baseGroup
A
Alfredo Sumaran 已提交
71
        if (Object.keys(this.baseGroup).length > 0 && this.baseGroup !== this.group) {
72 73 74 75 76 77 78 79
          // Remove baseGroup prefix from our current group.fullName. e.g:
          // baseGroup.fullName: `level1`
          // group.fullName: `level1 / level2 / level3`
          // Result: `level2 / level3`
          const gfn = this.group.fullName;
          const bfn = this.baseGroup.fullName;
          const length = bfn.length;
          const start = gfn.indexOf(bfn);
80
          const extraPrefixChars = 3;
81

82
          fullPath = gfn.substr(start + length + extraPrefixChars);
83 84 85 86 87 88 89 90 91
        } else {
          fullPath = this.group.fullName;
        }
      } else {
        fullPath = this.group.name;
      }

      return fullPath;
    },
92 93 94
    hasGroups() {
      return Object.keys(this.group.subGroups).length > 0;
    },
95
  },
A
Alfredo Sumaran 已提交
96 97 98 99
};
</script>

<template>
100
  <li
A
Alfredo Sumaran 已提交
101
    @click.stop="onClickRowGroup"
102
    :id="groupDomId"
A
Alfredo Sumaran 已提交
103
    :class="rowClass"
104
    >
A
Alfredo Sumaran 已提交
105
    <div class="controls">
106
      <a
107
        v-if="group.canEdit"
108 109
        class="edit-group btn"
        :href="group.editPath">
A
Alfredo Sumaran 已提交
110 111
        <i aria-hidden="true" class="fa fa-cogs"></i>
      </a>
A
Alfredo Sumaran 已提交
112 113 114 115
      <a @click="onLeaveGroup"
        :href="group.leavePath"
        class="leave-group btn"
        title="Leave this group">
A
Alfredo Sumaran 已提交
116 117 118 119 120
        <i aria-hidden="true" class="fa fa-sign-out"></i>
      </a>
    </div>

    <div class="stats">
121
      <span class="number-projects">
A
Alfredo Sumaran 已提交
122 123 124
        <i aria-hidden="true" class="fa fa-bookmark"></i>
        {{group.numberProjects}}
      </span>
125
      <span class="number-users">
A
Alfredo Sumaran 已提交
126
        <i aria-hidden="true" class="fa fa-users"></i>
127
        {{group.numberUsers}}
A
Alfredo Sumaran 已提交
128
      </span>
129
      <span class="group-visibility">
A
Alfredo Sumaran 已提交
130
        <i aria-hidden="true" :class="visibilityIcon"></i>
A
Alfredo Sumaran 已提交
131 132 133 134
      </span>
    </div>

    <div class="folder-toggle-wrap">
135
      <span class="folder-caret" v-if="group.hasSubgroups">
A
Alfredo Sumaran 已提交
136
        <i
137
          v-if="group.isOpen"
A
Alfredo Sumaran 已提交
138 139
          class="fa fa-caret-down" />
        <i
140
          v-if="!group.isOpen"
A
Alfredo Sumaran 已提交
141 142 143 144 145
          class="fa fa-caret-right" />
      </span>

      <span class="folder-icon">
        <i
146
          v-if="group.isOpen"
A
Alfredo Sumaran 已提交
147
          class="fa fa-folder-open"
148
          aria-hidden="true"></i>
A
Alfredo Sumaran 已提交
149
        <i
150
          v-if="!group.isOpen"
151
          class="fa fa-folder"></i>
A
Alfredo Sumaran 已提交
152 153 154 155 156 157 158 159 160 161
      </span>
    </div>

    <div class="avatar-container s40">
      <a href="/h5bp">
        <img class="avatar s40 hidden-xs" src="http://localhost:3000/uploads/group/avatar/2/logo-extra-whitespace.png" alt="Logo extra whitespace">
      </a>
    </div>

    <div class="title">
162
      <a :href="group.webUrl">{{fullPath}}</a>
A
Alfredo Sumaran 已提交
163 164 165 166 167
    </div>

    <div class="description">
      {{group.description}}
    </div>
A
Alfredo Sumaran 已提交
168

169
    <group-folder v-if="group.isOpen && hasGroups" :groups="group.subGroups" :baseGroup="group" />
A
Alfredo Sumaran 已提交
170
  </li>
A
Alfredo Sumaran 已提交
171
</template>