discourse/app/assets/javascripts/admin/controllers/admin-badges-show.js.es6

138 lines
3.8 KiB
Plaintext
Raw Normal View History

2018-06-15 23:03:24 +08:00
import { popupAjaxError } from "discourse/lib/ajax-error";
import { bufferedProperty } from "discourse/mixins/buffered-content";
2018-06-15 23:03:24 +08:00
import { propertyNotEqual } from "discourse/lib/computed";
export default Ember.Controller.extend(bufferedProperty("model"), {
adminBadges: Ember.inject.controller(),
saving: false,
2018-06-15 23:03:24 +08:00
savingStatus: "",
2018-06-15 23:03:24 +08:00
badgeTypes: Ember.computed.alias("adminBadges.badgeTypes"),
badgeGroupings: Ember.computed.alias("adminBadges.badgeGroupings"),
badgeTriggers: Ember.computed.alias("adminBadges.badgeTriggers"),
protectedSystemFields: Ember.computed.alias(
"adminBadges.protectedSystemFields"
),
2018-06-15 23:03:24 +08:00
readOnly: Ember.computed.alias("buffered.system"),
showDisplayName: propertyNotEqual("name", "displayName"),
hasQuery: function() {
2018-06-15 23:03:24 +08:00
const bQuery = this.get("buffered.query");
if (bQuery) {
return bQuery.trim().length > 0;
}
2018-06-15 23:03:24 +08:00
const mQuery = this.get("model.query");
return mQuery && mQuery.trim().length > 0;
2018-06-15 23:03:24 +08:00
}.property("model.query", "buffered.query"),
_resetSaving: function() {
2018-06-15 23:03:24 +08:00
this.set("saving", false);
this.set("savingStatus", "");
}.observes("model.id"),
actions: {
save() {
2018-06-15 23:03:24 +08:00
if (!this.get("saving")) {
let fields = [
"allow_title",
"multiple_grant",
"listable",
"auto_revoke",
"enabled",
"show_posts",
"target_posts",
"name",
"description",
"long_description",
"icon",
"image",
"query",
"badge_grouping_id",
"trigger",
"badge_type_id"
];
2018-06-15 23:03:24 +08:00
if (this.get("buffered.system")) {
var protectedFields = this.get("protectedSystemFields") || [];
fields = _.filter(fields, f => !protectedFields.includes(f));
}
2018-06-15 23:03:24 +08:00
this.set("saving", true);
this.set("savingStatus", I18n.t("saving"));
2018-06-15 23:03:24 +08:00
const boolFields = [
"allow_title",
"multiple_grant",
"listable",
"auto_revoke",
"enabled",
"show_posts",
"target_posts"
];
const data = {};
2018-06-15 23:03:24 +08:00
const buffered = this.get("buffered");
fields.forEach(function(field) {
var d = buffered.get(field);
if (boolFields.includes(field)) {
2018-06-15 23:03:24 +08:00
d = !!d;
}
data[field] = d;
});
2018-06-15 23:03:24 +08:00
const newBadge = !this.get("id");
const model = this.get("model");
this.get("model")
.save(data)
.then(() => {
if (newBadge) {
const adminBadges = this.get("adminBadges.model");
if (!adminBadges.includes(model)) {
adminBadges.pushObject(model);
}
this.transitionToRoute("adminBadges.show", model.get("id"));
} else {
this.commitBuffer();
this.set("savingStatus", I18n.t("saved"));
}
2018-06-15 23:03:24 +08:00
})
.catch(popupAjaxError)
.finally(() => {
this.set("saving", false);
this.set("savingStatus", "");
});
}
},
destroy() {
2018-06-15 23:03:24 +08:00
const adminBadges = this.get("adminBadges.model");
const model = this.get("model");
2018-06-15 23:03:24 +08:00
if (!model.get("id")) {
this.transitionToRoute("adminBadges.index");
return;
}
2018-06-15 23:03:24 +08:00
return bootbox.confirm(
I18n.t("admin.badges.delete_confirm"),
I18n.t("no_value"),
I18n.t("yes_value"),
result => {
if (result) {
model
.destroy()
.then(() => {
adminBadges.removeObject(model);
this.transitionToRoute("adminBadges.index");
})
.catch(() => {
bootbox.alert(I18n.t("generic_error"));
});
}
}
2018-06-15 23:03:24 +08:00
);
}
}
});