discourse/app/assets/javascripts/admin/addon/mixins/penalty-controller.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

77 lines
1.9 KiB
JavaScript
Raw Normal View History

import I18n from "I18n";
import Mixin from "@ember/object/mixin";
import ModalFunctionality from "discourse/mixins/modal-functionality";
2019-11-06 00:37:32 +08:00
import { Promise } from "rsvp";
import { extractError } from "discourse/lib/ajax-error";
import { next } from "@ember/runloop";
import { inject as service } from "@ember/service";
export default Mixin.create(ModalFunctionality, {
dialog: service(),
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");
this.dialog.confirm({
message: I18n.t("admin.user.confirm_cancel_penalty"),
didConfirm: () => {
next(() => {
this.set("confirmClose", true);
this.send("closeModal");
});
},
didCancel: () => this.send("reopenModal"),
});
return false;
}
},
penalize(cb) {
let before = this.before;
2019-11-06 00:37:32 +08:00
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));
});
},
});