discourse/app/assets/javascripts/admin/addon/mixins/penalty-controller.js
Bianca Nenciu d2116f0029
FIX: Show error message if user is already silenced or suspended (#10988)
Users could be silenced or suspended by two staff members at the same time and
would not be aware of it. This commit shows an error message if another penalty
has been applied.
2020-11-03 17:38:56 +02:00

76 lines
1.8 KiB
JavaScript

import I18n from "I18n";
import ModalFunctionality from "discourse/mixins/modal-functionality";
import { extractError } from "discourse/lib/ajax-error";
import Mixin from "@ember/object/mixin";
import { next } from "@ember/runloop";
import { Promise } from "rsvp";
import bootbox from "bootbox";
export default Mixin.create(ModalFunctionality, {
errorMessage: null,
reason: null,
message: null,
postEdit: null,
postAction: null,
user: null,
postId: null,
successCallback: null,
confirmClose: false,
resetModal() {
this.setProperties({
errorMessage: null,
reason: null,
message: null,
loadingUser: true,
postId: null,
postEdit: null,
postAction: "delete",
before: null,
successCallback: null,
confirmClose: false,
});
},
beforeClose() {
// prompt a confirmation if we have unsaved content
if (
!this.confirmClose &&
((this.reason && this.reason.length > 1) ||
(this.message && this.message.length > 1))
) {
this.send("hideModal");
bootbox.confirm(I18n.t("admin.user.confirm_cancel_penalty"), (result) => {
if (result) {
next(() => {
this.set("confirmClose", true);
this.send("closeModal");
});
} else {
next(() => this.send("reopenModal"));
}
});
return false;
}
},
penalize(cb) {
let before = this.before;
let promise = before ? before() : Promise.resolve();
return promise
.then(() => cb())
.then((result) => {
this.set("confirmClose", true);
this.send("closeModal");
let callback = this.successCallback;
if (callback) {
callback(result);
}
})
.catch((error) => {
this.set("errorMessage", extractError(error));
});
},
});