Skip to content

Commit 1dd73aa

Browse files
committed
fix(nav): correctly set zIndex when there's a previous view
1 parent 24443c3 commit 1dd73aa

File tree

3 files changed

+73
-7
lines changed

3 files changed

+73
-7
lines changed

ionic/components/alert/test/dismiss/index.ts

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ export class E2EPage {
1313
title: 'Not logged in',
1414
message: 'Sign in to continue.',
1515
buttons: [
16-
{
17-
text: 'Cancel',
18-
role: 'cancel'
19-
},
2016
{
2117
text: 'Sign in',
2218
handler: () => {
@@ -45,7 +41,39 @@ export class E2EPage {
4541
</ion-content>
4642
`
4743
})
48-
class AnotherPage {}
44+
class AnotherPage {
45+
46+
constructor(private nav: NavController) {}
47+
48+
onPageDidEnter() {
49+
this.showConfirm();
50+
}
51+
52+
showConfirm() {
53+
const alert = Alert.create({
54+
title: `Hi there`,
55+
buttons: [
56+
{
57+
text: 'Go Back',
58+
role: 'cancel',
59+
handler: () => {
60+
alert.dismiss().then(() => {
61+
this.nav.pop();
62+
})
63+
}
64+
},
65+
{
66+
text: 'Stay Here',
67+
handler: () => {
68+
console.log('Stay Here');
69+
}
70+
}
71+
]
72+
});
73+
this.nav.present(alert);
74+
}
75+
76+
}
4977

5078

5179
@App({

ionic/components/nav/nav-controller.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1641,7 +1641,19 @@ export class NavController extends Ion {
16411641
if (enteringView) {
16421642
// get the leaving view, which could be in various states
16431643
if (!leavingView || !leavingView.isLoaded()) {
1644-
enteringView.setZIndex(INIT_ZINDEX, this._renderer);
1644+
// the leavingView is a mocked view, either we're
1645+
// actively transitioning or it's the initial load
1646+
1647+
var previousView = this.getPrevious(enteringView);
1648+
if (previousView && previousView.isLoaded()) {
1649+
// we found a better previous view to reference
1650+
// use this one instead
1651+
enteringView.setZIndex(previousView.zIndex + 1, this._renderer);
1652+
1653+
} else {
1654+
// this is the initial view
1655+
enteringView.setZIndex(INIT_ZINDEX, this._renderer);
1656+
}
16451657

16461658
} else if (direction === 'back') {
16471659
// moving back

ionic/components/nav/test/nav-controller.spec.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,33 @@ export function run() {
585585
});
586586

587587
describe('_setZIndex', () => {
588-
it('should set zIndex 10 on first entering view', () => {
588+
589+
it('should set zIndex off of the previous view to the entering view is loaded and the leavingView is not loaded', () => {
590+
let leavingView = new ViewController();
591+
leavingView.zIndex = 100;
592+
leavingView._loaded = true;
593+
let enteringView = new ViewController();
594+
enteringView.setPageRef({});
595+
596+
nav._views = [leavingView, enteringView];
597+
598+
nav._setZIndex(enteringView, leavingView, 'forward');
599+
expect(enteringView.zIndex).toEqual(101);
600+
});
601+
602+
it('should set zIndex 100 when leaving view is not loaded', () => {
603+
let leavingView = new ViewController();
604+
leavingView._loaded = false;
605+
let enteringView = new ViewController();
606+
enteringView.setPageRef({});
607+
608+
nav._views = [leavingView, enteringView];
609+
610+
nav._setZIndex(enteringView, leavingView, 'forward');
611+
expect(enteringView.zIndex).toEqual(100);
612+
});
613+
614+
it('should set zIndex 100 on first entering view', () => {
589615
let enteringView = new ViewController();
590616
enteringView.setPageRef({});
591617
nav._setZIndex(enteringView, null, 'forward');

0 commit comments

Comments
 (0)