fix(nav): correctly set zIndex when there's a previous view

This commit is contained in:
Adam Bradley
2016-03-12 05:05:29 -06:00
parent 24443c3b53
commit 1dd73aac7a
3 changed files with 73 additions and 7 deletions

View File

@ -13,10 +13,6 @@ export class E2EPage {
title: 'Not logged in',
message: 'Sign in to continue.',
buttons: [
{
text: 'Cancel',
role: 'cancel'
},
{
text: 'Sign in',
handler: () => {
@ -45,7 +41,39 @@ export class E2EPage {
</ion-content>
`
})
class AnotherPage {}
class AnotherPage {
constructor(private nav: NavController) {}
onPageDidEnter() {
this.showConfirm();
}
showConfirm() {
const alert = Alert.create({
title: `Hi there`,
buttons: [
{
text: 'Go Back',
role: 'cancel',
handler: () => {
alert.dismiss().then(() => {
this.nav.pop();
})
}
},
{
text: 'Stay Here',
handler: () => {
console.log('Stay Here');
}
}
]
});
this.nav.present(alert);
}
}
@App({

View File

@ -1641,7 +1641,19 @@ export class NavController extends Ion {
if (enteringView) {
// get the leaving view, which could be in various states
if (!leavingView || !leavingView.isLoaded()) {
// the leavingView is a mocked view, either we're
// actively transitioning or it's the initial load
var previousView = this.getPrevious(enteringView);
if (previousView && previousView.isLoaded()) {
// we found a better previous view to reference
// use this one instead
enteringView.setZIndex(previousView.zIndex + 1, this._renderer);
} else {
// this is the initial view
enteringView.setZIndex(INIT_ZINDEX, this._renderer);
}
} else if (direction === 'back') {
// moving back

View File

@ -585,7 +585,33 @@ export function run() {
});
describe('_setZIndex', () => {
it('should set zIndex 10 on first entering view', () => {
it('should set zIndex off of the previous view to the entering view is loaded and the leavingView is not loaded', () => {
let leavingView = new ViewController();
leavingView.zIndex = 100;
leavingView._loaded = true;
let enteringView = new ViewController();
enteringView.setPageRef({});
nav._views = [leavingView, enteringView];
nav._setZIndex(enteringView, leavingView, 'forward');
expect(enteringView.zIndex).toEqual(101);
});
it('should set zIndex 100 when leaving view is not loaded', () => {
let leavingView = new ViewController();
leavingView._loaded = false;
let enteringView = new ViewController();
enteringView.setPageRef({});
nav._views = [leavingView, enteringView];
nav._setZIndex(enteringView, leavingView, 'forward');
expect(enteringView.zIndex).toEqual(100);
});
it('should set zIndex 100 on first entering view', () => {
let enteringView = new ViewController();
enteringView.setPageRef({});
nav._setZIndex(enteringView, null, 'forward');