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/components/queued-post.js.es6

93 lines
2.8 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);
}
}
});