diff --git a/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js b/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js index f7bad62ee9c..6802bdd086f 100644 --- a/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js +++ b/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js @@ -1766,6 +1766,7 @@ ListRenderer.include({ const newWidth = Math.max(10, initialWidth + delta); const tableDelta = newWidth - initialWidth; th.style.width = `${newWidth}px`; + th.style.maxWidth = `${newWidth}px`; table.style.width = `${initialTableWidth + tableDelta}px`; if (optionalDropdown) { optionalDropdown.style.left = `${initialDropdownX + tableDelta}px`; diff --git a/addons/web/static/tests/legacy/views/list_tests.js b/addons/web/static/tests/legacy/views/list_tests.js index 4691da872aa..a6e8d978235 100644 --- a/addons/web/static/tests/legacy/views/list_tests.js +++ b/addons/web/static/tests/legacy/views/list_tests.js @@ -11613,6 +11613,44 @@ QUnit.module('Views', { list.destroy(); }); + QUnit.test('editable list: resize column headers with max-width', async function (assert) { + // This test will ensure that, on resize list header, + // the resized element have the correct size and other elements are not resized + assert.expect(2); + this.data.foo.records[0].foo = "a".repeat(200); + + var list = await createView({ + View: ListView, + model: 'foo', + data: this.data, + arch: '' + + '' + + '' + + '' + + '', + }); + + // Target handle + const th = list.el.getElementsByTagName('th')[1]; + const thNext = list.el.getElementsByTagName('th')[2]; + const resizeHandle = th.getElementsByClassName('o_resize')[0]; + const nextResizeHandle = thNext.getElementsByClassName('o_resize')[0]; + const thOriginalWidth = th.offsetWidth; + const thNextOriginalWidth = thNext.offsetWidth; + const thExpectedWidth = Math.floor(thOriginalWidth + thNextOriginalWidth); + + await testUtils.dom.dragAndDrop(resizeHandle, nextResizeHandle, { mousemoveTarget: window, mouseupTarget: window }); + + const thFinalWidth = th.offsetWidth; + const thNextFinalWidth = thNext.offsetWidth; + const thWidthDiff = Math.abs(thExpectedWidth - thFinalWidth) + + assert.ok(thWidthDiff <= 1, "Wrong width on resize"); + assert.ok(thNextOriginalWidth === thNextFinalWidth, "Width must not have been changed"); + + list.destroy(); + }); + QUnit.test('resize column with several x2many lists in form group', async function (assert) { assert.expect(3);