fix(input): clear button is not activated on swipe (#25825)

resolves #24857
This commit is contained in:
Liam DeBeasi
2022-08-29 16:41:02 -05:00
committed by GitHub
parent 527015184e
commit ff71ad492d
2 changed files with 53 additions and 8 deletions

View File

@ -402,12 +402,6 @@ export class Input implements ComponentInterface {
this.isComposing = false;
};
private clearTextOnEnter = (ev: KeyboardEvent) => {
if (ev.key === 'Enter') {
this.clearTextInput(ev);
}
};
private clearTextInput = (ev?: Event) => {
if (this.clearInput && !this.readonly && !this.disabled && ev) {
ev.preventDefault();
@ -496,8 +490,15 @@ export class Input implements ComponentInterface {
aria-label="reset"
type="button"
class="input-clear-icon"
onPointerDown={this.clearTextInput}
onKeyDown={this.clearTextOnEnter}
onPointerDown={(ev) => {
/**
* This prevents mobile browsers from
* blurring the input when the clear
* button is activated.
*/
ev.preventDefault();
}}
onClick={this.clearTextInput}
/>
)}
</Host>

View File

@ -157,3 +157,47 @@ test.describe('input: basic', () => {
});
});
});
test.describe('input: clear button', () => {
test.beforeEach(({ skip }) => {
skip.rtl();
});
test('should clear the input when pressed', async ({ page }) => {
await page.setContent(`
<ion-input value="abc" clear-input="true"></ion-input>
`);
const input = page.locator('ion-input');
const clearButton = input.locator('.input-clear-icon');
await expect(input).toHaveJSProperty('value', 'abc');
await clearButton.click();
await page.waitForChanges();
await expect(input).toHaveJSProperty('value', '');
});
/**
* Note: This only tests the desktop focus behavior.
* Mobile browsers have different restrictions around
* focusing inputs, so these platforms should always
* be tested when making changes to the focus behavior.
*/
test('should keep the input focused when the clear button is pressed', async ({ page }) => {
await page.setContent(`
<ion-input value="abc" clear-input="true"></ion-searchbar>
`);
const input = page.locator('ion-input');
const nativeInput = input.locator('input');
const clearButton = input.locator('.input-clear-icon');
await input.click();
await expect(nativeInput).toBeFocused();
await clearButton.click();
await page.waitForChanges();
await expect(nativeInput).toBeFocused();
});
});