diff --git a/packages/angular/src/control-value-accessors/boolean-value-accessor.ts b/packages/angular/src/control-value-accessors/boolean-value-accessor.ts index 4f42918860..63e0340aaf 100644 --- a/packages/angular/src/control-value-accessors/boolean-value-accessor.ts +++ b/packages/angular/src/control-value-accessors/boolean-value-accessor.ts @@ -1,5 +1,8 @@ import { Directive, ElementRef, HostListener, Renderer2 } from '@angular/core'; -import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { + ControlValueAccessor, + NG_VALUE_ACCESSOR +} from '@angular/forms'; @Directive({ /* tslint:disable-next-line:directive-selector */ diff --git a/packages/angular/src/types/angular-view-controller.ts b/packages/angular/src/types/angular-view-controller.ts index 2788ec3b72..f13c2dd4d0 100644 --- a/packages/angular/src/types/angular-view-controller.ts +++ b/packages/angular/src/types/angular-view-controller.ts @@ -12,5 +12,4 @@ export interface AngularViewController extends PublicViewController { componentRef?: ComponentRef; instance?: any; angularHostElement?: HTMLElement; - -} \ No newline at end of file +} diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index f0a5d11b66..295b495a23 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -14,9 +14,9 @@ } }, "@stencil/core": { - "version": "0.0.8-10", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.8-10.tgz", - "integrity": "sha512-SfZt+0bFaicndqncbWwRIOD1bb4ds3YUjAEYBiouonI392WxKLKHIHo1l2ONgtqQLa8yKrR71ZUatbdfRIXyXw==", + "version": "0.0.8-12", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.0.8-12.tgz", + "integrity": "sha512-hVHl80opV8ZKa5dCyLZW0V+Fx8ePsTzIjZrQ94+bSsDvi6y3Eo4IK1CEsoG5CxfwZhQQyqE42miWkI9sRZRdsw==", "dev": true, "requires": { "chokidar": "1.7.0", diff --git a/packages/core/src/components.d.ts b/packages/core/src/components.d.ts index 544f745549..e26d68c548 100644 --- a/packages/core/src/components.d.ts +++ b/packages/core/src/components.d.ts @@ -1622,8 +1622,8 @@ declare global { export interface IonModalAttributes extends HTMLAttributes { mode?: string; color?: string; - component?: string; - componentProps?: any; + component?: any; + data?: any; cssClass?: string; enableBackdropDismiss?: boolean; modalId?: string; diff --git a/packages/core/src/components/modal/modal.tsx b/packages/core/src/components/modal/modal.tsx index 8941b0c300..cbb48cb38c 100644 --- a/packages/core/src/components/modal/modal.tsx +++ b/packages/core/src/components/modal/modal.tsx @@ -62,8 +62,8 @@ export class Modal { @Prop({ context: 'config' }) config: Config; @Prop() mode: string; @Prop() color: string; - @Prop() component: string; - @Prop() componentProps: any = {}; + @Prop() component: any; + @Prop() data: any = {}; @Prop() cssClass: string; @Prop() enableBackdropDismiss: boolean = true; @@ -161,15 +161,7 @@ export class Modal { } render() { - const ThisComponent = this.component; - - let userCssClasses = 'ion-page'; - if (this.cssClass) { - userCssClasses += ` ${this.cssClass}`; - } - const dialogClasses = createThemedClasses(this.mode, this.color, 'modal-wrapper'); - return [
- -
]; } @@ -194,8 +181,8 @@ export class Modal { export interface ModalOptions { - component: string; - componentProps?: any; + component: any; + data?: any; showBackdrop?: boolean; enableBackdropDismiss?: boolean; enterAnimation?: AnimationBuilder; diff --git a/packages/core/src/components/modal/readme.md b/packages/core/src/components/modal/readme.md index c74341c305..ebdf406700 100644 --- a/packages/core/src/components/modal/readme.md +++ b/packages/core/src/components/modal/readme.md @@ -19,11 +19,6 @@ string #### component -string - - -#### componentProps - any @@ -32,6 +27,11 @@ any string +#### data + +any + + #### enableBackdropDismiss boolean @@ -76,11 +76,6 @@ string #### component -string - - -#### componentProps - any @@ -89,6 +84,11 @@ any string +#### data + +any + + #### enableBackdropDismiss boolean diff --git a/packages/core/src/components/nav-controller/dom-framework-delegate.tsx b/packages/core/src/components/nav-controller/dom-framework-delegate.tsx index 9473cc2d82..093f2c830f 100644 --- a/packages/core/src/components/nav-controller/dom-framework-delegate.tsx +++ b/packages/core/src/components/nav-controller/dom-framework-delegate.tsx @@ -1,18 +1,28 @@ -import { FrameworkDelegate, Nav, ViewController } from '../../index'; +import { FrameworkDelegate, FrameworkMountingData, } from '../../index'; +import { isString } from '../../utils/helpers'; export class DomFrameworkDelegate implements FrameworkDelegate { - attachViewToDom(nav: Nav, enteringView: ViewController): Promise { + attachViewToDom(parentElement: HTMLElement, tagOrElement: string | HTMLElement, classesToAdd: string[] = []): Promise { + return new Promise((resolve) => { - const usersElement = document.createElement(enteringView.component) as HTMLElement; - usersElement.classList.add('ion-page'); - enteringView.element = usersElement; - nav.element.appendChild(usersElement); - resolve(); + const usersElement = (isString(tagOrElement) ? document.createElement(tagOrElement) : tagOrElement) as HTMLElement; + if (classesToAdd.length) { + for (const clazz of classesToAdd) { + usersElement.classList.add(clazz); + } + } + parentElement.appendChild(usersElement); + resolve({ + element: usersElement + }); }); } - removeViewFromDom(nav: Nav, leavingView: ViewController): Promise { - nav.element.removeChild(leavingView.element); - return Promise.resolve(); + removeViewFromDom(parentElement: HTMLElement, childElement: HTMLElement): Promise { + + parentElement.removeChild(childElement); + return Promise.resolve({ + element: null + }); } } diff --git a/packages/core/src/components/nav/test/basic/index.html b/packages/core/src/components/nav/test/basic/index.html index fd94a0b9cd..dd23c5c03c 100644 --- a/packages/core/src/components/nav/test/basic/index.html +++ b/packages/core/src/components/nav/test/basic/index.html @@ -6,11 +6,10 @@ - - + - + + + \ 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 cd701ff6aa..e0be8e7468 100644 --- a/packages/core/src/navigation/nav-controller-functions.ts +++ b/packages/core/src/navigation/nav-controller-functions.ts @@ -446,7 +446,8 @@ export function fireViewWillLifecycles(enteringView: ViewController, leavingView export function attachViewToDom(nav: Nav, enteringView: ViewController, delegate: FrameworkDelegate) { if (enteringView && enteringView.state === STATE_NEW) { - return delegate.attachViewToDom(nav, enteringView).then(() => { + return delegate.attachViewToDom(nav.element, enteringView.component, ['ion-page']).then((mountingData) => { + Object.assign(enteringView, mountingData); enteringView.state = STATE_ATTACHED; }); } diff --git a/packages/core/src/navigation/nav-interfaces.ts b/packages/core/src/navigation/nav-interfaces.ts index ca369cc99d..46a2cf4118 100644 --- a/packages/core/src/navigation/nav-interfaces.ts +++ b/packages/core/src/navigation/nav-interfaces.ts @@ -6,8 +6,13 @@ import { } from '../index'; export interface FrameworkDelegate { - attachViewToDom(navController: Nav, enteringView: ViewController): Promise; - removeViewFromDom(navController: Nav, leavingView: ViewController): Promise; + + attachViewToDom(elementOrContainerToMountTo: any, elementOrComponentToMount: any, classesToAdd?: string[]): Promise; + removeViewFromDom(elementOrContainerToUnmountFrom: any, elementOrComponentToUnmount: any): Promise; +} + +export interface FrameworkMountingData { + element: HTMLElement; } export interface NavContainer { diff --git a/packages/core/src/navigation/view-controller.ts b/packages/core/src/navigation/view-controller.ts index e0a27dbeb7..7543b142c9 100644 --- a/packages/core/src/navigation/view-controller.ts +++ b/packages/core/src/navigation/view-controller.ts @@ -99,7 +99,7 @@ export function dismiss(navCtrl: any, dismissProxy: any, data?: any, role?: stri export function destroy(viewController: ViewController, delegate?: FrameworkDelegate): Promise { assert(viewController.state !== STATE_DESTROYED, 'view state must be attached'); - return delegate ? delegate.removeViewFromDom(viewController.nav, viewController) : Promise.resolve().then(() => { + return delegate ? delegate.removeViewFromDom(viewController.nav.element, viewController.element) : Promise.resolve().then(() => { if (viewController.component) { // TODO - consider removing classes and styles as thats what we do in ionic-angular diff --git a/packages/demos/angular/package-lock.json b/packages/demos/angular/package-lock.json index 81d012d921..9e0ee5fdd5 100644 --- a/packages/demos/angular/package-lock.json +++ b/packages/demos/angular/package-lock.json @@ -1,5 +1,5 @@ { - "name": "demo", + "name": "@ionic/angular-demo", "version": "0.0.0", "lockfileVersion": 1, "requires": true,