From 02145a0644708c74b7f291069f88c4e58b1b0533 Mon Sep 17 00:00:00 2001 From: qa46hx Date: Wed, 23 Sep 2020 17:11:34 +0200 Subject: [PATCH] fix(form-core): override clear() so modelValue doesn't get erased --- .changeset/tough-kiwis-lay.md | 5 +++++ packages/form-core/src/choice-group/ChoiceInputMixin.js | 8 ++++++++ .../form-core/test/choice-group/ChoiceInputMixin.test.js | 9 ++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 .changeset/tough-kiwis-lay.md diff --git a/.changeset/tough-kiwis-lay.md b/.changeset/tough-kiwis-lay.md new file mode 100644 index 000000000..f0284c627 --- /dev/null +++ b/.changeset/tough-kiwis-lay.md @@ -0,0 +1,5 @@ +--- +'@lion/form-core': patch +--- + +for ChoiceInputs override clear() so modelValue doesn't get erased diff --git a/packages/form-core/src/choice-group/ChoiceInputMixin.js b/packages/form-core/src/choice-group/ChoiceInputMixin.js index a527eb00e..68f581aa7 100644 --- a/packages/form-core/src/choice-group/ChoiceInputMixin.js +++ b/packages/form-core/src/choice-group/ChoiceInputMixin.js @@ -238,6 +238,14 @@ const ChoiceInputMixinImplementation = superclass => return modelValue && modelValue.value !== undefined ? modelValue.value : modelValue; } + /** + * @override + * Overridden from LionField, since the modelValue should not be cleared. + */ + clear() { + this.checked = false; + } + /** * Used for required validator. */ diff --git a/packages/form-core/test/choice-group/ChoiceInputMixin.test.js b/packages/form-core/test/choice-group/ChoiceInputMixin.test.js index 6b729ca0b..8c98e793f 100644 --- a/packages/form-core/test/choice-group/ChoiceInputMixin.test.js +++ b/packages/form-core/test/choice-group/ChoiceInputMixin.test.js @@ -1,6 +1,6 @@ import { html } from '@lion/core'; -import { LionInput } from '@lion/input'; import { Required } from '@lion/form-core'; +import { LionInput } from '@lion/input'; import { expect, fixture } from '@open-wc/testing'; import sinon from 'sinon'; import { ChoiceInputMixin } from '../../src/choice-group/ChoiceInputMixin.js'; @@ -243,6 +243,13 @@ describe('ChoiceInputMixin', () => { `)); expect(elementWithValue.formattedValue).to.equal('foo'); }); + + it('can clear the checked state', async () => { + const el = /** @type {ChoiceClass} */ (await fixture(``)); + el.modelValue = { value: 'foo', checked: true }; + el.clear(); + expect(el.modelValue).deep.equal({ value: 'foo', checked: false }); + }); }); describe('Interaction states', () => {