odoo18/addons/website_blog/static/src/js/wysiwyg_adapter.js

83 lines
2.5 KiB
JavaScript

/** @odoo-module **/
import { WysiwygAdapterComponent } from '@website/components/wysiwyg_adapter/wysiwyg_adapter';
import { patch } from "@web/core/utils/patch";
patch(WysiwygAdapterComponent.prototype, {
/**
* @override
*/
init() {
super.init(...arguments);
this.blogTagsPerBlogPost = {};
},
/**
* @override
*/
async startEdition() {
await super.startEdition(...arguments);
this.options.document.defaultView.$('.js_tweet, .js_comment').off('mouseup').trigger('mousedown');
},
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* @override
*/
async _saveViewBlocks() {
const ret = await super._saveViewBlocks(...arguments);
await this._saveBlogTags(); // Note: important to be called after save otherwise cleanForSave is not called before
return ret;
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* Saves the blog tags in the database.
*
* @private
*/
async _saveBlogTags() {
for (const [key, tags] of Object.entries(this.blogTagsPerBlogPost)) {
const proms = tags.filter(tag => typeof tag.id === 'string').map(tag => {
return this.orm.create("blog.tag", [{
'name': tag.name,
}]);
});
const createdIDs = (await Promise.all(proms)).flat();
await this.orm.write("blog.post", [parseInt(key)], {
'tag_ids': [[6, 0, tags.filter(tag => typeof tag.id === 'number').map(tag => tag.id).concat(createdIDs)]],
});
}
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
* @param {OdooEvent} ev
*/
_onSetBlogPostUpdatedTags: function (ev) {
this.blogTagsPerBlogPost[ev.data.blogPostID] = ev.data.tags;
},
/**
* @override
*/
_trigger_up(ev) {
if (ev.name === 'set_blog_post_updated_tags') {
this._onSetBlogPostUpdatedTags(ev);
return;
} else {
return super._trigger_up(...arguments);
}
},
});