group_item.vue 4.5 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
    >
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
    <div class="group-row-contents">
      <div class="controls">
        <a
          v-if="group.canEdit"
          class="edit-group btn"
          :href="group.editPath">
          <i aria-hidden="true" class="fa fa-cogs"></i>
        </a>
        <a @click="onLeaveGroup"
          :href="group.leavePath"
          class="leave-group btn"
          title="Leave this group">
          <i aria-hidden="true" class="fa fa-sign-out"></i>
        </a>
      </div>
A
Alfredo Sumaran 已提交
120

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

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

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

156 157 158 159 160
      <div class="avatar-container s40 hidden-xs">
        <a :href="group.webUrl">
          <img class="avatar s40" :src="group.avatarUrl" />
        </a>
      </div>
A
Alfredo Sumaran 已提交
161

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

166 167 168
      <div class="description">
        {{group.description}}
      </div>
A
Alfredo Sumaran 已提交
169
    </div>
170
    <group-folder v-if="group.isOpen && hasGroups" :groups="group.subGroups" :baseGroup="group" />
A
Alfredo Sumaran 已提交
171
  </li>
A
Alfredo Sumaran 已提交
172
</template>