diff --git a/addons/web_editor/static/src/js/editor/snippets.editor.js b/addons/web_editor/static/src/js/editor/snippets.editor.js index 968f53c96c7..4b87155fbdb 100644 --- a/addons/web_editor/static/src/js/editor/snippets.editor.js +++ b/addons/web_editor/static/src/js/editor/snippets.editor.js @@ -856,18 +856,32 @@ var SnippetEditor = Widget.extend({ * @param {OdooEvent} ev */ _onSnippetOptionUpdate: async function (ev) { - const proms1 = Object.keys(this.styles).map(key => { - return this.styles[key].updateUI({ - noVisibility: true, + if (ev.target === this) { + return; + } + ev.stopPropagation(); + const updateOptionsUI = async () => { + const proms1 = Object.keys(this.styles).map(key => { + return this.styles[key].updateUI({ + noVisibility: true, + }); }); - }); - await Promise.all(proms1); - - const proms2 = Object.keys(this.styles).map(key => { - return this.styles[key].updateUIVisibility(); - }); - await Promise.all(proms2); + await Promise.all(proms1); + const proms2 = Object.keys(this.styles).map(key => { + return this.styles[key].updateUIVisibility(); + }); + await Promise.all(proms2); + }; + // Wait for the current editor's option UI updates and the parent ones + await Promise.all([ + updateOptionsUI(), + new Promise(resolve => { + this.trigger_up('snippet_option_update', Object.assign({}, ev.data, { + onSuccess: () => resolve(), + })); + }), + ]); ev.data.onSuccess(); }, /** @@ -941,6 +955,7 @@ var SnippetsMenu = Widget.extend({ 'snippet_editor_destroyed': '_onSnippetEditorDestroyed', 'snippet_removed': '_onSnippetRemoved', 'snippet_cloned': '_onSnippetCloned', + 'snippet_option_update': '_onSnippetOptionUpdate', 'snippet_option_visibility_update': '_onSnippetOptionVisibilityUpdate', 'snippet_thumbnail_url_request': '_onSnippetThumbnailURLRequest', 'reload_snippet_dropzones': '_disableUndroppableSnippets', @@ -2673,6 +2688,14 @@ var SnippetsMenu = Widget.extend({ this._disableUndroppableSnippets(); this._updateInvisibleDOM(); }, + /** + * @private + * @param {OdooEvent} ev + */ + _onSnippetOptionUpdate: function (ev) { + ev.stopPropagation(); + ev.data.onSuccess(); + }, /** * @private * @param {OdooEvent} ev