diff --git a/src/qweb_extensions.ts b/src/qweb_extensions.ts index de5f9b4d..fbb30303 100644 --- a/src/qweb_extensions.ts +++ b/src/qweb_extensions.ts @@ -314,7 +314,11 @@ QWeb.addDirective({ ctx.addLine(`extra.promises.push(def${defID});`); - if (node.hasAttribute("t-if") || node.hasAttribute("t-else")) { + if ( + node.hasAttribute("t-if") || + node.hasAttribute("t-else") || + node.hasAttribute("t-elif") + ) { ctx.closeIf(); } diff --git a/tests/component.test.ts b/tests/component.test.ts index 1405a44e..7d07e578 100644 --- a/tests/component.test.ts +++ b/tests/component.test.ts @@ -1395,6 +1395,30 @@ describe("other directives with t-widget", () => { expect(normalize(fixture.innerHTML)).toBe("
hey
"); }); + test("t-elif works with t-widget", async () => { + class ParentWidget extends Widget { + inlineTemplate = ` +
+
somediv
+ +
`; + widgets = { child: Child }; + state = { flag: true }; + } + class Child extends Widget { + inlineTemplate = "hey"; + } + + const widget = new ParentWidget(env); + await widget.mount(fixture); + + expect(normalize(fixture.innerHTML)).toBe("
somediv
"); + + widget.state.flag = false; + await nextTick(); + expect(normalize(fixture.innerHTML)).toBe("
hey
"); + }); + test("t-else with empty string works with t-widget", async () => { class ParentWidget extends Widget { inlineTemplate = `