From 3d2e2a18733df5309700620eb686b1b2ff19821b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Mon, 24 Jun 2019 12:57:15 +0200 Subject: [PATCH] [FIX] components: ignore slot if no definition is given closes #203 --- src/qweb_extensions.ts | 2 ++ tests/__snapshots__/component.test.ts.snap | 8 ++++++-- tests/component.test.ts | 24 ++++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/qweb_extensions.ts b/src/qweb_extensions.ts index f9de2b0a..68d8b0e8 100644 --- a/src/qweb_extensions.ts +++ b/src/qweb_extensions.ts @@ -705,11 +705,13 @@ QWeb.addDirective({ ctx.addLine( `const slot${slotKey} = this.slots[context.__owl__.slotId + '_' + '${value}'];` ); + ctx.addIf(`slot${slotKey}`) ctx.addLine( `slot${slotKey}(context.__owl__.parent, Object.assign({}, extra, {parentNode: c${ ctx.parentNode }}));` ); + ctx.closeIf(); return true; } }); diff --git a/tests/__snapshots__/component.test.ts.snap b/tests/__snapshots__/component.test.ts.snap index ab361803..2c78cdee 100644 --- a/tests/__snapshots__/component.test.ts.snap +++ b/tests/__snapshots__/component.test.ts.snap @@ -1083,12 +1083,16 @@ exports[`t-slot directive can define and call slots 2`] = ` var vn2 = h('div', p2, c2); c1.push(vn2); const slot3 = this.slots[context.__owl__.slotId + '_' + 'header']; - slot3(context.__owl__.parent, Object.assign({}, extra, {parentNode: c2})); + if (slot3) { + slot3(context.__owl__.parent, Object.assign({}, extra, {parentNode: c2})); + } let c4 = [], p4 = {key:4}; var vn4 = h('div', p4, c4); c1.push(vn4); const slot5 = this.slots[context.__owl__.slotId + '_' + 'footer']; - slot5(context.__owl__.parent, Object.assign({}, extra, {parentNode: c4})); + if (slot5) { + slot5(context.__owl__.parent, Object.assign({}, extra, {parentNode: c4})); + } return vn1; }" `; diff --git a/tests/component.test.ts b/tests/component.test.ts index a52b95fc..99b5566c 100644 --- a/tests/component.test.ts +++ b/tests/component.test.ts @@ -3031,6 +3031,30 @@ describe("t-slot directive", () => { ); }); + test("missing slots are ignored", async () => { + env.qweb.addTemplates(` + +
+ +
+ + + some content + + +
+ `); + class Dialog extends Widget {} + class Parent extends Widget { + components = { Dialog }; + } + const parent = new Parent(env); + await parent.mount(fixture); + + expect(fixture.innerHTML).toBe( + '
some content
' + ); + }); }); describe("t-model directive", () => {