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