group_item.vue 4.2 KB
Newer Older
A
Alfredo Sumaran 已提交
1
<script>
2 3
/* eslint-disable no-alert */

4 5
import eventHub from '../event_hub';

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

      // Skip for buttons
A
Alfredo Sumaran 已提交
22
      if (!(e.target.tagName === 'A') && !(e.target.tagName === 'I' && e.target.parentElement.tagName === 'A')) {
A
Alfredo Sumaran 已提交
23 24 25 26 27
        if (this.group.hasSubgroups) {
          eventHub.$emit('toggleSubGroups', this.group);
        } else {
          window.location.href = this.group.webUrl;
        }
A
Alfredo Sumaran 已提交
28 29
      }

A
Alfredo Sumaran 已提交
30
      return false;
A
Alfredo Sumaran 已提交
31
    },
A
Alfredo Sumaran 已提交
32 33 34 35 36 37
    onLeaveGroup(e) {
      e.preventDefault();

      if (confirm(`Are you sure you want to leave the "${this.group.fullName}" group?`)) {
        this.leaveGroup();
      }
A
Alfredo Sumaran 已提交
38 39

      return false;
A
Alfredo Sumaran 已提交
40 41 42
    },
    leaveGroup() {
      eventHub.$emit('leaveGroup', this.group.leavePath);
43
    },
A
Alfredo Sumaran 已提交
44 45
  },
  computed: {
46 47 48
    groupDomId() {
      return `group-${this.group.id}`;
    },
A
Alfredo Sumaran 已提交
49 50 51 52
    rowClass() {
      return {
        'group-row': true,
        'is-open': this.group.isOpen,
53
        'has-subgroups': this.group.hasSubgroups,
A
Alfredo Sumaran 已提交
54 55 56
        'no-description': !this.group.description,
      };
    },
A
Alfredo Sumaran 已提交
57 58 59 60 61 62 63 64
    visibilityIcon() {
      return {
        fa: true,
        'fa-globe': this.group.visibility === 'public',
        'fa-shield': this.group.visibility === 'internal',
        'fa-lock': this.group.visibility === 'private',
      };
    },
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
    fullPath() {
      let fullPath = '';

      if (this.group.isOrphan) {
        // check if current group is baseGroup
        if (this.baseGroup) {
          // 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
          fullPath = gfn.substr(start + length + 3);
81 82 83 84 85 86 87 88 89
        } else {
          fullPath = this.group.fullName;
        }
      } else {
        fullPath = this.group.name;
      }

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

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

    <div class="stats">
119
      <span class="number-projects">
A
Alfredo Sumaran 已提交
120 121 122
        <i aria-hidden="true" class="fa fa-bookmark"></i>
        {{group.numberProjects}}
      </span>
123
      <span class="number-users">
A
Alfredo Sumaran 已提交
124
        <i aria-hidden="true" class="fa fa-users"></i>
125
        {{group.numberUsers}}
A
Alfredo Sumaran 已提交
126
      </span>
127
      <span class="group-visibility">
A
Alfredo Sumaran 已提交
128
        <i aria-hidden="true" :class="visibilityIcon"></i>
A
Alfredo Sumaran 已提交
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
      </span>
    </div>

    <div class="folder-toggle-wrap">
      <span class="folder-caret">
        <i
          v-show="group.isOpen"
          class="fa fa-caret-down" />
        <i
          v-show="!group.isOpen"
          class="fa fa-caret-right" />
      </span>

      <span class="folder-icon">
        <i
          v-show="group.isOpen"
          class="fa fa-folder-open"
          aria-hidden="true" />
        <i
          v-show="!group.isOpen"
          class="fa fa-folder" />
      </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">
160
      <a :href="group.webUrl">{{fullPath}}</a>
A
Alfredo Sumaran 已提交
161 162 163 164 165
    </div>

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

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