2017-05-05 02:34:56 +00:00
|
|
|
/* eslint-disable no-unused-vars */
|
|
|
|
|
2017-05-05 01:49:07 +00:00
|
|
|
import Vue from 'vue';
|
2017-05-10 18:30:30 +00:00
|
|
|
import GroupFilterableList from './groups_filterable_list';
|
2017-05-08 20:22:26 +00:00
|
|
|
import GroupsComponent from './components/groups.vue';
|
2017-05-09 23:10:19 +00:00
|
|
|
import GroupFolder from './components/group_folder.vue';
|
|
|
|
import GroupItem from './components/group_item.vue';
|
2017-05-10 08:06:51 +00:00
|
|
|
import GroupsStore from './stores/groups_store';
|
|
|
|
import GroupsService from './services/groups_service';
|
|
|
|
import eventHub from './event_hub';
|
2017-05-05 01:49:07 +00:00
|
|
|
|
2017-05-05 00:29:56 +00:00
|
|
|
$(() => {
|
2017-05-06 04:15:04 +00:00
|
|
|
const appEl = document.querySelector('#dashboard-group-app');
|
2017-05-10 08:06:51 +00:00
|
|
|
const form = document.querySelector('form#group-filter-form');
|
|
|
|
const filter = document.querySelector('.js-groups-list-filter');
|
|
|
|
const holder = document.querySelector('.js-groups-list-holder');
|
|
|
|
|
|
|
|
const store = new GroupsStore();
|
|
|
|
const service = new GroupsService(appEl.dataset.endpoint);
|
2017-05-05 01:49:07 +00:00
|
|
|
|
2017-05-09 23:10:19 +00:00
|
|
|
Vue.component('groups-component', GroupsComponent);
|
|
|
|
Vue.component('group-folder', GroupFolder);
|
|
|
|
Vue.component('group-item', GroupItem);
|
|
|
|
|
2017-05-05 01:49:07 +00:00
|
|
|
const GroupsApp = new Vue({
|
2017-05-05 02:34:56 +00:00
|
|
|
el: appEl,
|
2017-05-10 08:06:51 +00:00
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
store,
|
|
|
|
state: store.state,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
methods: {
|
2017-05-12 08:36:08 +00:00
|
|
|
fetchGroups(parentGroup) {
|
|
|
|
let parentId = null;
|
2017-05-29 21:52:33 +00:00
|
|
|
let getGroups = null;
|
2017-05-30 05:50:29 +00:00
|
|
|
let page = null;
|
|
|
|
let pageParam = null;
|
2017-05-12 08:36:08 +00:00
|
|
|
|
|
|
|
if (parentGroup) {
|
|
|
|
parentId = parentGroup.id;
|
|
|
|
}
|
|
|
|
|
2017-05-30 05:50:29 +00:00
|
|
|
pageParam = gl.utils.getParameterByName('page');
|
|
|
|
|
|
|
|
if (pageParam) {
|
|
|
|
page = pageParam;
|
|
|
|
}
|
2017-05-22 17:47:05 +00:00
|
|
|
|
2017-05-29 21:52:33 +00:00
|
|
|
getGroups = service.getGroups(parentId, page);
|
|
|
|
getGroups.then((response) => {
|
|
|
|
store.setGroups(response.json(), parentGroup);
|
|
|
|
})
|
|
|
|
.catch(() => {
|
2017-05-30 08:12:06 +00:00
|
|
|
// TODO: Handle error
|
2017-05-29 21:52:33 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return getGroups;
|
2017-05-10 08:06:51 +00:00
|
|
|
},
|
2017-05-12 08:36:08 +00:00
|
|
|
toggleSubGroups(parentGroup = null) {
|
2017-05-16 14:29:38 +00:00
|
|
|
if (!parentGroup.isOpen) {
|
2017-05-30 05:50:29 +00:00
|
|
|
store.resetGroups(parentGroup);
|
2017-05-16 14:29:38 +00:00
|
|
|
this.fetchGroups(parentGroup);
|
|
|
|
}
|
2017-05-30 05:50:29 +00:00
|
|
|
|
2017-05-12 08:36:08 +00:00
|
|
|
GroupsStore.toggleSubGroups(parentGroup);
|
2017-05-10 08:06:51 +00:00
|
|
|
},
|
2017-05-30 08:12:06 +00:00
|
|
|
leaveGroup(endpoint) {
|
|
|
|
service.leaveGroup(endpoint)
|
|
|
|
.then(() => {
|
|
|
|
// TODO: Refresh?
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
// TODO: Handle error
|
|
|
|
});
|
|
|
|
},
|
2017-05-10 08:06:51 +00:00
|
|
|
},
|
|
|
|
created() {
|
2017-05-29 21:52:33 +00:00
|
|
|
let groupFilterList = null;
|
|
|
|
|
2017-05-31 22:04:25 +00:00
|
|
|
groupFilterList = new GroupFilterableList({ form, filter, holder, store });
|
2017-05-10 18:30:30 +00:00
|
|
|
groupFilterList.initSearch();
|
|
|
|
|
2017-05-29 21:52:33 +00:00
|
|
|
this.fetchGroups()
|
|
|
|
.then((response) => {
|
|
|
|
store.storePagination(response.headers);
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
// TODO: Handle error
|
|
|
|
});
|
2017-05-10 08:06:51 +00:00
|
|
|
|
|
|
|
eventHub.$on('toggleSubGroups', this.toggleSubGroups);
|
2017-05-30 08:12:06 +00:00
|
|
|
eventHub.$on('leaveGroup', this.leaveGroup);
|
2017-05-10 08:06:51 +00:00
|
|
|
},
|
2017-05-05 01:49:07 +00:00
|
|
|
});
|
|
|
|
});
|