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
2020-03-12 13:29:55 -04:00

126 lines
2.8 KiB
JavaScript

import Controller, { inject as controller } from "@ember/controller";
import { alias } from "@ember/object/computed";
import discourseComputed, { observes } from "discourse-common/utils/decorators";
import { popupAjaxError } from "discourse/lib/ajax-error";
import discourseDebounce from "discourse/lib/debounce";
export default Controller.extend({
application: controller(),
queryParams: ["order", "desc", "filter"],
order: "",
desc: null,
filter: null,
filterInput: null,
loading: false,
isOwner: alias("model.is_group_owner"),
showActions: false,
@observes("filterInput")
_setFilter: discourseDebounce(function() {
this.set("filter", this.filterInput);
}, 500),
@observes("order", "desc", "filter")
_filtersChanged() {
this.findMembers(true);
},
findMembers(refresh) {
if (this.loading) {
return;
}
const model = this.model;
if (!model) {
return;
}
if (!refresh && model.members.length >= model.user_count) {
this.set("application.showFooter", true);
return;
}
this.set("loading", true);
model.findMembers(this.memberParams, refresh).finally(() => {
this.set(
"application.showFooter",
model.members.length >= model.user_count
);
this.set("loading", false);
});
},
@discourseComputed("order", "desc", "filter")
memberParams(order, desc, filter) {
return { order, desc, filter };
},
@discourseComputed("model.members.[]")
hasMembers(members) {
return members && members.length > 0;
},
@discourseComputed("model")
canManageGroup(model) {
return this.currentUser && this.currentUser.canManageGroup(model);
},
@discourseComputed
filterPlaceholder() {
if (this.currentUser && this.currentUser.admin) {
return "groups.members.filter_placeholder_admin";
} else {
return "groups.members.filter_placeholder";
}
},
actions: {
loadMore() {
this.findMembers();
},
toggleActions() {
this.toggleProperty("showActions");
},
actOnGroup(member, actionId) {
switch (actionId) {
case "removeMember":
this.send("removeMember", member);
break;
case "makeOwner":
this.send("makeOwner", member.username);
break;
case "removeOwner":
this.send("removeOwner", member);
break;
}
},
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);
}
}
}
});