diff options
author | Alfredo Sumaran <alfredo@gitlab.com> | 2017-05-09 18:10:19 -0500 |
---|---|---|
committer | Alfredo Sumaran <alfredo@gitlab.com> | 2017-05-09 18:10:19 -0500 |
commit | 4c3753387b9bb46d0d257c90720c6e27a258c37a (patch) | |
tree | b77efef5e195d3dee204c11b2205dda0112f4782 | |
parent | 4b488d72a263b56b9701dde818ca6b77b038ca89 (diff) | |
download | gitlab-ce-4c3753387b9bb46d0d257c90720c6e27a258c37a.tar.gz |
Set tree structure for groups
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'), }); }); |