diff --git a/addons/web/static/src/views/list/list_arch_parser.js b/addons/web/static/src/views/list/list_arch_parser.js index d89c2a9adba..218ca73c0fe 100644 --- a/addons/web/static/src/views/list/list_arch_parser.js +++ b/addons/web/static/src/views/list/list_arch_parser.js @@ -78,14 +78,13 @@ export class ListArchParser extends XMLParser { } } else if (node.tagName === "field") { const fieldInfo = Field.parseFieldNode(node, models, modelName, "list"); - const invisible = node.getAttribute("invisible"); fieldNodes[fieldInfo.name] = fieldInfo; node.setAttribute("field_id", fieldInfo.name); if (fieldInfo.widget === "handle") { handleField = fieldInfo.name; } addFieldDependencies(activeFields, fieldInfo.FieldComponent.fieldDependencies); - if (!invisible || !archParseBoolean(invisible)) { + if (fieldInfo.modifiers.column_invisible !== true) { const label = fieldInfo.FieldComponent.label; columns.push({ ...fieldInfo, diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js index 333ed055dd9..5bd3d430fa3 100644 --- a/addons/web/static/tests/helpers/mock_server.js +++ b/addons/web/static/tests/helpers/mock_server.js @@ -287,7 +287,7 @@ export class MockServer { modifiersNames.forEach((attr) => { const mod = node.getAttribute(attr); if (mod) { - const v = evaluateExpr(mod, { context }) ? true : false; + const v = evaluateExpr(mod, context) ? true : false; if (inTreeView && !inListHeader && attr === "invisible") { modifiers.column_invisible = v; } else if (v || !(attr in modifiers) || !Array.isArray(modifiers[attr])) { @@ -1913,10 +1913,11 @@ export class MockServer { } // return false or the latest range start (related to the shortest // granularity (i.e. day, week, ...)) - return !values.length || values.includes(false) ? false : - values.reduce((max, value) => { - return value > max ? value : max; - }); + return !values.length || values.includes(false) + ? false + : values.reduce((max, value) => { + return value > max ? value : max; + }); } /** diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js index 2c35930d2a7..6b228ea5af2 100644 --- a/addons/web/static/tests/views/list_view_tests.js +++ b/addons/web/static/tests/views/list_view_tests.js @@ -962,6 +962,30 @@ QUnit.module("Views", (hooks) => { assert.containsN(target, "th", 2, "should have 2 th"); }); + QUnit.test( + "invisible column based on the context are correctly displayed", + async function (assert) { + await makeView({ + type: "list", + resModel: "foo", + serverData, + arch: ` + + + + `, + context: { + invisible: true, + notInvisible: false, + }, + }); + + // 1 th for checkbox, 1 for 1 visible column (foo) + assert.containsN(target, "th", 2, "should have 2 th"); + assert.strictEqual(target.querySelectorAll("th")[1].dataset.name, "foo"); + } + ); + QUnit.test("boolean field has no title (data-tooltip)", async function (assert) { await makeView({ type: "list",