diff --git a/addons/web/static/src/views/view_compiler.js b/addons/web/static/src/views/view_compiler.js
index 3bd66b47cf5..156f7c74aa1 100644
--- a/addons/web/static/src/views/view_compiler.js
+++ b/addons/web/static/src/views/view_compiler.js
@@ -254,12 +254,12 @@ export class ViewCompiler {
return;
}
if (!params.enableInvisible) {
- combineAttributes(
- compiled,
- "t-if",
- `!evalDomainFromRecord(props.record,${JSON.stringify(invisible)})`,
- " and "
- );
+ let isVisileExpr = `!evalDomainFromRecord(props.record,${JSON.stringify(invisible)})`;
+ if (compiled.hasAttribute("t-if")) {
+ const formerTif = compiled.getAttribute("t-if");
+ isVisileExpr = `( ${formerTif} ) and ${isVisileExpr}`;
+ }
+ compiled.setAttribute("t-if", isVisileExpr);
} else {
appendAttr(compiled, "class", `o_invisible_modifier:${invisible}`);
}
diff --git a/addons/web/static/tests/views/form/form_compiler_tests.js b/addons/web/static/tests/views/form/form_compiler_tests.js
index 4c9ee6056d1..7f4c7b4c00a 100644
--- a/addons/web/static/tests/views/form/form_compiler_tests.js
+++ b/addons/web/static/tests/views/form/form_compiler_tests.js
@@ -3,7 +3,8 @@ import { makeView } from "../helpers";
import { setupViewRegistries } from "@web/../tests/views/helpers";
import { FormCompiler } from "@web/views/form/form_compiler";
import { registry } from "@web/core/registry";
-import { click, getFixture } from "../../helpers/utils";
+import { click, getFixture, patchWithCleanup } from "../../helpers/utils";
+import { createElement } from "@web/core/utils/xml";
function compileTemplate(arch) {
const parser = new DOMParser();
@@ -371,4 +372,26 @@ QUnit.module("Form Renderer", (hooks) => {
assert.containsOnce(target, "button[id=action_button]");
});
+
+ QUnit.test("invisible is correctly computed with another t-if", (assert) => {
+ patchWithCleanup(FormCompiler.prototype, {
+ setup() {
+ this._super();
+ this.compilers.push({
+ selector: "myNode",
+ fn: () => {
+ const div = createElement("div");
+ div.className = "myNode";
+ div.setAttribute("t-if", "myCondition or myOtherCondition");
+ return div;
+ },
+ });
+ },
+ });
+
+ const arch = ``;
+
+ const expected = ``;
+ assert.areEquivalent(compileTemplate(arch), expected);
+ });
});