feat(select): close select programatically

* implement ability to close select programmatically

* refactor(select): made changes based on PR feedback, namely assigning overlay to the overlay property at then end of the open function, applying DeMorgan's Law to a condition, and returning the overlay dismiss promise from the close function

* refactor(select): made additional changes to closing select component programmatically to resolve issue 11318
This commit is contained in:
Hayden Braxton
2017-04-30 20:34:38 -04:00
committed by Manu MA
parent 2afc5cfeda
commit a04b577f1d

View File

@ -151,6 +151,7 @@ export class Select extends BaseInput<any> implements OnDestroy {
_multi: boolean = false; _multi: boolean = false;
_options: QueryList<Option>; _options: QueryList<Option>;
_overlay: ActionSheet | Alert | Popover;
_texts: string[] = []; _texts: string[] = [];
_text: string = ''; _text: string = '';
@ -364,6 +365,7 @@ export class Select extends BaseInput<any> implements OnDestroy {
overlay.present(selectOptions); overlay.present(selectOptions);
this._fireFocus(); this._fireFocus();
overlay.onDidDismiss((value: any) => { overlay.onDidDismiss((value: any) => {
this._fireBlur(); this._fireBlur();
@ -371,9 +373,23 @@ export class Select extends BaseInput<any> implements OnDestroy {
this.value = value; this.value = value;
this.ionChange.emit(value); this.ionChange.emit(value);
} }
this._overlay = undefined;
}); });
this._overlay = overlay;
} }
/**
* Close the select interface.
*/
close() {
if (!this._overlay || !this.isFocus()) {
return;
}
return this._overlay.dismiss();
}
/** /**
* @input {boolean} If true, the element can accept multiple values. * @input {boolean} If true, the element can accept multiple values.