[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:
Benoit Socias
2023-11-06 13:58:39 +00:00
parent ebe64aafac
commit acfca25e48
@@ -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();
}