fix(select): avoid duplicate dialogs and backdrops when clicking (#25175)

Resolves #25126
This commit is contained in:
Sean Perkins
2022-04-25 21:35:41 -04:00
committed by GitHub
parent ff1429ba7a
commit 70d278414e
2 changed files with 32 additions and 1 deletions

View File

@ -188,8 +188,8 @@ export class Select implements ComponentInterface {
if (this.disabled || this.isExpanded) { if (this.disabled || this.isExpanded) {
return undefined; return undefined;
} }
const overlay = (this.overlay = await this.createOverlay(event));
this.isExpanded = true; this.isExpanded = true;
const overlay = (this.overlay = await this.createOverlay(event));
overlay.onDidDismiss().then(() => { overlay.onDidDismiss().then(() => {
this.overlay = undefined; this.overlay = undefined;
this.isExpanded = false; this.isExpanded = false;

View File

@ -0,0 +1,31 @@
import { expect } from '@playwright/test';
import { test } from '@utils/test/playwright';
test.describe('select: basic', () => {
test('should not open multiple alert windows when clicked multiple times', async ({ page }) => {
test.info().annotations.push({
type: 'issue',
description: 'https://github.com/ionic-team/ionic-framework/issues/25126',
});
await page.goto('/src/components/select/test/basic');
const select = page.locator('#gender');
await select.evaluate((el: HTMLSelectElement) => {
/*
* Playwright's click() method attempts to scroll to the handle
* to perform the action. That is problematic when the overlay
* is already visible. We manually click() the element instead
* to avoid flaky tests.
*/
el.click();
el.click();
el.click();
});
const alerts = await page.$$('ion-alert');
expect(alerts.length).toBe(1);
});
});