diff options
| author | qsm-odoo <qsm@odoo.com> | 2020-07-06 14:32:46 +0000 |
|---|---|---|
| committer | qsm-odoo <qsm@odoo.com> | 2020-07-07 15:56:55 +0000 |
| commit | ecefd51b63ed8c933243b4a2d26381d05ac288d2 (patch) | |
| tree | 5eea02fcdcd96f2f799bf6e37389e5619aca1744 /addons/web_editor/static/src | |
| parent | e55ee0bb1b285653ed23cbc8586f8c948fa7972b (diff) | |
[IMP] web_editor, *: add visibility check for editor sub-widgets
*: website
Update the visibility (from dependencies and _computeWidgetVisibility
function) for all widgets, including the ones which are children of main
widgets (e.g. new ability to hide some choices from a select depending
on other options).
closes odoo/odoo#54162
Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
Diffstat (limited to 'addons/web_editor/static/src')
| -rw-r--r-- | addons/web_editor/static/src/js/editor/snippets.options.js | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/addons/web_editor/static/src/js/editor/snippets.options.js b/addons/web_editor/static/src/js/editor/snippets.options.js index ecfb7188934..86165217120 100644 --- a/addons/web_editor/static/src/js/editor/snippets.options.js +++ b/addons/web_editor/static/src/js/editor/snippets.options.js @@ -1907,33 +1907,45 @@ const SnippetOptionWidget = Widget.extend({ obj = createPropertyProxy(this, '$target', $firstSubTarget); } - const show = await this._computeWidgetVisibility.call(obj, widget.getName(), params); - if (!show) { - widget.toggleVisibility(false); - return; + // Make sure to check the visibility of all sub-widgets. For + // simplicity and efficiency, those will be checked with main + // widgets params. + const allSubWidgets = [widget]; + let i = 0; + while (i < allSubWidgets.length) { + allSubWidgets.push(...allSubWidgets[i]._userValueWidgets); + i++; } - - const dependencies = widget.getDependencies(); - const dependenciesData = []; - dependencies.forEach(depName => { - const toBeActive = (depName[0] !== '!'); - if (!toBeActive) { - depName = depName.substr(1); + const proms = allSubWidgets.map(async widget => { + const show = await this._computeWidgetVisibility.call(obj, widget.getName(), params); + if (!show) { + widget.toggleVisibility(false); + return; } - const widget = this._requestUserValueWidgets(depName)[0]; - if (widget) { - dependenciesData.push({ - widget: widget, - toBeActive: toBeActive, - }); - } - }); - const dependenciesOK = !dependenciesData.length || dependenciesData.some(depData => { - return (depData.widget.isActive() === depData.toBeActive); - }); + const dependencies = widget.getDependencies(); + const dependenciesData = []; + dependencies.forEach(depName => { + const toBeActive = (depName[0] !== '!'); + if (!toBeActive) { + depName = depName.substr(1); + } - widget.toggleVisibility(dependenciesOK); + const widget = this._requestUserValueWidgets(depName)[0]; + if (widget) { + dependenciesData.push({ + widget: widget, + toBeActive: toBeActive, + }); + } + }); + const dependenciesOK = !dependenciesData.length || dependenciesData.some(depData => { + return (depData.widget.isActive() === depData.toBeActive); + }); + + widget.toggleVisibility(dependenciesOK); + }); + return Promise.all(proms); }); const showUI = await this._computeVisibility(); |
