43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
import discourseComputed from "discourse-common/utils/decorators";
|
|
import { isEmpty } from "@ember/utils";
|
|
import { alias } from "@ember/object/computed";
|
|
import Controller from "@ember/controller";
|
|
import { popupAjaxError } from "discourse/lib/ajax-error";
|
|
import DiscourseURL from "discourse/lib/url";
|
|
import ModalFunctionality from "discourse/mixins/modal-functionality";
|
|
|
|
export default Controller.extend(ModalFunctionality, {
|
|
loading: false,
|
|
reason: alias("model.membership_request_template"),
|
|
|
|
@discourseComputed("model.name")
|
|
title(groupName) {
|
|
return I18n.t("groups.membership_request.title", { group_name: groupName });
|
|
},
|
|
|
|
@discourseComputed("loading", "reason")
|
|
disableSubmit(loading, reason) {
|
|
return loading || isEmpty(reason);
|
|
},
|
|
|
|
actions: {
|
|
requestMember() {
|
|
if (this.currentUser) {
|
|
this.set("loading", true);
|
|
|
|
this.model
|
|
.requestMembership(this.reason)
|
|
.then(result => {
|
|
DiscourseURL.routeTo(result.relative_url);
|
|
})
|
|
.catch(popupAjaxError)
|
|
.finally(() => {
|
|
this.set("loading", false);
|
|
});
|
|
} else {
|
|
this._showLoginModal();
|
|
}
|
|
}
|
|
}
|
|
});
|