2017-05-06 00:15:04 -04:00
|
|
|
<script>
|
2017-12-11 07:28:11 -05:00
|
|
|
import { visitUrl } from '../../lib/utils/url_utility';
|
2017-11-29 07:19:32 -05:00
|
|
|
import tooltip from '../../vue_shared/directives/tooltip';
|
2017-08-30 01:52:08 -04:00
|
|
|
import identicon from '../../vue_shared/components/identicon.vue';
|
2017-05-08 16:22:26 -04:00
|
|
|
import eventHub from '../event_hub';
|
|
|
|
|
2017-10-04 10:10:24 -04:00
|
|
|
import itemCaret from './item_caret.vue';
|
|
|
|
import itemTypeIcon from './item_type_icon.vue';
|
|
|
|
import itemStats from './item_stats.vue';
|
|
|
|
import itemActions from './item_actions.vue';
|
|
|
|
|
2017-05-06 00:15:04 -04:00
|
|
|
export default {
|
2017-11-29 07:19:32 -05:00
|
|
|
directives: {
|
|
|
|
tooltip,
|
|
|
|
},
|
2017-08-01 05:08:40 -04:00
|
|
|
components: {
|
2017-08-30 01:52:08 -04:00
|
|
|
identicon,
|
2017-10-04 10:10:24 -04:00
|
|
|
itemCaret,
|
|
|
|
itemTypeIcon,
|
|
|
|
itemStats,
|
|
|
|
itemActions,
|
2017-08-01 05:08:40 -04:00
|
|
|
},
|
2017-05-06 00:15:04 -04:00
|
|
|
props: {
|
2017-10-04 10:10:24 -04:00
|
|
|
parentGroup: {
|
2017-05-24 22:04:31 -04:00
|
|
|
type: Object,
|
|
|
|
required: false,
|
2017-05-31 16:41:55 -04:00
|
|
|
default: () => ({}),
|
2017-05-24 22:04:31 -04:00
|
|
|
},
|
2017-10-04 10:10:24 -04:00
|
|
|
group: {
|
2017-06-06 10:01:42 -04:00
|
|
|
type: Object,
|
2017-10-04 10:10:24 -04:00
|
|
|
required: true,
|
2017-05-30 05:25:53 -04:00
|
|
|
},
|
2017-05-16 10:29:38 -04:00
|
|
|
},
|
|
|
|
computed: {
|
2017-05-25 20:49:46 -04:00
|
|
|
groupDomId() {
|
|
|
|
return `group-${this.group.id}`;
|
|
|
|
},
|
2017-05-16 10:29:38 -04:00
|
|
|
rowClass() {
|
|
|
|
return {
|
|
|
|
'is-open': this.group.isOpen,
|
2017-10-04 10:10:24 -04:00
|
|
|
'has-children': this.hasChildren,
|
|
|
|
'has-description': this.group.description,
|
|
|
|
'being-removed': this.group.isBeingRemoved,
|
2017-05-16 10:29:38 -04:00
|
|
|
};
|
|
|
|
},
|
2017-10-04 10:10:24 -04:00
|
|
|
hasChildren() {
|
|
|
|
return this.group.childrenCount > 0;
|
2017-05-30 18:22:30 -04:00
|
|
|
},
|
2017-10-04 10:10:24 -04:00
|
|
|
hasAvatar() {
|
|
|
|
return this.group.avatarUrl !== null;
|
|
|
|
},
|
|
|
|
isGroup() {
|
|
|
|
return this.group.type === 'group';
|
|
|
|
},
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
onClickRowGroup(e) {
|
|
|
|
const NO_EXPAND_CLS = 'no-expand';
|
|
|
|
if (!(e.target.classList.contains(NO_EXPAND_CLS) ||
|
|
|
|
e.target.parentElement.classList.contains(NO_EXPAND_CLS))) {
|
|
|
|
if (this.hasChildren) {
|
|
|
|
eventHub.$emit('toggleChildren', this.group);
|
2017-05-24 22:04:31 -04:00
|
|
|
} else {
|
2017-12-11 07:28:11 -05:00
|
|
|
visitUrl(this.group.relativePath);
|
2017-05-24 22:04:31 -04:00
|
|
|
}
|
|
|
|
}
|
2017-07-31 06:34:25 -04:00
|
|
|
},
|
2017-05-08 16:22:26 -04:00
|
|
|
},
|
2017-05-06 00:15:04 -04:00
|
|
|
};
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
2017-05-12 04:36:08 -04:00
|
|
|
<li
|
2017-05-30 18:01:48 -04:00
|
|
|
@click.stop="onClickRowGroup"
|
2017-05-25 20:49:46 -04:00
|
|
|
:id="groupDomId"
|
2017-05-16 10:29:38 -04:00
|
|
|
:class="rowClass"
|
2017-10-04 10:10:24 -04:00
|
|
|
class="group-row"
|
2017-05-12 04:36:08 -04:00
|
|
|
>
|
2017-06-07 04:45:48 -04:00
|
|
|
<div
|
|
|
|
class="group-row-contents">
|
2017-10-04 10:10:24 -04:00
|
|
|
<item-actions
|
|
|
|
v-if="isGroup"
|
|
|
|
:group="group"
|
|
|
|
:parent-group="parentGroup"
|
|
|
|
/>
|
|
|
|
<item-stats
|
|
|
|
:item="group"
|
|
|
|
/>
|
2017-06-07 04:45:48 -04:00
|
|
|
<div
|
|
|
|
class="folder-toggle-wrap">
|
2017-10-04 10:10:24 -04:00
|
|
|
<item-caret
|
|
|
|
:is-group-open="group.isOpen"
|
|
|
|
/>
|
|
|
|
<item-type-icon
|
|
|
|
:item-type="group.type"
|
|
|
|
:is-group-open="group.isOpen"
|
|
|
|
/>
|
2017-06-06 23:30:51 -04:00
|
|
|
</div>
|
2017-06-07 04:45:48 -04:00
|
|
|
<div
|
2017-10-04 10:10:24 -04:00
|
|
|
class="avatar-container s40 hidden-xs"
|
|
|
|
:class="{ 'content-loading': group.isChildrenLoading }"
|
|
|
|
>
|
2017-06-07 04:45:48 -04:00
|
|
|
<a
|
2017-10-04 10:10:24 -04:00
|
|
|
:href="group.relativePath"
|
|
|
|
class="no-expand"
|
|
|
|
>
|
2017-06-07 04:45:48 -04:00
|
|
|
<img
|
2017-07-31 06:34:25 -04:00
|
|
|
v-if="hasAvatar"
|
2017-06-07 04:45:48 -04:00
|
|
|
class="avatar s40"
|
|
|
|
:src="group.avatarUrl"
|
|
|
|
/>
|
2017-08-30 01:52:08 -04:00
|
|
|
<identicon
|
2017-07-31 06:34:25 -04:00
|
|
|
v-else
|
2017-08-02 05:15:00 -04:00
|
|
|
:entity-id=group.id
|
|
|
|
:entity-name="group.name"
|
2017-07-31 06:34:25 -04:00
|
|
|
/>
|
2017-06-06 23:30:51 -04:00
|
|
|
</a>
|
|
|
|
</div>
|
2017-06-07 04:45:48 -04:00
|
|
|
<div
|
2017-11-29 07:19:32 -05:00
|
|
|
class="title namespace-title">
|
2017-06-07 04:45:48 -04:00
|
|
|
<a
|
2017-11-29 07:19:32 -05:00
|
|
|
v-tooltip
|
2017-10-04 10:10:24 -04:00
|
|
|
:href="group.relativePath"
|
2017-11-29 07:19:32 -05:00
|
|
|
:title="group.fullName"
|
|
|
|
class="no-expand"
|
|
|
|
data-placement="top"
|
2017-12-07 04:11:41 -05:00
|
|
|
>{{
|
|
|
|
// ending bracket must be by closing tag to prevent
|
|
|
|
// link hover text-decoration from over-extending
|
|
|
|
group.name
|
|
|
|
}}</a>
|
2017-10-04 10:10:24 -04:00
|
|
|
<span
|
|
|
|
v-if="group.permission"
|
2017-12-07 04:11:41 -05:00
|
|
|
class="user-access-role"
|
2017-10-04 10:10:24 -04:00
|
|
|
>
|
2017-12-07 04:11:41 -05:00
|
|
|
{{group.permission}}
|
2017-10-04 10:10:24 -04:00
|
|
|
</span>
|
2017-06-06 23:30:51 -04:00
|
|
|
</div>
|
2017-06-07 04:45:48 -04:00
|
|
|
<div
|
2017-12-07 04:11:41 -05:00
|
|
|
v-if="group.description"
|
|
|
|
class="description">
|
|
|
|
{{group.description}}
|
|
|
|
</div>
|
2017-05-16 10:29:38 -04:00
|
|
|
</div>
|
2017-06-07 04:45:48 -04:00
|
|
|
<group-folder
|
2017-10-04 10:10:24 -04:00
|
|
|
v-if="group.isOpen && hasChildren"
|
|
|
|
:parent-group="group"
|
|
|
|
:groups="group.children"
|
2017-06-07 04:45:48 -04:00
|
|
|
/>
|
2017-05-09 19:10:19 -04:00
|
|
|
</li>
|
2017-05-06 00:15:04 -04:00
|
|
|
</template>
|