From 398198502cb7af7697016bd4cfed828c78ceae37 Mon Sep 17 00:00:00 2001 From: Thomas Allmer Date: Sun, 14 Jul 2019 17:05:57 +0200 Subject: [PATCH] fix(field): make InteractionState leaveEvent protected --- packages/field/src/InteractionStateMixin.js | 20 ++++++++++++++--- .../field/test/InteractionStateMixin.test.js | 22 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/packages/field/src/InteractionStateMixin.js b/packages/field/src/InteractionStateMixin.js index ea5322ace..5d9968a6b 100644 --- a/packages/field/src/InteractionStateMixin.js +++ b/packages/field/src/InteractionStateMixin.js @@ -73,7 +73,7 @@ export const InteractionStateMixin = dedupeMixin( this.touched = false; this.dirty = false; this.prefilled = false; - this.leaveEvent = 'blur'; + this._leaveEvent = 'blur'; this._valueChangedEvent = 'model-value-changed'; this._iStateOnLeave = this._iStateOnLeave.bind(this); @@ -87,7 +87,7 @@ export const InteractionStateMixin = dedupeMixin( if (super.connectedCallback) { super.connectedCallback(); } - this.addEventListener(this.leaveEvent, this._iStateOnLeave); + this.addEventListener(this._leaveEvent, this._iStateOnLeave); this.addEventListener(this._valueChangedEvent, this._iStateOnValueChange); this.initInteractionState(); } @@ -96,7 +96,7 @@ export const InteractionStateMixin = dedupeMixin( if (super.disconnectedCallback) { super.disconnectedCallback(); } - this.removeEventListener(this.leaveEvent, this._iStateOnLeave); + this.removeEventListener(this._leaveEvent, this._iStateOnLeave); this.removeEventListener(this._valueChangedEvent, this._iStateOnValueChange); } @@ -159,5 +159,19 @@ export const InteractionStateMixin = dedupeMixin( _onDirtyChanged() { this.dispatchEvent(new CustomEvent('dirty-changed', { bubbles: true, composed: true })); } + + /** + * @deprecated + */ + get leaveEvent() { + return this._leaveEvent; + } + + /** + * @deprecated + */ + set leaveEvent(eventName) { + this._leaveEvent = eventName; + } }, ); diff --git a/packages/field/test/InteractionStateMixin.test.js b/packages/field/test/InteractionStateMixin.test.js index 8636bdc95..c95555b66 100644 --- a/packages/field/test/InteractionStateMixin.test.js +++ b/packages/field/test/InteractionStateMixin.test.js @@ -164,4 +164,26 @@ describe('InteractionStateMixin', async () => { expect(el.touched).to.be.false; expect(el.prefilled).to.be.true; }); + + describe('SubClassers', () => { + it('can override the `_leaveEvent`', async () => { + const tagLeaveString = defineCE( + class IState extends InteractionStateMixin(LitElement) { + constructor() { + super(); + this._leaveEvent = 'custom-blur'; + } + }, + ); + const tagLeave = unsafeStatic(tagLeaveString); + const el = await fixture(html`<${tagLeave}>`); + el.dispatchEvent(new Event('custom-blur')); + expect(el.touched).to.be.true; + }); + + it('can override the deprecated `leaveEvent`', async () => { + const el = await fixture(html`<${tag} .leaveEvent=${'custom-blur'}>`); + expect(el._leaveEvent).to.equal('custom-blur'); + }); + }); });