112 lines
2.9 KiB
JavaScript
112 lines
2.9 KiB
JavaScript
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
|
import Group from 'discourse/models/group';
|
|
import { default as computed, observes } from 'ember-addons/ember-computed-decorators';
|
|
import debounce from 'discourse/lib/debounce';
|
|
|
|
export default Ember.Controller.extend({
|
|
queryParams: ['order', 'desc', 'filter'],
|
|
order: '',
|
|
desc: null,
|
|
loading: false,
|
|
limit: null,
|
|
offset: null,
|
|
isOwner: Ember.computed.alias('model.is_group_owner'),
|
|
showActions: false,
|
|
filter: null,
|
|
filterInput: null,
|
|
application: Ember.inject.controller(),
|
|
|
|
@observes("filterInput")
|
|
_setFilter: debounce(function() {
|
|
this.set("filter", this.get("filterInput"));
|
|
}, 500),
|
|
|
|
@observes('order', 'desc', 'filter')
|
|
refreshMembers() {
|
|
this.set('loading', true);
|
|
const model = this.get('model');
|
|
|
|
if (model) {
|
|
model.findMembers(this.get('memberParams'))
|
|
.finally(() => {
|
|
this.set('application.showFooter', model.members.length >= model.user_count);
|
|
this.set('loading', false);
|
|
});
|
|
}
|
|
},
|
|
|
|
@computed('order', 'desc', 'filter')
|
|
memberParams(order, desc, filter) {
|
|
return { order, desc, filter };
|
|
},
|
|
|
|
@computed('model.members')
|
|
hasMembers(members) {
|
|
return members && members.length > 0;
|
|
},
|
|
|
|
@computed('model')
|
|
canManageGroup(model) {
|
|
return this.currentUser && this.currentUser.canManageGroup(model);
|
|
},
|
|
|
|
@computed
|
|
filterPlaceholder() {
|
|
if (this.currentUser && this.currentUser.admin) {
|
|
return "groups.members.filter_placeholder_admin";
|
|
} else {
|
|
return "groups.members.filter_placeholder";
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
toggleActions() {
|
|
this.toggleProperty("showActions");
|
|
},
|
|
|
|
removeMember(user) {
|
|
this.get('model').removeMember(user, this.get('memberParams'));
|
|
},
|
|
|
|
makeOwner(username) {
|
|
this.get('model').addOwners(username);
|
|
},
|
|
|
|
removeOwner(user) {
|
|
this.get('model').removeOwner(user);
|
|
},
|
|
|
|
addMembers() {
|
|
const usernames = this.get('usernames');
|
|
if (usernames && usernames.length > 0) {
|
|
this.get('model').addMembers(usernames).then(() => this.set('usernames', [])).catch(popupAjaxError);
|
|
}
|
|
},
|
|
|
|
loadMore() {
|
|
if (this.get("loading")) { return; }
|
|
if (this.get("model.members.length") >= this.get("model.user_count")) {
|
|
this.set("application.showFooter", true);
|
|
return;
|
|
}
|
|
|
|
this.set("loading", true);
|
|
|
|
Group.loadMembers(
|
|
this.get("model.name"),
|
|
this.get("model.members.length"),
|
|
this.get("limit"),
|
|
{ order: this.get('order'), desc: this.get('desc') }
|
|
).then(result => {
|
|
this.get("model.members").addObjects(result.members.map(member => Discourse.User.create(member)));
|
|
this.setProperties({
|
|
loading: false,
|
|
user_count: result.meta.total,
|
|
limit: result.meta.limit,
|
|
offset: Math.min(result.meta.offset + result.meta.limit, result.meta.total)
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|