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
2018-06-15 17:03:24 +02:00

127 lines
3.1 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
)
});
});
}
}
});