mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-16 18:17:31 +08:00
feat(select): add event for when overlay is dismissed (#24099)
This commit is contained in:
@ -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"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
4
core/src/components.d.ts
vendored
4
core/src/components.d.ts
vendored
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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
|
||||||
|
@ -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();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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'
|
||||||
|
Reference in New Issue
Block a user