discourse/app/assets/javascripts/discourse/components/queued-post.js.es6
2018-06-15 17:03:24 +02:00

115 lines
2.9 KiB
JavaScript

import { propertyEqual } from "discourse/lib/computed";
import { bufferedProperty } from "discourse/mixins/buffered-content";
import { popupAjaxError } from "discourse/lib/ajax-error";
function updateState(state, opts) {
opts = opts || {};
return function() {
const post = this.get("post");
const args = { state };
if (opts.deleteUser) {
args.delete_user = true;
}
post
.update(args)
.then(() => {
this.sendAction("removePost", post);
})
.catch(popupAjaxError);
};
}
export default Ember.Component.extend(bufferedProperty("editables"), {
editing: propertyEqual("post", "currentlyEditing"),
editables: null,
_confirmDelete: updateState("rejected", { deleteUser: true }),
_initEditables: function() {
const post = this.get("post");
const postOptions = post.get("post_options");
this.set("editables", {});
this.set("editables.raw", post.get("raw"));
this.set("editables.category", post.get("category"));
this.set("editables.category_id", post.get("category.id"));
this.set("editables.title", postOptions.title);
this.set("editables.tags", postOptions.tags);
}.on("init"),
_categoryChanged: function() {
this.set(
"buffered.category",
Discourse.Category.findById(this.get("buffered.category_id"))
);
}.observes("buffered.category_id"),
editTitleAndCategory: function() {
return this.get("editing") && !this.get("post.topic");
}.property("editing"),
tags: function() {
return this.get("editables.tags") || this.get("post.topic.tags") || [];
}.property("editables.tags"),
showTags: function() {
return (
this.siteSettings.tagging_enabled &&
!this.get("editing") &&
this.get("tags").length > 0
);
}.property("editing", "tags"),
editTags: function() {
return (
this.siteSettings.tagging_enabled &&
this.get("editing") &&
!this.get("post.topic")
);
}.property("editing"),
actions: {
approve: updateState("approved"),
reject: updateState("rejected"),
deleteUser() {
bootbox.confirm(
I18n.t("queue.delete_prompt", {
username: this.get("post.user.username")
}),
confirmed => {
if (confirmed) {
this._confirmDelete();
}
}
);
},
edit() {
// This is stupid but pagedown cannot be on the screen twice or it will break
this.set("currentlyEditing", null);
Ember.run.scheduleOnce("afterRender", () =>
this.set("currentlyEditing", this.get("post"))
);
},
confirmEdit() {
const buffered = this.get("buffered");
this.get("post")
.update(buffered.getProperties("raw", "title", "tags", "category_id"))
.then(() => {
this.commitBuffer();
this.set("currentlyEditing", null);
});
},
cancelEdit() {
this.rollbackBuffer();
this.set("currentlyEditing", null);
}
}
});