summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Sumaran <alfredo@gitlab.com>2017-05-09 18:10:19 -0500
committerAlfredo Sumaran <alfredo@gitlab.com>2017-05-09 18:10:19 -0500
commit4c3753387b9bb46d0d257c90720c6e27a258c37a (patch)
treeb77efef5e195d3dee204c11b2205dda0112f4782
parent4b488d72a263b56b9701dde818ca6b77b038ca89 (diff)
downloadgitlab-ce-4c3753387b9bb46d0d257c90720c6e27a258c37a.tar.gz
Set tree structure for groups
-rw-r--r--app/assets/javascripts/groups/components/group_folder.vue18
-rw-r--r--app/assets/javascripts/groups/components/group_item.vue43
-rw-r--r--app/assets/javascripts/groups/components/groups.vue19
-rw-r--r--app/assets/javascripts/groups/index.js9
4 files changed, 50 insertions, 39 deletions
diff --git a/app/assets/javascripts/groups/components/group_folder.vue b/app/assets/javascripts/groups/components/group_folder.vue
new file mode 100644
index 00000000000..5485da58ec5
--- /dev/null
+++ b/app/assets/javascripts/groups/components/group_folder.vue
@@ -0,0 +1,18 @@
+<script>
+import eventHub from '../event_hub';
+
+export default {
+ props: {
+ groups: {
+ type: Array,
+ required: true,
+ },
+ },
+};
+</script>
+
+<template>
+ <ul class="list-group">
+ <group-item v-for="group in groups" :group="group" />
+ </ul>
+</template>
diff --git a/app/assets/javascripts/groups/components/group_item.vue b/app/assets/javascripts/groups/components/group_item.vue
index 98f1d516cb2..627eae1cd0d 100644
--- a/app/assets/javascripts/groups/components/group_item.vue
+++ b/app/assets/javascripts/groups/components/group_item.vue
@@ -10,6 +10,10 @@ export default {
},
methods: {
toggleSubGroups() {
+ if (this.group.subGroups && !this.group.subGroups.length) {
+ return;
+ }
+
eventHub.$emit('toggleSubGroups', this.group);
},
},
@@ -17,26 +21,21 @@ export default {
</script>
<template>
- <tr @click="toggleSubGroups">
- <template >
- <td>
- <span>
- <i
- v-show="group.isOpen"
- class="fa fa-caret-down"
- aria-hidden="true" />
- <i
- v-show="!group.isOpen"
- class="fa fa-caret-right"
- aria-hidden="true"/>
- </span>
- </td>
- <td>
- <div>
- <a :href="group.web_url">{{group.full_name}}</a>
- </div>
- <div>{{group.description}}</div>
- </td>
- </template>
- </tr>
+ <li @click="toggleSubGroups" class="list-group-item">
+ <span v-show="group.subGroups && group.subGroups.length">
+ <i
+ v-show="group.isOpen"
+ class="fa fa-caret-down"
+ aria-hidden="true" />
+ <i
+ v-show="!group.isOpen"
+ class="fa fa-caret-right"
+ aria-hidden="true"/>
+ </span>
+
+ <p><a :href="group.web_url">{{group.full_name}}</a></p>
+ <p>{{group.description}}</p>
+
+ <group-folder v-if="group.subGroups && group.isOpen" :groups="group.subGroups" />
+ </li>
</template>
diff --git a/app/assets/javascripts/groups/components/groups.vue b/app/assets/javascripts/groups/components/groups.vue
index 26ed0990ef5..797fca9bd49 100644
--- a/app/assets/javascripts/groups/components/groups.vue
+++ b/app/assets/javascripts/groups/components/groups.vue
@@ -1,14 +1,9 @@
<script>
import GroupsStore from '../stores/groups_store';
import GroupsService from '../services/groups_service';
-import GroupItem from '../components/group_item.vue';
import eventHub from '../event_hub';
export default {
- components: {
- 'group-item': GroupItem,
- },
-
data() {
const store = new GroupsStore();
@@ -39,19 +34,15 @@ export default {
},
toggleSubGroups(group) {
GroupsStore.toggleSubGroups(group);
+
+ this.fetchGroups();
},
},
};
</script>
<template>
- <table class="table table-bordered">
- <template v-for="group in state.groups">
- <tr is="group-item" :group="group" />
- <tr v-if="group.isOpen">
- <td>sub groups for {{group.name}}</td>
- <td></td>
- </tr>
- </template>
- </table>
+ <div>
+ <group-folder :groups="state.groups" />
+ </div>
</template>
diff --git a/app/assets/javascripts/groups/index.js b/app/assets/javascripts/groups/index.js
index 81385dfd981..8a7c01161a1 100644
--- a/app/assets/javascripts/groups/index.js
+++ b/app/assets/javascripts/groups/index.js
@@ -2,15 +2,18 @@
import Vue from 'vue';
import GroupsComponent from './components/groups.vue';
+import GroupFolder from './components/group_folder.vue';
+import GroupItem from './components/group_item.vue';
$(() => {
const appEl = document.querySelector('#dashboard-group-app');
+ Vue.component('groups-component', GroupsComponent);
+ Vue.component('group-folder', GroupFolder);
+ Vue.component('group-item', GroupItem);
+
const GroupsApp = new Vue({
el: appEl,
- components: {
- 'groups-component': GroupsComponent,
- },
render: createElement => createElement('groups-component'),
});
});