diff --git a/addons/web/static/src/views/list/list_renderer.js b/addons/web/static/src/views/list/list_renderer.js index f306137eaa5..7c0c27e3f40 100644 --- a/addons/web/static/src/views/list/list_renderer.js +++ b/addons/web/static/src/views/list/list_renderer.js @@ -20,6 +20,7 @@ import { useBounceButton } from "@web/views/view_hook"; import { Widget } from "@web/views/widgets/widget"; import { getFormattedValue } from "../utils"; import { localization } from "@web/core/l10n/localization"; +import { uniqueId } from "@web/core/utils/functions"; import { Component, @@ -73,6 +74,26 @@ function getElementToFocus(cell, index) { return getTabableElements(cell).at(index) || cell; } +/** + * Here be dragons. 🐉 + * This is a workaround to avoid clipping issues in Firefox and Safari. + * cf. https://bugzilla.mozilla.org/show_bug.cgi?id=1887116 + */ +class OptionalFieldsDropdown extends Dropdown { + static template = "web.ListRenderer.OptionalFieldsDropdown"; + static props = { + ...Dropdown.props, + listRendererClass: String, + }; + + onWindowClicked(ev) { + if (ev.target.closest(".o_optional_columns_dropdown.o-dropdown--menu")) { + return; + } + super.onWindowClicked(...arguments); + } +} + export class ListRenderer extends Component { setup() { this.uiService = useService("ui"); @@ -215,6 +236,7 @@ export class ListRenderer extends Component { this.lastEditedCell = null; }); this.isRTL = localization.direction === "rtl"; + this.uniqueRendererClass = uniqueId("o_list_renderer_"); } displaySaveNotification() { @@ -2137,7 +2159,7 @@ ListRenderer.rowsTemplate = "web.ListRenderer.Rows"; ListRenderer.recordRowTemplate = "web.ListRenderer.RecordRow"; ListRenderer.groupRowTemplate = "web.ListRenderer.GroupRow"; -ListRenderer.components = { DropdownItem, Field, ViewButton, CheckBox, Dropdown, Pager, Widget }; +ListRenderer.components = { DropdownItem, Field, ViewButton, CheckBox, Dropdown: OptionalFieldsDropdown, Pager, Widget }; ListRenderer.props = [ "activeActions?", "list", diff --git a/addons/web/static/src/views/list/list_renderer.xml b/addons/web/static/src/views/list/list_renderer.xml index 5571b3ae35d..ed414c83b8d 100644 --- a/addons/web/static/src/views/list/list_renderer.xml +++ b/addons/web/static/src/views/list/list_renderer.xml @@ -5,6 +5,7 @@
@@ -48,6 +49,7 @@ class="'o_optional_columns_dropdown text-center border-top-0'" togglerClass="'btn p-0'" skipTogglerTabbing="true" + listRendererClass="uniqueRendererClass" position="'bottom-end'"> @@ -308,4 +310,11 @@ + + + `.${props.listRendererClass}` + + + +