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/app/controllers/group-requests.js
Robin Ward cee80b0e44 FIX: Group Requests loading was broken
We were referencing the wrong property, which meant the footer was
always being hidden and we were trying to load more requests when we'd
already loaded them all.

see:
https://meta.discourse.org/t/constant-loading-on-group-membership-request-tab/166284
2020-10-07 14:54:17 -04:00

111 lines
2.6 KiB
JavaScript

import Controller, { inject as controller } from "@ember/controller";
import discourseComputed, { observes } from "discourse-common/utils/decorators";
import { ajax } from "discourse/lib/ajax";
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,
@observes("filterInput")
_setFilter: discourseDebounce(function () {
this.set("filter", this.filterInput);
}, 500),
@observes("order", "desc", "filter")
_filtersChanged() {
this.findRequesters(true);
},
findRequesters(refresh) {
if (this.loading) {
return;
}
const model = this.model;
if (!model) {
return;
}
if (!refresh && model.requesters.length >= model.user_count) {
this.set("application.showFooter", true);
return;
}
this.set("loading", true);
model.findRequesters(this.memberParams, refresh).finally(() => {
this.set(
"application.showFooter",
model.requesters.length >= model.user_count
);
this.set("loading", false);
});
},
@discourseComputed("order", "desc", "filter")
memberParams(order, desc, filter) {
return { order, desc, filter };
},
@discourseComputed("model.requesters.[]")
hasRequesters(requesters) {
return requesters && requesters.length > 0;
},
@discourseComputed
filterPlaceholder() {
if (this.currentUser && this.currentUser.admin) {
return "groups.members.filter_placeholder_admin";
} else {
return "groups.members.filter_placeholder";
}
},
handleRequest(data) {
ajax(`/groups/${this.get("model.id")}/handle_membership_request.json`, {
data,
type: "PUT",
}).catch(popupAjaxError);
},
actions: {
loadMore() {
this.findRequesters();
},
acceptRequest(user) {
this.handleRequest({ user_id: user.get("id"), accept: true });
user.setProperties({
request_accepted: true,
request_denied: false,
});
},
undoAcceptRequest(user) {
ajax("/groups/" + this.get("model.id") + "/members.json", {
type: "DELETE",
data: { user_id: user.get("id") },
}).then(() => {
user.set("request_undone", true);
});
},
denyRequest(user) {
this.handleRequest({ user_id: user.get("id") });
user.setProperties({
request_accepted: false,
request_denied: true,
});
},
},
});