[FIX] web_editor: ignore device visibility upon snippet drop
Since [1] when device visibility became a visibility option, when dropping a snippet that contains device-invisible blocks, all those blocks were made visible. This commit makes that behavior limited to blocks that are not device-invisible. (E.g. when dropping a popup) Steps to reproduce: - drop a Columns snippet - hide a column on mobile - hide a column on desktop - save snippet - drop saved snippet in either desktop or mobile preview => All columns were shown with the `o_snippet_override_invisible` effect on the conditional ones. [1]: https://github.com/odoo/odoo/commit/3103e0553011b5c1f4078972d7a88fa3fd4068b2 task-3538535 closes odoo/odoo#140505 Signed-off-by: Arthur Detroux (ard) <ard@odoo.com>
This commit is contained in:
@@ -207,7 +207,10 @@ var SnippetEditor = Widget.extend({
|
||||
isCurrent: targetEl === this.$target[0],
|
||||
});
|
||||
}
|
||||
// TODO In master differentiate device-based visibility.
|
||||
this._toggleVisibilityStatusIgnoreDeviceVisibility = true;
|
||||
await this.toggleTargetVisibility(true);
|
||||
this._toggleVisibilityStatusIgnoreDeviceVisibility = false;
|
||||
},
|
||||
/**
|
||||
* Notifies all the associated snippet options that the template which
|
||||
@@ -885,6 +888,21 @@ var SnippetEditor = Widget.extend({
|
||||
* @param {boolean} [show]
|
||||
*/
|
||||
_toggleVisibilityStatus: function (show) {
|
||||
// TODO In master differentiate device-based visibility.
|
||||
if (this._toggleVisibilityStatusIgnoreDeviceVisibility) {
|
||||
if (this.$target[0].matches(".o_snippet_mobile_invisible, .o_snippet_desktop_invisible")) {
|
||||
const isMobilePreview = weUtils.isMobileView(this.$target[0]);
|
||||
const isMobileHidden = this.$target[0].classList.contains("o_snippet_mobile_invisible");
|
||||
if (isMobilePreview === isMobileHidden) {
|
||||
// Preview mode and hidden type are the same.
|
||||
show = false;
|
||||
} else {
|
||||
// Preview mode is not related to hidden type.
|
||||
delete this.$target[0].dataset.invisible;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (show === undefined) {
|
||||
show = !this.isTargetVisible();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user