From c378b1885f5eb5f3f0f19f260511ae10ae18b866 Mon Sep 17 00:00:00 2001 From: Lars den Bakker Date: Wed, 27 Nov 2019 16:58:59 +0100 Subject: [PATCH] fix(fieldset): wait for registration before setting values --- packages/fieldset/src/LionFieldset.js | 6 +++- packages/fieldset/test/lion-fieldset.test.js | 30 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/fieldset/src/LionFieldset.js b/packages/fieldset/src/LionFieldset.js index cfccbd53a..1f0395cf0 100644 --- a/packages/fieldset/src/LionFieldset.js +++ b/packages/fieldset/src/LionFieldset.js @@ -266,7 +266,11 @@ export class LionFieldset extends FormRegistrarMixin( }); } - _setValueMapForAllFormElements(property, values) { + async _setValueMapForAllFormElements(property, values) { + if (!this.__readyForRegistration) { + await this.registrationReady; + } + if (values && typeof values === 'object') { Object.keys(values).forEach(name => { if (Array.isArray(this.formElements[name])) { diff --git a/packages/fieldset/test/lion-fieldset.test.js b/packages/fieldset/test/lion-fieldset.test.js index fa71b2b0d..c39dc9264 100644 --- a/packages/fieldset/test/lion-fieldset.test.js +++ b/packages/fieldset/test/lion-fieldset.test.js @@ -248,6 +248,36 @@ describe('', () => { expect(el.formElements.sub.formElements['hobbies[]'][1].disabled).to.be.true; }); + it('can set initial modelValue on creation', async () => { + const initialModelValue = { + lastName: 'Bar', + }; + const el = await fixture(html` + <${tag} .modelValue=${initialModelValue}> + <${childTag} name="lastName"> + + `); + + await el.registrationReady; + await el.updateComplete; + expect(el.modelValue).to.eql(initialModelValue); + }); + + it('can set initial serializedValue on creation', async () => { + const initialSerializedValue = { + lastName: 'Bar', + }; + const el = await fixture(html` + <${tag} .modelValue=${initialSerializedValue}> + <${childTag} name="lastName"> + + `); + + await el.registrationReady; + await el.updateComplete; + expect(el.modelValue).to.eql(initialSerializedValue); + }); + describe('validation', () => { it('validates on init', async () => { class IsCat extends Validator {