mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-20 12:29:55 +08:00
refactor(navigation): update nav, tabs and types to use interfaces more
This commit is contained in:
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* it is very important to keep this interface in sync with ./nav */
|
/* 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 {
|
export interface PublicNav {
|
||||||
push(component: any, data?: any, opts?: NavOptions): Promise<any>;
|
push(component: any, data?: any, opts?: NavOptions): Promise<any>;
|
||||||
@ -11,14 +11,14 @@ export interface PublicNav {
|
|||||||
popToRoot(opts?: NavOptions): Promise<any>;
|
popToRoot(opts?: NavOptions): Promise<any>;
|
||||||
popTo(indexOrViewCtrl: any, opts?: NavOptions): Promise<any>;
|
popTo(indexOrViewCtrl: any, opts?: NavOptions): Promise<any>;
|
||||||
removeIndex(startIndex: number, removeCount?: number, 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>;
|
setPages(componentDataPairs: any[], opts?: NavOptions): Promise<any>;
|
||||||
|
|
||||||
getActive?(): ViewController;
|
getActive?(): PublicViewController;
|
||||||
getPrevious?(view?: ViewController): ViewController;
|
getPrevious?(view?: PublicViewController): PublicViewController;
|
||||||
canGoBack?(nav: PublicNav): boolean;
|
canGoBack?(): boolean;
|
||||||
canSwipeBack?(): boolean;
|
canSwipeBack?(): boolean;
|
||||||
getFirstView?(): ViewController;
|
getFirstView?(): PublicViewController;
|
||||||
|
|
||||||
element?: HTMLElement;
|
element?: HTMLElement;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import {
|
|||||||
NavOptions,
|
NavOptions,
|
||||||
NavState,
|
NavState,
|
||||||
PublicNav,
|
PublicNav,
|
||||||
|
PublicViewController,
|
||||||
RouterEntries,
|
RouterEntries,
|
||||||
RouterEntry,
|
RouterEntry,
|
||||||
ViewController
|
ViewController
|
||||||
@ -79,7 +80,7 @@ export class Nav implements PublicNav {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getViews(): ViewController[] {
|
getViews(): PublicViewController[] {
|
||||||
return getViews(this);
|
return getViews(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +125,7 @@ export class Nav implements PublicNav {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Method()
|
@Method()
|
||||||
removeView(viewController: ViewController, opts?: NavOptions): Promise<any> {
|
removeView(viewController: PublicViewController, opts?: NavOptions): Promise<any> {
|
||||||
return removeViewImpl(this, viewController, opts);
|
return removeViewImpl(this, viewController, opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,18 +135,18 @@ export class Nav implements PublicNav {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Method()
|
@Method()
|
||||||
getActive(): ViewController {
|
getActive(): PublicViewController {
|
||||||
return getActiveImpl(this);
|
return getActiveImpl(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Method()
|
@Method()
|
||||||
getPrevious(view?: ViewController): ViewController {
|
getPrevious(view?: PublicViewController): PublicViewController {
|
||||||
return getPreviousImpl(this, view);
|
return getPreviousImpl(this, view as ViewController);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Method()
|
@Method()
|
||||||
canGoBack(nav: Nav): boolean {
|
canGoBack(): boolean {
|
||||||
return nav.views && nav.views.length > 0;
|
return canGoBackImpl(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Method()
|
@Method()
|
||||||
@ -154,7 +155,7 @@ export class Nav implements PublicNav {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Method()
|
@Method()
|
||||||
getFirstView(): ViewController {
|
getFirstView(): PublicViewController {
|
||||||
return getFirstView(this);
|
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 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);
|
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) {
|
export function navInitializedImpl(potentialParent: Nav, event: CustomEvent) {
|
||||||
if (potentialParent.element !== event.target) {
|
if (potentialParent.element !== event.target) {
|
||||||
// set the parent on the child nav that dispatched the event
|
// set the parent on the child nav that dispatched the event
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Component, Element, Event, EventEmitter, Method, Prop, PropDidChange, State } from '@stencil/core';
|
import { Component, Element, Event, EventEmitter, Method, Prop, PropDidChange, State } from '@stencil/core';
|
||||||
import { StencilElement, ViewController } from '../../index';
|
import { PublicViewController, StencilElement } from '../../index';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name Tab
|
* @name Tab
|
||||||
@ -214,7 +214,7 @@ export class Tab {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Method()
|
@Method()
|
||||||
getActive(): Promise<ViewController> {
|
getActive(): Promise<PublicViewController> {
|
||||||
return this.nav.then(nav => nav && nav.getActive());
|
return this.nav.then(nav => nav && nav.getActive());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,7 +481,7 @@ export function initializeViewBeforeTransition(nav: Nav, ti: TransitionInstructi
|
|||||||
return startTransaction(ti).then(() => {
|
return startTransaction(ti).then(() => {
|
||||||
const viewControllers = convertComponentToViewController(nav, ti);
|
const viewControllers = convertComponentToViewController(nav, ti);
|
||||||
ti.insertViews = viewControllers;
|
ti.insertViews = viewControllers;
|
||||||
leavingView = ti.nav.getActive();
|
leavingView = ti.nav.getActive() as ViewController;
|
||||||
enteringView = getEnteringView(ti, ti.nav, leavingView);
|
enteringView = getEnteringView(ti, ti.nav, leavingView);
|
||||||
|
|
||||||
if (!leavingView && !enteringView) {
|
if (!leavingView && !enteringView) {
|
||||||
|
@ -88,6 +88,7 @@ export interface TransitionBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface PublicViewController {
|
export interface PublicViewController {
|
||||||
|
id?: string;
|
||||||
component?: any;
|
component?: any;
|
||||||
instance?: any;
|
instance?: any;
|
||||||
element?: HTMLElement;
|
element?: HTMLElement;
|
||||||
|
@ -40,7 +40,7 @@ export function setZIndex(nav: Nav, enteringView: ViewController, leavingView: V
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
leavingView = leavingView || nav.getPrevious(enteringView);
|
leavingView = leavingView || nav.getPrevious(enteringView) as ViewController;
|
||||||
|
|
||||||
if (leavingView && isDef(leavingView.zIndex)) {
|
if (leavingView && isDef(leavingView.zIndex)) {
|
||||||
if (direction === DIRECTION_BACK) {
|
if (direction === DIRECTION_BACK) {
|
||||||
@ -176,7 +176,7 @@ export function getActiveImpl(nav: Nav): ViewController {
|
|||||||
|
|
||||||
export function getPreviousImpl(nav: Nav, viewController: ViewController): ViewController {
|
export function getPreviousImpl(nav: Nav, viewController: ViewController): ViewController {
|
||||||
if (!viewController) {
|
if (!viewController) {
|
||||||
viewController = nav.getActive();
|
viewController = nav.getActive() as ViewController;
|
||||||
}
|
}
|
||||||
return nav.views[nav.views.indexOf(viewController) - 1];
|
return nav.views[nav.views.indexOf(viewController) - 1];
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user