fix(nav): fixes empty stack condition

This commit is contained in:
Manu Mtz.-Almeida
2016-11-14 20:53:13 +01:00
parent b93799713f
commit 909293a735
2 changed files with 11 additions and 10 deletions

View File

@ -340,7 +340,7 @@ export class InputBase extends Ion {
// do not allow any clicks while it's scrolling // do not allow any clicks while it's scrolling
var scrollDuration = getScrollAssistDuration(scrollData.scrollAmount); var scrollDuration = getScrollAssistDuration(scrollData.scrollAmount);
this._app.setEnabled(false, scrollDuration); this._app.setEnabled(false, scrollDuration);
this._nav && this._nav.setTransitioning(true, scrollDuration); this._nav && this._nav.setTransitioning(true);
// temporarily move the focus to the focus holder so the browser // temporarily move the focus to the focus holder so the browser
// doesn't freak out while it's trying to get the input in place // doesn't freak out while it's trying to get the input in place

View File

@ -335,15 +335,6 @@ export class NavControllerBase extends Ion implements NavController {
_postViewInit(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction, resolve: TransitionResolveFn) { _postViewInit(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction, resolve: TransitionResolveFn) {
assert(leavingView || enteringView, 'Both leavingView and enteringView are null'); assert(leavingView || enteringView, 'Both leavingView and enteringView are null');
if (!enteringView && !this._isPortal) {
console.warn(`You can't remove all the pages in the navigation stack. nav.pop() is probably called too many times.`,
this, this.getNativeElement());
ti.reject && ti.reject('navigation stack needs at least one root page');
return false;
}
const opts = ti.opts || {}; const opts = ti.opts || {};
const insertViews = ti.insertViews; const insertViews = ti.insertViews;
const removeStart = ti.removeStart; const removeStart = ti.removeStart;
@ -366,6 +357,16 @@ export class NavControllerBase extends Ion implements NavController {
opts.direction = opts.direction || DIRECTION_BACK; opts.direction = opts.direction || DIRECTION_BACK;
} }
const finalBalance = this._views.length + (insertViews ? insertViews.length : 0) - (destroyQueue ? destroyQueue.length : 0);
assert(finalBalance >= 0, 'final balance can not be negative');
if (finalBalance === 0 && !this._isPortal) {
console.warn(`You can't remove all the pages in the navigation stack. nav.pop() is probably called too many times.`,
this, this.getNativeElement());
ti.reject && ti.reject('navigation stack needs at least one root page');
return false;
}
// there are views to insert // there are views to insert
if (insertViews) { if (insertViews) {
// manually set the new view's id if an id was passed in the options // manually set the new view's id if an id was passed in the options