Skip to content

Commit 8c724fa

Browse files
committed
fix(steps): always fire @Enter only once
1 parent ebe2bc1 commit 8c724fa

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

packages/steps/src/LionStep.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,10 @@ export class LionStep extends LionLitElement {
119119
this.status = 'entered';
120120
if (updateController === true) {
121121
this.controller.current = this.getControllerIndex();
122+
// controller will trigger enter() again which will dispatch the enter event
123+
} else {
124+
this.dispatchEvent(new CustomEvent('enter', { bubbles: true, composed: true }));
122125
}
123-
this.dispatchEvent(new CustomEvent('enter', { bubbles: true, composed: true }));
124126
}
125127

126128
leave() {

packages/steps/test/lion-steps.test.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ describe('lion-steps', () => {
159159
});
160160

161161
describe('events', () => {
162-
it('will trigger lion-step @leave event before changing .current', async () => {
162+
it('will fire lion-step @leave event before changing .current', async () => {
163163
let currentInLeaveEvent;
164164
const onLeave = ev => {
165165
currentInLeaveEvent = ev.target.controller.current;
@@ -175,7 +175,7 @@ describe('lion-steps', () => {
175175
expect(currentInLeaveEvent).to.equal(0);
176176
});
177177

178-
it('will trigger lion-step @enter event after changing .current', async () => {
178+
it('will fire lion-step @enter event after changing .current', async () => {
179179
let currentInEnterEvent;
180180
const onEnter = ev => {
181181
currentInEnterEvent = ev.target.controller.current;
@@ -190,6 +190,23 @@ describe('lion-steps', () => {
190190
el.next();
191191
expect(currentInEnterEvent).to.equal(1);
192192
});
193+
194+
it('will fire initial @enter event only once if [initial-step] is not on first step', async () => {
195+
const firstEnterSpy = sinon.spy();
196+
const secondEnterSpy = sinon.spy();
197+
await fixture(html`
198+
<lion-steps>
199+
<lion-step @enter=${firstEnterSpy}>
200+
<div>test1</div>
201+
</lion-step>
202+
<lion-step initial-step @enter=${secondEnterSpy}>
203+
<div>test2</div>
204+
</lion-step>
205+
</lion-steps>
206+
`);
207+
expect(firstEnterSpy).to.not.have.been.called;
208+
expect(secondEnterSpy).to.have.been.calledOnce;
209+
});
193210
});
194211

195212
describe('workflow with data and conditions', () => {

0 commit comments

Comments
 (0)