1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-23 15:19:42 +02:00

list group members & non-members

This commit is contained in:
sauls8t 2018-02-28 14:55:36 +00:00
parent 19b4a3de49
commit 0680a72ee2
15 changed files with 360 additions and 60 deletions

View file

@ -11,13 +11,20 @@
import $ from 'jquery';
import { inject as service } from '@ember/service';
import { debounce } from '@ember/runloop';
import Component from '@ember/component';
import AuthProvider from '../../mixins/auth';
import ModalMixin from '../../mixins/modal';
export default Component.extend(AuthProvider, ModalMixin, {
groupSvc: service('group'),
userSvc: service('user'),
newGroup: null,
searchText: '',
showUsers: false,
showMembers: true,
users: null,
members: null,
didReceiveAttrs() {
this._super(...arguments);
@ -35,6 +42,37 @@ export default Component.extend(AuthProvider, ModalMixin, {
this.set('newGroup', { name: '', purpose: '' });
},
loadUsers(searchText) {
this.get('userSvc').matchUsers(searchText).then((users) => {
let members = this.get('members');
if (members.length > 0) {
users.forEach((user) => {
let m = members.findBy('userId', user.get('id'));
user.set('isMember', is.not.undefined(m));
})
}
this.set('users', users);
});
},
loadMembers(groupId) {
this.get('groupSvc').getGroupMembers(groupId).then((members) => {
this.set('members', members);
// if we have no members, then prefetch users (server should limit to top 100 users)
if (members.length === 0) {
this.loadUsers('');
this.set('showMembers', false);
this.set('showUsers', true);
} else {
this.set('showMembers', true);
this.set('showUsers', false);
}
});
},
actions: {
onOpenGroupModal() {
this.modalOpen("#add-group-modal", {"show": true}, '#new-group-name');
@ -44,6 +82,7 @@ export default Component.extend(AuthProvider, ModalMixin, {
e.preventDefault();
let newGroup = this.get('newGroup');
if (is.empty(newGroup.name)) {
$("#new-group-name").addClass("is-invalid").focus();
return;
@ -82,8 +121,7 @@ export default Component.extend(AuthProvider, ModalMixin, {
},
onShowEditModal(groupId) {
let group = this.get('groups').findBy('id', groupId);
this.set('editGroup', group);
this.set('editGroup', this.get('groups').findBy('id', groupId));
this.modalOpen("#edit-group-modal", {"show": true}, '#edit-group-name');
},
@ -103,6 +141,43 @@ export default Component.extend(AuthProvider, ModalMixin, {
this.modalClose("#edit-group-modal");
this.set('editGroup', null);
},
onShowMembersModal(groupId) {
this.set('membersGroup', this.get('groups').findBy('id', groupId));
this.modalOpen("#group-members-modal", {"show": true}, '#group-members-search');
this.set('members', null);
this.set('users', null);
this.loadMembers(groupId);
},
onSearch() {
debounce(this, function() {
let searchText = this.get('searchText');
let groupId = this.get('membersGroup.id');
if (is.not.empty(searchText)) {
this.loadUsers(searchText);
this.set('showMembers', false);
this.set('showUsers', true);
} else {
this.loadMembers(groupId);
this.set('showMembers', true);
this.set('showUsers', false);
}
}, 250);
},
onLeaveGroup(userId) {
this.get('groupSvc').leave(this.get('membersGroup.id'), userId).then(() => {
this.load();
});
},
onJoinGroup(userId) {
this.get('groupSvc').join(this.get('membersGroup.id'), userId).then(() => {
this.load();
});
}
}
});