feat(select): add event for when overlay is dismissed (#24099)

This commit is contained in:
Hans Krywalsky
2021-12-14 15:39:25 +01:00
committed by GitHub
parent 03dd372933
commit c1ecf94e4e
7 changed files with 38 additions and 7 deletions

View File

@ -1568,6 +1568,10 @@ export declare interface IonSelect extends Components.IonSelect {
* Emitted when the selection is cancelled. * Emitted when the selection is cancelled.
*/ */
ionCancel: EventEmitter<CustomEvent<void>>; ionCancel: EventEmitter<CustomEvent<void>>;
/**
* Emitted when the overlay is dismissed.
*/
ionDismiss: EventEmitter<CustomEvent<void>>;
/** /**
* Emitted when the select has focus. * Emitted when the select has focus.
*/ */
@ -1595,7 +1599,7 @@ export class IonSelect {
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
c.detach(); c.detach();
this.el = r.nativeElement; this.el = r.nativeElement;
proxyOutputs(this, this.el, ['ionChange', 'ionCancel', 'ionFocus', 'ionBlur']); proxyOutputs(this, this.el, ["ionChange", "ionCancel", "ionDismiss", "ionFocus", "ionBlur"]);
} }
} }

View File

@ -1172,6 +1172,7 @@ ion-select,method,open,open(event?: UIEvent | undefined) => Promise<any>
ion-select,event,ionBlur,void,true ion-select,event,ionBlur,void,true
ion-select,event,ionCancel,void,true ion-select,event,ionCancel,void,true
ion-select,event,ionChange,SelectChangeEventDetail<any>,true ion-select,event,ionChange,SelectChangeEventDetail<any>,true
ion-select,event,ionDismiss,void,true
ion-select,event,ionFocus,void,true ion-select,event,ionFocus,void,true
ion-select,css-prop,--padding-bottom ion-select,css-prop,--padding-bottom
ion-select,css-prop,--padding-end ion-select,css-prop,--padding-end

View File

@ -6147,6 +6147,10 @@ declare namespace LocalJSX {
* Emitted when the value has changed. * Emitted when the value has changed.
*/ */
"onIonChange"?: (event: CustomEvent<SelectChangeEventDetail>) => void; "onIonChange"?: (event: CustomEvent<SelectChangeEventDetail>) => void;
/**
* Emitted when the overlay is dismissed.
*/
"onIonDismiss"?: (event: CustomEvent<void>) => void;
/** /**
* Emitted when the select has focus. * Emitted when the select has focus.
*/ */

View File

@ -1385,12 +1385,13 @@ export default defineComponent({
## Events ## Events
| Event | Description | Type | | Event | Description | Type |
| ----------- | ---------------------------------------- | ------------------------------------------- | | ------------ | ---------------------------------------- | ------------------------------------------- |
| `ionBlur` | Emitted when the select loses focus. | `CustomEvent<void>` | | `ionBlur` | Emitted when the select loses focus. | `CustomEvent<void>` |
| `ionCancel` | Emitted when the selection is cancelled. | `CustomEvent<void>` | | `ionCancel` | Emitted when the selection is cancelled. | `CustomEvent<void>` |
| `ionChange` | Emitted when the value has changed. | `CustomEvent<SelectChangeEventDetail<any>>` | | `ionChange` | Emitted when the value has changed. | `CustomEvent<SelectChangeEventDetail<any>>` |
| `ionFocus` | Emitted when the select has focus. | `CustomEvent<void>` | | `ionDismiss` | Emitted when the overlay is dismissed. | `CustomEvent<void>` |
| `ionFocus` | Emitted when the select has focus. | `CustomEvent<void>` |
## Methods ## Methods

View File

@ -107,6 +107,11 @@ export class Select implements ComponentInterface {
*/ */
@Event() ionCancel!: EventEmitter<void>; @Event() ionCancel!: EventEmitter<void>;
/**
* Emitted when the overlay is dismissed.
*/
@Event() ionDismiss!: EventEmitter<void>;
/** /**
* Emitted when the select has focus. * Emitted when the select has focus.
*/ */
@ -176,6 +181,7 @@ export class Select implements ComponentInterface {
overlay.onDidDismiss().then(() => { overlay.onDidDismiss().then(() => {
this.overlay = undefined; this.overlay = undefined;
this.isExpanded = false; this.isExpanded = false;
this.ionDismiss.emit();
this.setFocus(); this.setFocus();
}); });

View File

@ -10,6 +10,10 @@ test('select: basic', async () => {
// Gender Alert Select // Gender Alert Select
let select = await page.find('#gender'); let select = await page.find('#gender');
// add an event spy to the select
const ionDismiss = await select.spyOnEvent('ionDismiss');
await select.click(); await select.click();
let alert = await page.find('ion-alert'); let alert = await page.find('ion-alert');
@ -20,6 +24,8 @@ test('select: basic', async () => {
await alert.callMethod('dismiss'); await alert.callMethod('dismiss');
expect(ionDismiss).toHaveReceivedEvent();
// Skittles Action Sheet Select // Skittles Action Sheet Select
select = await page.find('#skittles'); select = await page.find('#skittles');
await select.click(); await select.click();
@ -32,6 +38,8 @@ test('select: basic', async () => {
await actionSheet.callMethod('dismiss'); await actionSheet.callMethod('dismiss');
expect(ionDismiss).toHaveReceivedEvent();
// Custom Alert Select // Custom Alert Select
select = await page.find('#customAlertSelect'); select = await page.find('#customAlertSelect');
await select.click(); await select.click();
@ -44,6 +52,8 @@ test('select: basic', async () => {
await alert.callMethod('dismiss'); await alert.callMethod('dismiss');
expect(ionDismiss).toHaveReceivedEvent();
// Custom Popover Select // Custom Popover Select
select = await page.find('#customPopoverSelect'); select = await page.find('#customPopoverSelect');
await select.click(); await select.click();
@ -72,6 +82,8 @@ test('select: basic', async () => {
await popover.callMethod('dismiss'); await popover.callMethod('dismiss');
expect(ionDismiss).toHaveReceivedEvent();
// Custom Action Sheet Select // Custom Action Sheet Select
select = await page.find('#customActionSheetSelect'); select = await page.find('#customActionSheetSelect');
await select.click(); await select.click();
@ -84,6 +96,8 @@ test('select: basic', async () => {
await actionSheet.callMethod('dismiss'); await actionSheet.callMethod('dismiss');
expect(ionDismiss).toHaveReceivedEvent();
for (const compare of compares) { for (const compare of compares) {
expect(compare).toMatchScreenshot(); expect(compare).toMatchScreenshot();
} }

View File

@ -699,6 +699,7 @@ export const IonSelect = /*@__PURE__*/ defineContainer<JSX.IonSelect>('ion-selec
'value', 'value',
'ionChange', 'ionChange',
'ionCancel', 'ionCancel',
'ionDismiss',
'ionFocus', 'ionFocus',
'ionBlur', 'ionBlur',
'ionStyle' 'ionStyle'