108 lines
3.4 KiB
JavaScript
108 lines
3.4 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,
|
|
|
|
_initPanels: function() {
|
|
this.set('panels', []);
|
|
}.on('init'),
|
|
|
|
onShow() {
|
|
this.changeSize();
|
|
this.titleChanged();
|
|
},
|
|
|
|
changeSize: function() {
|
|
if (!Ember.isEmpty(this.get('model.description'))) {
|
|
this.set('controllers.modal.modalClass', 'edit-category-modal full');
|
|
} else {
|
|
this.set('controllers.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('controllers.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 = Discourse.Category.list().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);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
});
|