From 5dd5a848f04b6086f90538345ae04d12f4e03bec Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 23 Nov 2022 22:05:26 +0100 Subject: [PATCH] fix(core): SlotMixin: conditional slots should not break init loop --- .changeset/cold-laws-check.md | 5 +++++ packages/ui/components/core/src/SlotMixin.js | 3 ++- packages/ui/components/core/test/SlotMixin.test.js | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .changeset/cold-laws-check.md diff --git a/.changeset/cold-laws-check.md b/.changeset/cold-laws-check.md new file mode 100644 index 000000000..07941688b --- /dev/null +++ b/.changeset/cold-laws-check.md @@ -0,0 +1,5 @@ +--- +'@lion/ui': patch +--- + +[core] SlotMixin: conditional slots should not break init loop diff --git a/packages/ui/components/core/src/SlotMixin.js b/packages/ui/components/core/src/SlotMixin.js index af7dc0772..6f58ede66 100644 --- a/packages/ui/components/core/src/SlotMixin.js +++ b/packages/ui/components/core/src/SlotMixin.js @@ -173,7 +173,8 @@ const SlotMixinImplementation = superclass => const slotFunctionResult = this.slots[slotName](); // Allow to conditionally return a slot if (slotFunctionResult === undefined) { - return; + // eslint-disable-next-line no-continue + continue; } if (!this.__isConnectedSlotMixin) { diff --git a/packages/ui/components/core/test/SlotMixin.test.js b/packages/ui/components/core/test/SlotMixin.test.js index 7c1491978..414b46029 100644 --- a/packages/ui/components/core/test/SlotMixin.test.js +++ b/packages/ui/components/core/test/SlotMixin.test.js @@ -81,12 +81,20 @@ describe('SlotMixin', () => { }); it('does not override user provided slots', async () => { + const shouldReturn = false; const tag = defineCE( class extends SlotMixin(LitElement) { get slots() { return { ...super.slots, feedback: () => document.createElement('div'), + 'more-feedback': () => { + if (shouldReturn) { + return document.createElement('div'); + } + return undefined; + }, + 'even-more-feedback': () => document.createElement('div'), }; } }, @@ -94,6 +102,9 @@ describe('SlotMixin', () => { const el = await fixture(`<${tag}>

user-content

`); expect(el.children[0].tagName).to.equal('P'); expect(/** @type HTMLParagraphElement */ (el.children[0]).innerText).to.equal('user-content'); + + expect(el.children[1].tagName).to.equal('DIV'); + expect(/** @type HTMLParagraphElement */ (el.children[1]).slot).to.equal('even-more-feedback'); }); it('does add when user provided slots are not direct children', async () => {