This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/controllers/group-index.js.es6
2019-05-27 10:15:39 +02:00

127 lines
3.0 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.filterInput);
}, 500),
@observes("order", "desc", "filter")
refreshMembers() {
this.set("loading", true);
const model = this.model;
if (model) {
model.findMembers(this.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.model.removeMember(user, this.memberParams);
},
makeOwner(username) {
this.model.addOwners(username);
},
removeOwner(user) {
this.model.removeOwner(user);
},
addMembers() {
const usernames = this.usernames;
if (usernames && usernames.length > 0) {
this.model
.addMembers(usernames)
.then(() => this.set("usernames", []))
.catch(popupAjaxError);
}
},
loadMore() {
if (this.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.limit,
{ order: this.order, desc: this.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
)
});
});
}
}
});