Skip to content

Commit 48aed7f

Browse files
committed
fix(dialogs): ios option iosForceClosePresentedViewController
1 parent c554210 commit 48aed7f

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

src/dialogs/dialogs-common.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export interface MDCAlertControlerOptions {
2020
dismissOnBackgroundTap?: boolean;
2121
closeCallback?: Function;
2222
shouldResolveOnAction?: (result) => boolean;
23+
iosForceClosePresentedViewController?: boolean // iOS only: if a viewController is already presenting this will close it.If set to false an error will be thrown
2324
}
2425

2526
export function isDialogOptions(arg) {

src/dialogs/dialogs.ios.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,6 @@ function showUIAlertController(alertController: MDCAlertController, options: Dia
541541
}
542542
if (options.titleColor) {
543543
alertController.titleColor = options.titleColor.ios;
544-
// } else if (lblColor) {
545-
// alertController.titleColor = lblColor.ios;
546544
}
547545
if (options.titleIconTintColor) {
548546
alertController.titleIconTintColor = options.titleIconTintColor.ios;
@@ -584,13 +582,15 @@ function showUIAlertController(alertController: MDCAlertController, options: Dia
584582
if (currentView) {
585583
currentView = currentView.modal || currentView;
586584
let viewController = currentView.viewController;
587-
if (!viewController.presentedViewController && rootView.viewController.presentedViewController) {
585+
if (!viewController) {
586+
throw new Error("no_controller_to_show_dialog");
587+
}
588+
if (!viewController.presentedViewController && rootView.viewController.presentedViewController && !rootView.viewController.presentedViewController.beingDismissed) {
588589
viewController = rootView.viewController.presentedViewController;
589590
}
590591

591-
while (viewController.presentedViewController) {
592-
while (
593-
viewController.presentedViewController instanceof UIAlertController ||
592+
while (viewController.presentedViewController && !viewController.presentedViewController.beingDismissed) {
593+
while ( viewController.presentedViewController instanceof UIAlertController ||
594594
(viewController.presentedViewController['isAlertController'] && viewController.presentedViewController.presentedViewController)
595595
) {
596596
viewController = viewController.presentedViewController;
@@ -601,16 +601,26 @@ function showUIAlertController(alertController: MDCAlertController, options: Dia
601601
viewController = viewController.presentedViewController;
602602
}
603603
}
604-
let v;
605604
showingDialogs.push(alertController);
606-
if (viewController) {
605+
function block(){
607606
if (alertController.popoverPresentationController) {
608607
alertController.popoverPresentationController.sourceView = viewController.view;
609608
alertController.popoverPresentationController.sourceRect = CGRectMake(viewController.view.bounds.size.width / 2.0, viewController.view.bounds.size.height / 2.0, 1.0, 1.0);
610609
alertController.popoverPresentationController.permittedArrowDirections = 0 as any;
611610
}
612611
viewController.presentViewControllerAnimatedCompletion(alertController, true, null);
613612
}
613+
if (viewController.presentedViewController) {
614+
if (viewController.presentedViewController.beingDismissed || options.iosForceClosePresentedViewController === true) {
615+
viewController.dismissViewControllerAnimatedCompletion(true, () => {
616+
block();
617+
});
618+
} else {
619+
throw new Error("controller_already_presented");
620+
}
621+
} else {
622+
block();
623+
}
614624
return viewController;
615625
}
616626
throw new Error('no_controller_to_show_dialog');

0 commit comments

Comments
 (0)