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/controllers/edit-category.js.es6
2018-06-15 17:03:24 +02:00

135 lines
3.8 KiB
JavaScript

import ModalFunctionality from "discourse/mixins/modal-functionality";
import DiscourseURL from "discourse/lib/url";
import { extractError } from "discourse/lib/ajax-error";
// Modal for editing / creating a category
export default Ember.Controller.extend(ModalFunctionality, {
selectedTab: null,
saving: false,
deleting: false,
panels: null,
hiddenTooltip: true,
_initPanels: function() {
this.set("panels", []);
}.on("init"),
onShow() {
this.changeSize();
this.titleChanged();
this.set("hiddenTooltip", true);
},
changeSize: function() {
if (!Ember.isEmpty(this.get("model.description"))) {
this.set("modal.modalClass", "edit-category-modal full");
} else {
this.set("modal.modalClass", "edit-category-modal small");
}
}.observes("model.description"),
title: function() {
if (this.get("model.id")) {
return I18n.t("category.edit_long") + " : " + this.get("model.name");
}
return (
I18n.t("category.create") +
(this.get("model.name") ? " : " + this.get("model.name") : "")
);
}.property("model.id", "model.name"),
titleChanged: function() {
this.set("modal.title", this.get("title"));
}.observes("title"),
disabled: function() {
if (this.get("saving") || this.get("deleting")) return true;
if (!this.get("model.name")) return true;
if (!this.get("model.color")) return true;
return false;
}.property("saving", "model.name", "model.color", "deleting"),
deleteDisabled: function() {
return this.get("deleting") || this.get("saving") || false;
}.property("disabled", "saving", "deleting"),
categoryName: function() {
const name = this.get("name") || "";
return name.trim().length > 0 ? name : I18n.t("preview");
}.property("name"),
saveLabel: function() {
if (this.get("saving")) return "saving";
if (this.get("model.isUncategorizedCategory")) return "save";
return this.get("model.id") ? "category.save" : "category.create";
}.property("saving", "model.id"),
actions: {
saveCategory() {
const self = this,
model = this.get("model"),
parentCategory = this.site
.get("categories")
.findBy("id", parseInt(model.get("parent_category_id"), 10));
this.set("saving", true);
model.set("parentCategory", parentCategory);
this.get("model")
.save()
.then(function(result) {
self.set("saving", false);
self.send("closeModal");
model.setProperties({
slug: result.category.slug,
id: result.category.id
});
DiscourseURL.redirectTo("/c/" + Discourse.Category.slugFor(model));
})
.catch(function(error) {
self.flash(extractError(error), "error");
self.set("saving", false);
});
},
deleteCategory() {
const self = this;
this.set("deleting", true);
this.send("hideModal");
bootbox.confirm(
I18n.t("category.delete_confirm"),
I18n.t("no_value"),
I18n.t("yes_value"),
function(result) {
if (result) {
self
.get("model")
.destroy()
.then(
function() {
// success
self.send("closeModal");
DiscourseURL.redirectTo("/categories");
},
function(error) {
self.flash(extractError(error), "error");
self.send("reopenModal");
self.displayErrors([I18n.t("category.delete_error")]);
self.set("deleting", false);
}
);
} else {
self.send("reopenModal");
self.set("deleting", false);
}
}
);
},
toggleDeleteTooltip() {
this.toggleProperty("hiddenTooltip");
}
}
});