Skip to content
This repository is currently being migrated. It's locked while the migration is in progress.

Commit 0ec33f6

Browse files
authored
VaButton submit fire order (#1946)
* Update for 54.4.0 release * Changed fire order by delaying submit event and added tests * Change delay to setTimeout and updated test to check firing order --------- Signed-off-by: ediiotero <e.otero81@gmail.com>
1 parent 49f1667 commit 0ec33f6

2 files changed

Lines changed: 66 additions & 7 deletions

File tree

packages/web-components/src/components/va-button/test/va-button.e2e.ts

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { newE2EPage } from '@stencil/core/testing';
22
import { axeCheck } from '../../../testing/test-helpers';
33

4+
declare global {
5+
interface Window {
6+
eventOrder: string[];
7+
}
8+
}
9+
410
describe('va-button', () => {
511
it('renders a button with text Edit', async () => {
612
const page = await newE2EPage();
@@ -314,15 +320,63 @@ describe('va-button', () => {
314320
`);
315321
});
316322

317-
it('submits form when clicked', async () => {
323+
it('submit is not triggered when submit=skip is set', async () => {
318324
const page = await newE2EPage();
319-
await page.setContent(
320-
'<form onsubmit="e=>{e.preventDefault();}"><va-button submit text="Submit"></va-button></form>',
321-
);
325+
await page.setContent('<form><va-button submit="skip" continue></va-button></form>');
322326
const submitSpy = await page.spyOnEvent('submit');
323-
const button = await page.find('va-button >>> button');
327+
const button = await page.find('va-button[continue]');
328+
await button.click();
329+
await page.waitForChanges();
330+
expect(submitSpy).toHaveReceivedEventTimes(0);
331+
});
332+
333+
it('submit is triggered when submit=prevent is set', async () => {
334+
const page = await newE2EPage();
335+
await page.setContent('<form onsubmit="e=>{e.preventDefault();}"><va-button submit="prevent" continue></va-button></form>');
336+
const submitSpy = await page.spyOnEvent('submit');
337+
const button = await page.find('va-button[continue]');
324338
await button.click();
325339
await page.waitForChanges();
326340
expect(submitSpy).toHaveReceivedEventTimes(1);
327341
});
342+
343+
it('fires consumer onClick before onSubmit when submit=prevent', async () => {
344+
const page = await newE2EPage();
345+
346+
await page.setContent(`
347+
<script>
348+
window.eventOrder = [];
349+
350+
function handleClick() {
351+
window.eventOrder.push('click');
352+
}
353+
354+
function handleSubmit() {
355+
window.eventOrder.push('submit');
356+
}
357+
</script>
358+
359+
<form onsubmit="handleSubmit()">
360+
<va-button
361+
submit="prevent"
362+
continue
363+
onclick="handleClick()"
364+
>
365+
</va-button>
366+
</form>
367+
`);
368+
369+
const submitSpy = await page.spyOnEvent('submit');
370+
const button = await page.find('va-button[continue]');
371+
372+
await button.click();
373+
await page.waitForChanges();
374+
375+
expect(submitSpy).toHaveReceivedEventTimes(1);
376+
377+
// Assert ordering
378+
const order = await page.evaluate(() => window.eventOrder);
379+
expect(order).toEqual(['click', 'submit']);
380+
});
381+
328382
});

packages/web-components/src/components/va-button/va-button.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,16 @@ export class VaButton {
173173
cancelable: true,
174174
composed: true,
175175
});
176+
176177
if (this.submit !== 'skip') {
177-
formElement.dispatchEvent(submitEvent);
178+
setTimeout(() => {
179+
formElement.dispatchEvent(submitEvent);
180+
}, 100);
178181
}
179182
if (this.submit !== 'prevent') {
180-
formElement.submit();
183+
setTimeout(() => {
184+
formElement.submit();
185+
}, 200);
181186
}
182187
}
183188

0 commit comments

Comments
 (0)