refactor(navigation): update nav, tabs and types to use interfaces more

This commit is contained in:
Dan Bucholtz
2017-11-22 15:40:38 -06:00
parent 956ec9ce2d
commit 2e2c9008af
6 changed files with 27 additions and 21 deletions

View File

@ -1,6 +1,6 @@
/* it is very important to keep this interface in sync with ./nav */
import { NavOptions, ViewController } from '../../index';
import { NavOptions, PublicViewController } from '../../index';
export interface PublicNav {
push(component: any, data?: any, opts?: NavOptions): Promise<any>;
@ -11,14 +11,14 @@ export interface PublicNav {
popToRoot(opts?: NavOptions): Promise<any>;
popTo(indexOrViewCtrl: any, opts?: NavOptions): Promise<any>;
removeIndex(startIndex: number, removeCount?: number, opts?: NavOptions): Promise<any>;
removeView(viewController: ViewController, opts?: NavOptions): Promise<any>;
removeView(viewController: PublicViewController, opts?: NavOptions): Promise<any>;
setPages(componentDataPairs: any[], opts?: NavOptions): Promise<any>;
getActive?(): ViewController;
getPrevious?(view?: ViewController): ViewController;
canGoBack?(nav: PublicNav): boolean;
getActive?(): PublicViewController;
getPrevious?(view?: PublicViewController): PublicViewController;
canGoBack?(): boolean;
canSwipeBack?(): boolean;
getFirstView?(): ViewController;
getFirstView?(): PublicViewController;
element?: HTMLElement;
}

View File

@ -7,6 +7,7 @@ import {
NavOptions,
NavState,
PublicNav,
PublicViewController,
RouterEntries,
RouterEntry,
ViewController
@ -79,7 +80,7 @@ export class Nav implements PublicNav {
}
}
getViews(): ViewController[] {
getViews(): PublicViewController[] {
return getViews(this);
}
@ -124,7 +125,7 @@ export class Nav implements PublicNav {
}
@Method()
removeView(viewController: ViewController, opts?: NavOptions): Promise<any> {
removeView(viewController: PublicViewController, opts?: NavOptions): Promise<any> {
return removeViewImpl(this, viewController, opts);
}
@ -134,18 +135,18 @@ export class Nav implements PublicNav {
}
@Method()
getActive(): ViewController {
getActive(): PublicViewController {
return getActiveImpl(this);
}
@Method()
getPrevious(view?: ViewController): ViewController {
return getPreviousImpl(this, view);
getPrevious(view?: PublicViewController): PublicViewController {
return getPreviousImpl(this, view as ViewController);
}
@Method()
canGoBack(nav: Nav): boolean {
return nav.views && nav.views.length > 0;
canGoBack(): boolean {
return canGoBackImpl(this);
}
@Method()
@ -154,7 +155,7 @@ export class Nav implements PublicNav {
}
@Method()
getFirstView(): ViewController {
getFirstView(): PublicViewController {
return getFirstView(this);
}
@ -278,9 +279,9 @@ export function removeImpl(nav: Nav, startIndex: number, removeCount: number, op
});
}
export function removeViewImpl(nav: Nav, viewController: ViewController, opts?: NavOptions) {
export function removeViewImpl(nav: Nav, viewController: PublicViewController, opts?: NavOptions) {
return getNavController(nav).then(() => {
return nav.navController.removeView(nav, viewController, opts);
return nav.navController.removeView(nav, viewController as ViewController, opts);
});
}
@ -298,6 +299,10 @@ export function getNavController(nav: Nav): Promise<any> {
return isReady(nav.navController as any as HTMLElement);
}
export function canGoBackImpl(nav: Nav) {
return nav.views && nav.views.length > 0;
}
export function navInitializedImpl(potentialParent: Nav, event: CustomEvent) {
if (potentialParent.element !== event.target) {
// set the parent on the child nav that dispatched the event

View File

@ -1,5 +1,5 @@
import { Component, Element, Event, EventEmitter, Method, Prop, PropDidChange, State } from '@stencil/core';
import { StencilElement, ViewController } from '../../index';
import { PublicViewController, StencilElement } from '../../index';
/**
* @name Tab
@ -214,7 +214,7 @@ export class Tab {
}
@Method()
getActive(): Promise<ViewController> {
getActive(): Promise<PublicViewController> {
return this.nav.then(nav => nav && nav.getActive());
}

View File

@ -481,7 +481,7 @@ export function initializeViewBeforeTransition(nav: Nav, ti: TransitionInstructi
return startTransaction(ti).then(() => {
const viewControllers = convertComponentToViewController(nav, ti);
ti.insertViews = viewControllers;
leavingView = ti.nav.getActive();
leavingView = ti.nav.getActive() as ViewController;
enteringView = getEnteringView(ti, ti.nav, leavingView);
if (!leavingView && !enteringView) {

View File

@ -88,6 +88,7 @@ export interface TransitionBuilder {
}
export interface PublicViewController {
id?: string;
component?: any;
instance?: any;
element?: HTMLElement;

View File

@ -40,7 +40,7 @@ export function setZIndex(nav: Nav, enteringView: ViewController, leavingView: V
return;
}
leavingView = leavingView || nav.getPrevious(enteringView);
leavingView = leavingView || nav.getPrevious(enteringView) as ViewController;
if (leavingView && isDef(leavingView.zIndex)) {
if (direction === DIRECTION_BACK) {
@ -176,7 +176,7 @@ export function getActiveImpl(nav: Nav): ViewController {
export function getPreviousImpl(nav: Nav, viewController: ViewController): ViewController {
if (!viewController) {
viewController = nav.getActive();
viewController = nav.getActive() as ViewController;
}
return nav.views[nav.views.indexOf(viewController) - 1];
}