From 0030655c2977cc52a1f7bf728b5903458404c53d Mon Sep 17 00:00:00 2001 From: Dan Bucholtz Date: Wed, 16 Aug 2017 15:36:32 -0500 Subject: [PATCH] fix(navigation): unbroke the build --- .../animation-controller.tsx | 4 +- .../animation-interface.tsx | 3 + packages/core/src/components/nav/nav.tsx | 8 +- packages/core/src/index.d.ts | 3 +- .../core/src/navigation/framework-delegate.ts | 8 -- .../navigation/nav-controller-functions.ts | 45 +++++---- .../core/src/navigation/nav-controller.ts | 16 --- .../core/src/navigation/nav-interfaces.d.ts | 97 +++++++++++++++++++ packages/core/src/navigation/nav-utils.ts | 66 +------------ .../navigation/stencil-framework-delegate.ts | 3 +- .../navigation/transitions/dan-transition.ts | 25 ----- .../navigation/transitions/page-transition.ts | 31 ------ .../transitions/transition-controller.ts | 49 ---------- .../src/navigation/transitions/transition.ts | 35 ------- .../src/navigation/view-controller-impl.ts | 6 +- .../core/src/navigation/view-controller.ts | 28 ------ 16 files changed, 134 insertions(+), 293 deletions(-) delete mode 100644 packages/core/src/navigation/framework-delegate.ts delete mode 100644 packages/core/src/navigation/nav-controller.ts create mode 100644 packages/core/src/navigation/nav-interfaces.d.ts delete mode 100644 packages/core/src/navigation/transitions/dan-transition.ts delete mode 100644 packages/core/src/navigation/transitions/page-transition.ts delete mode 100644 packages/core/src/navigation/transitions/transition-controller.ts delete mode 100644 packages/core/src/navigation/transitions/transition.ts delete mode 100644 packages/core/src/navigation/view-controller.ts diff --git a/packages/core/src/components/animation-controller/animation-controller.tsx b/packages/core/src/components/animation-controller/animation-controller.tsx index d1242894c1..8ff99cb5f1 100644 --- a/packages/core/src/components/animation-controller/animation-controller.tsx +++ b/packages/core/src/components/animation-controller/animation-controller.tsx @@ -1,12 +1,12 @@ import { Component, Method } from '@stencil/core'; -import { Animation, AnimationBuilder } from './animation-interface'; +import { Animation, AnimationBuilder, AnimationController } from './animation-interface'; import { Animator } from './animator'; @Component({ tag: 'ion-animation-controller' }) -export class AnimationController { +export class AnimationControllerImpl implements AnimationController { @Method() create(animationBuilder?: AnimationBuilder, baseElm?: any): Promise { diff --git a/packages/core/src/components/animation-controller/animation-interface.tsx b/packages/core/src/components/animation-controller/animation-interface.tsx index d58d9743d6..15d6580103 100644 --- a/packages/core/src/components/animation-controller/animation-interface.tsx +++ b/packages/core/src/components/animation-controller/animation-interface.tsx @@ -1,3 +1,6 @@ +export interface AnimationController { + create(animationBuilder?: AnimationBuilder, baseElm?: any): Promise; +} export interface Animation { new (): Animation; diff --git a/packages/core/src/components/nav/nav.tsx b/packages/core/src/components/nav/nav.tsx index 188197690d..b14ba4cdc9 100644 --- a/packages/core/src/components/nav/nav.tsx +++ b/packages/core/src/components/nav/nav.tsx @@ -1,11 +1,7 @@ import { Component, Element, Method, Prop } from '@stencil/core'; -import { Transition } from '../../navigation/transitions/transition'; -import { NavController } from '../../navigation/nav-controller'; +import { FrameworkDelegate, NavController, NavOptions, ViewController } from '../../navigation/nav-interfaces'; import { getNextNavId, getViews, pop, push, setRoot } from '../../navigation/nav-controller-functions'; -import { NavOptions } from '../../navigation/nav-utils'; -import { ViewController } from '../../navigation/view-controller'; -import { FrameworkDelegate } from '../../navigation/framework-delegate'; import { delegate as defaultStencilDelegate } from '../../navigation/stencil-framework-delegate'; @Component({ @@ -21,7 +17,7 @@ export class Nav implements NavController { transitionId?: number; isViewInitialized?: boolean; isPortal: boolean; - swipeToGoBackTransition: Transition; + swipeToGoBackTransition: any; // TODO Transition childNavs?: NavController[]; @Prop() root: any; diff --git a/packages/core/src/index.d.ts b/packages/core/src/index.d.ts index 49df3133ea..f53677d038 100644 --- a/packages/core/src/index.d.ts +++ b/packages/core/src/index.d.ts @@ -1,5 +1,4 @@ -import { AnimationController } from './components/animation-controller/animation-controller'; -import { Animation, AnimationBuilder } from './components/animation-controller/animation-interface'; +import { Animation, AnimationBuilder, AnimationController } from './components/animation-controller/animation-interface'; import { ActionSheet, ActionSheetButton, ActionSheetEvent, ActionSheetOptions } from './components/action-sheet/action-sheet'; import { ActionSheetController } from './components/action-sheet-controller/action-sheet-controller'; import { Backdrop } from './components/backdrop/backdrop' diff --git a/packages/core/src/navigation/framework-delegate.ts b/packages/core/src/navigation/framework-delegate.ts deleted file mode 100644 index 71f9a9fd7f..0000000000 --- a/packages/core/src/navigation/framework-delegate.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { NavController } from './nav-controller'; -import { ViewController } from './view-controller'; - -export interface FrameworkDelegate { - attachViewToDom(navController: NavController, enteringView: ViewController): Promise; - removeViewFromDom(navController: NavController, leavingView: ViewController): Promise; - destroy(viewController: ViewController): Promise; -} \ No newline at end of file diff --git a/packages/core/src/navigation/nav-controller-functions.ts b/packages/core/src/navigation/nav-controller-functions.ts index ffc3c8db5e..5cbf44fea6 100644 --- a/packages/core/src/navigation/nav-controller-functions.ts +++ b/packages/core/src/navigation/nav-controller-functions.ts @@ -1,6 +1,13 @@ -import { AnimationOptions } from '../animations/interfaces'; -import { FrameworkDelegate } from './framework-delegate'; -import { NavController } from './nav-controller'; +import { AnimationOptions } from '../components/animation-controller/animation-interface'; +import { + ComponentDataPair, + FrameworkDelegate, + NavController, + NavOptions, + NavResult, + TransitionInstruction, + ViewController +} from './nav-interfaces'; import { DIRECTION_BACK, @@ -8,26 +15,17 @@ import { STATE_ATTACHED, STATE_DESTROYED, STATE_INITIALIZED, - ComponentDataPair, - NavOptions, - NavResult, - TransitionInstruction, isViewController, setZIndex, toggleHidden } from './nav-utils'; -import { ViewController } from './view-controller'; import { ViewControllerImpl } from './view-controller-impl'; import { assert, isDef, isNumber } from '../utils/helpers'; import { NAV_ID_START, VIEW_ID_START } from '../utils/ids'; -import { DanTransition } from './transitions/dan-transition'; -import { Transition } from './transitions/transition'; -import { destroy, getRootTransitionId, nextId } from './transitions/transition-controller'; - const queueMap = new Map(); // public api @@ -302,7 +300,8 @@ export function loadViewAndTransition(nav: NavController, enteringView: ViewCont }); } - nav.transitionId = getRootTransitionId(nav) || nextId(); + // TODO - transitionId + nav.transitionId = 1; //getRootTransitionId(nav) || nextId(); // create the transition options const animationOpts: AnimationOptions = { @@ -314,7 +313,10 @@ export function loadViewAndTransition(nav: NavController, enteringView: ViewCont ev: ti.opts.event, }; - const transition = new DanTransition(enteringView, leavingView, animationOpts); + // TODO - need transition here + const transition: any = { + opts: animationOpts + };// new DanTransition(enteringView, leavingView, animationOpts); //const transition = getTransition(stateData.transitionId, enteringView, animationOpts); @@ -342,11 +344,13 @@ export function loadViewAndTransition(nav: NavController, enteringView: ViewCont } return promiseToReturn; }).then(() => { - return executeAsyncTransition(nav, transition, enteringView, leavingView, ti.opts); + // TODO - get the shouldAnimate param from the config + return executeAsyncTransition(nav, transition, enteringView, leavingView, ti.opts, false); }); } -export function executeAsyncTransition(nav: NavController, transition: Transition, enteringView: ViewController, leavingView: ViewController, opts: NavOptions): Promise { +// TODO - transition type +export function executeAsyncTransition(nav: NavController, transition: any, enteringView: ViewController, leavingView: ViewController, opts: NavOptions, configShouldAnimate: boolean): Promise { assert(nav.transitioning, 'must be transitioning'); nav.transitionId = null; setZIndex(nav.isPortal, enteringView, leavingView, opts.direction); @@ -364,7 +368,7 @@ export function executeAsyncTransition(nav: NavController, transition: Transitio transition.init() const shouldNotAnimate = (!nav.isViewInitialized && nav.views.length === 1) && !nav.isPortal; - if (Ionic.config.get('animate') === false || shouldNotAnimate) { + if (configShouldAnimate === false || shouldNotAnimate) { opts.animate = false; } @@ -412,7 +416,8 @@ export function executeAsyncTransition(nav: NavController, transition: Transitio }); } -export function transitionFinish(nav: NavController, transition: Transition, opts: NavOptions): NavResult { +// TODO - transition type +export function transitionFinish(nav: NavController, transition: any, opts: NavOptions): NavResult { if (transition.hasCompleted) { transition.enteringView && transition.enteringView.didEnter(); transition.leavingView && transition.leavingView.didLeave(); @@ -423,7 +428,9 @@ export function transitionFinish(nav: NavController, transition: Transition, opt } if (transition.isRoot()) { - destroy(transition.transitionId); + + // TODO - destroy the transition object + //destroy(transition.transitionId); // TODO - enable app diff --git a/packages/core/src/navigation/nav-controller.ts b/packages/core/src/navigation/nav-controller.ts deleted file mode 100644 index d5e3413534..0000000000 --- a/packages/core/src/navigation/nav-controller.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ViewController } from './view-controller'; -import { Transition } from './transitions/transition'; - -export interface NavController { - id: number; - element: HTMLElement; - views?: ViewController[]; - transitioning?: boolean; - destroyed?: boolean; - transitionId?: number; - isViewInitialized?: boolean; - isPortal?: boolean; - swipeToGoBackTransition?: Transition; - getParent(): NavController; - childNavs?: NavController[]; // TODO - make nav container -} diff --git a/packages/core/src/navigation/nav-interfaces.d.ts b/packages/core/src/navigation/nav-interfaces.d.ts new file mode 100644 index 0000000000..3ca803d501 --- /dev/null +++ b/packages/core/src/navigation/nav-interfaces.d.ts @@ -0,0 +1,97 @@ +export interface FrameworkDelegate { + attachViewToDom(navController: NavController, enteringView: ViewController): Promise; + removeViewFromDom(navController: NavController, leavingView: ViewController): Promise; + destroy(viewController: ViewController): Promise; +} + +export interface NavController { + id: number; + element: HTMLElement; + views?: ViewController[]; + transitioning?: boolean; + destroyed?: boolean; + transitionId?: number; + isViewInitialized?: boolean; + isPortal?: boolean; + swipeToGoBackTransition?: any; // TODO Transition + getParent(): NavController; + childNavs?: NavController[]; // TODO - make nav container +} + +export interface ViewController { + id: string; + component: any; + data: any; + element: HTMLElement; + instance: any; + state: number; + nav: NavController; + frameworkDelegate: FrameworkDelegate; + dismissProxy?: any; + + // life cycle events + willLeave(unload: boolean): void; + didLeave(): void; + willEnter(): void; + didEnter(): void; + willLoad(): void; + didLoad(): void; + willUnload():void; + + destroy(): Promise; + getTransitionName(direction: string): string; + onDidDismiss: (data: any, role: string) => void; + onWillDismiss: (data: any, role: string) => void; +} + +export interface NavResult { + hasCompleted: boolean; + requiresTransition: boolean; + enteringName?: string; + leavingName?: string; + direction?: string; +} + +export interface NavOptions { + animate?: boolean; + animation?: string; + direction?: string; + duration?: number; + easing?: string; + id?: string; + keyboardClose?: boolean; + progressAnimation?: boolean; + disableApp?: boolean; + event?: any; + updateUrl?: boolean; + isNavRoot?: boolean; +} + +export interface TransitionInstruction { + opts: NavOptions; + insertStart?: number; + insertViews?: any[]; + removeView?: any; // TODO make VC + removeStart?: number; + removeCount?: number; + resolve?: (hasCompleted: boolean) => void; + reject?: (rejectReason: Error) => void; + done?: Function; + leavingRequiresTransition?: boolean; + enteringRequiresTransition?: boolean; + requiresTransition?: boolean; + id?: number; + nav?: NavController; + delegate?: FrameworkDelegate; +} + +export interface NavResult { + hasCompleted: boolean; + requiresTransition: boolean; + direction?: string; +} + +export interface ComponentDataPair { + page: any; + params: any; +} diff --git a/packages/core/src/navigation/nav-utils.ts b/packages/core/src/navigation/nav-utils.ts index 42813e971b..cc0be049a6 100644 --- a/packages/core/src/navigation/nav-utils.ts +++ b/packages/core/src/navigation/nav-utils.ts @@ -1,7 +1,4 @@ -import { FrameworkDelegate } from './framework-delegate'; -import { NavController } from './nav-controller'; -import { ViewController } from './view-controller'; -import { Transition } from './transitions/transition'; +import { ViewController } from './nav-interfaces'; export const STATE_NEW = 1; export const STATE_INITIALIZED = 2; @@ -17,73 +14,12 @@ export const DIRECTION_SWITCH = 'switch'; export const NAV = 'nav'; export const TABS = 'tabs'; -export interface NavResult { - hasCompleted: boolean; - requiresTransition: boolean; - enteringName?: string; - leavingName?: string; - direction?: string; -} -export interface NavControllerData { - transitioning?: boolean; - destroyed?: boolean; - views?: ViewController[]; - childNavs?: NavController[]; - isPortal?: boolean; - isViewInitialized?: boolean; - transitionId?: number; - swipeToGoBackTransition?: Transition; -} - -export interface NavOptions { - animate?: boolean; - animation?: string; - direction?: string; - duration?: number; - easing?: string; - id?: string; - keyboardClose?: boolean; - progressAnimation?: boolean; - disableApp?: boolean; - event?: any; - updateUrl?: boolean; - isNavRoot?: boolean; -} - -export interface TransitionInstruction { - opts: NavOptions; - insertStart?: number; - insertViews?: any[]; - removeView?: any; // TODO make VC - removeStart?: number; - removeCount?: number; - resolve?: (hasCompleted: boolean) => void; - reject?: (rejectReason: Error) => void; - done?: Function; - leavingRequiresTransition?: boolean; - enteringRequiresTransition?: boolean; - requiresTransition?: boolean; - id?: number; - nav?: NavController; - delegate?: FrameworkDelegate; -} - -export interface NavResult { - hasCompleted: boolean; - requiresTransition: boolean; - direction?: string; -} export function isViewController(object: any): boolean { return !!(object && object.didLoad && object.willUnload); } -export interface ComponentDataPair { - page: any; - params: any; -} - export function setZIndex(_isPortal: boolean, _enteringView: ViewController, _leavingView: ViewController, _direction: string) { // TODO } diff --git a/packages/core/src/navigation/stencil-framework-delegate.ts b/packages/core/src/navigation/stencil-framework-delegate.ts index 0d31975d76..d4186b7f5c 100644 --- a/packages/core/src/navigation/stencil-framework-delegate.ts +++ b/packages/core/src/navigation/stencil-framework-delegate.ts @@ -1,5 +1,4 @@ -import { NavController } from './nav-controller'; -import { ViewController } from './view-controller'; +import { NavController, ViewController } from './nav-interfaces'; export function attachViewToDom(nav: NavController, enteringView: ViewController): Promise { return new Promise((resolve) => { diff --git a/packages/core/src/navigation/transitions/dan-transition.ts b/packages/core/src/navigation/transitions/dan-transition.ts deleted file mode 100644 index a2c7205a08..0000000000 --- a/packages/core/src/navigation/transitions/dan-transition.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Transition } from './transition'; -import { ViewController } from '../view-controller'; - -import { Animation } from '../../animations/animation'; -import { AnimationOptions } from '../../animations/interfaces'; - -export class DanTransition extends Transition { - constructor(public enteringView: ViewController, public leavingView: ViewController, opts: AnimationOptions = {}) { - super(enteringView, leavingView, opts); - } - - init() { - super.init(); - - const enteringAnimation = new Animation(this.enteringView.element); - enteringAnimation.fromTo('display', '', ''); - this.add(enteringAnimation); - - if (this.leavingView) { - const leavingAnimation = new Animation(this.leavingView.element); - leavingAnimation.fromTo('display', '', 'none'); - this.add(leavingAnimation); - } - } -} \ No newline at end of file diff --git a/packages/core/src/navigation/transitions/page-transition.ts b/packages/core/src/navigation/transitions/page-transition.ts deleted file mode 100644 index baccb756f1..0000000000 --- a/packages/core/src/navigation/transitions/page-transition.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Animation } from '../../animations/animation'; -import { Transition } from './transition'; - -/** - * @hidden - */ -export class PageTransition extends Transition { - enteringPage: Animation; - - init() { - if (this.enteringView) { - this.enteringPage = new Animation(this.enteringView.element); - this.add(this.enteringPage.beforeAddClass('show-page')); - - // Resize content before transition starts - this.beforeAddRead(() => { - // TODO this.enteringView.readReady.emit(); - }); - this.beforeAddWrite(() => { - // TODO this.enteringView.writeReady.emit(); - }); - } - } - - destroy() { - super.destroy(); - this.enteringPage && this.enteringPage.destroy(); - this.enteringPage = null; - } - -} diff --git a/packages/core/src/navigation/transitions/transition-controller.ts b/packages/core/src/navigation/transitions/transition-controller.ts deleted file mode 100644 index 6c0998ec13..0000000000 --- a/packages/core/src/navigation/transitions/transition-controller.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { NavController } from '../nav-controller'; -import { ViewController } from '../view-controller'; -import { AnimationOptions } from '../../animations/interfaces'; - -import { Transition } from './transition'; -import { isDef } from '../../utils/helpers'; - -export function getRootTransitionId(nav: NavController): number { - nav = nav.getParent(); - while (nav) { - const transitionId = nav.transitionId; - if (isDef(transitionId)) { - return transitionId; - } - nav = nav.getParent(); - } - return -1; -} - -export function nextId() { - return transitionIds++; -} - -export function destroy(transitionId: number) { - const transition = transitions.get(transitionId); - if (transition) { - transition.destroy(); - transitions.delete(transitionId); - } -} - -export function getTransition(transitionId: number, viewController: ViewController, opts: AnimationOptions): Transition { - const TransitionConstructor: any = Ionic.config.get(opts.animation) || Ionic.config.get('ios-transition'); - - const transition = new TransitionConstructor(viewController.element) as Transition; - transition.transitionId = transitionId; - - const rootTransition = transitions.get(transitionId); - if (rootTransition) { - rootTransition.add(transition); - } else { - transitions.set(transitionId, transition); - } - - return transition; -} - -let transitionIds = 0; -let transitions = new Map(); \ No newline at end of file diff --git a/packages/core/src/navigation/transitions/transition.ts b/packages/core/src/navigation/transitions/transition.ts deleted file mode 100644 index d1c32ff83f..0000000000 --- a/packages/core/src/navigation/transitions/transition.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Animation } from '../../animations/animation'; -import { AnimationOptions } from '../../animations/interfaces'; - -import { ViewController } from '../view-controller'; - -export class Transition extends Animation { - - private transitionStart: Function; - parent: Transition; - transitionId: number; - - constructor(public enteringView: ViewController, public leavingView: ViewController, public opts: AnimationOptions) { - super(); - } - - init() { - } - - registerStart(transitionStart: Function) { - this.transitionStart = transitionStart; - } - - start() { - this.transitionStart && this.transitionStart(); - this.transitionStart = null; - - // bubble up start - this.parent && this.parent.start(); - } - - destroy() { - super.destroy(); - this.parent = this.transitionStart = null; - } -} diff --git a/packages/core/src/navigation/view-controller-impl.ts b/packages/core/src/navigation/view-controller-impl.ts index 8f680c6b23..96a9b87762 100644 --- a/packages/core/src/navigation/view-controller-impl.ts +++ b/packages/core/src/navigation/view-controller-impl.ts @@ -1,12 +1,8 @@ +import { FrameworkDelegate, NavController, ViewController } from './nav-interfaces'; import { STATE_ATTACHED, STATE_DESTROYED, STATE_INITIALIZED } from './nav-utils'; -import { NavController } from './nav-controller'; -import { ViewController } from './view-controller'; - import { assert } from '../utils/helpers'; -import { FrameworkDelegate } from './framework-delegate'; - export class ViewControllerImpl implements ViewController { id: string; diff --git a/packages/core/src/navigation/view-controller.ts b/packages/core/src/navigation/view-controller.ts deleted file mode 100644 index 2d03455047..0000000000 --- a/packages/core/src/navigation/view-controller.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NavController } from './nav-controller'; -import { FrameworkDelegate } from './framework-delegate'; - -export interface ViewController { - id: string; - component: any; - data: any; - element: HTMLElement; - instance: any; - state: number; - nav: NavController; - frameworkDelegate: FrameworkDelegate; - dismissProxy?: any; - - // life cycle events - willLeave(unload: boolean): void; - didLeave(): void; - willEnter(): void; - didEnter(): void; - willLoad(): void; - didLoad(): void; - willUnload():void; - - destroy(): Promise; - getTransitionName(direction: string): string; - onDidDismiss: (data: any, role: string) => void; - onWillDismiss: (data: any, role: string) => void; -}