From 3b5f758318d7652fce5d797f8a1ed4d7b4378c2b Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Tue, 13 Mar 2018 22:17:12 +0100 Subject: [PATCH] fix(angular): create angular delegate --- angular/src/module.ts | 8 +++++--- angular/src/providers/angular-delegate.ts | 14 +++++++++++++- angular/src/providers/modal-controller.ts | 6 ++++-- angular/src/providers/popover-controller.ts | 16 ++++++++++++++-- angular/src/providers/toast-controller.ts | 2 +- 5 files changed, 37 insertions(+), 9 deletions(-) diff --git a/angular/src/module.ts b/angular/src/module.ts index 75cf6660bfc..0695393699d 100644 --- a/angular/src/module.ts +++ b/angular/src/module.ts @@ -69,6 +69,11 @@ import { ToastController } from './providers/toast-controller'; VirtualHeader, VirtualFooter ], + providers: [ + AngularDelegate, + ModalController, + PopoverController, + ], imports: [ CommonModule, ], @@ -81,9 +86,6 @@ export class IonicAngularModule { return { ngModule: IonicAngularModule, providers: [ - ModalController, - PopoverController, - AngularDelegate, AlertController, ActionSheetController, Events, diff --git a/angular/src/providers/angular-delegate.ts b/angular/src/providers/angular-delegate.ts index a3779b35ecb..a41a4fb504c 100644 --- a/angular/src/providers/angular-delegate.ts +++ b/angular/src/providers/angular-delegate.ts @@ -9,7 +9,19 @@ import { FrameworkDelegate } from '@ionic/core'; @Injectable() -export class AngularDelegate implements FrameworkDelegate { +export class AngularDelegate { + + constructor( + private appRef: ApplicationRef + ) {} + + create(cfr: ComponentFactoryResolver, injector: Injector) { + return new AngularFrameworkDelegate(cfr, injector, this.appRef); + } +} + + +export class AngularFrameworkDelegate implements FrameworkDelegate { private elRefMap = new WeakMap(); diff --git a/angular/src/providers/modal-controller.ts b/angular/src/providers/modal-controller.ts index 6a231ce0118..1bcd82b6735 100644 --- a/angular/src/providers/modal-controller.ts +++ b/angular/src/providers/modal-controller.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@angular/core'; +import { ComponentFactoryResolver, Injectable, Injector } from '@angular/core'; import { ModalOptions } from '@ionic/core'; import { OverlayBaseController } from '../util/overlay'; import { AngularDelegate } from './angular-delegate'; @@ -6,6 +6,8 @@ import { AngularDelegate } from './angular-delegate'; @Injectable() export class ModalController extends OverlayBaseController { constructor( + private cfr: ComponentFactoryResolver, + private injector: Injector, private angularDelegate: AngularDelegate, ) { super('ion-modal-controller'); @@ -14,7 +16,7 @@ export class ModalController extends OverlayBaseController { return super.create({ ...opts, - delegate: this.angularDelegate + delegate: this.angularDelegate.create(this.cfr, this.injector) }); } } diff --git a/angular/src/providers/popover-controller.ts b/angular/src/providers/popover-controller.ts index 221d58243b0..e43f0988b59 100644 --- a/angular/src/providers/popover-controller.ts +++ b/angular/src/providers/popover-controller.ts @@ -1,10 +1,22 @@ -import { Injectable } from '@angular/core'; +import { ComponentFactoryResolver, Injectable, Injector } from '@angular/core'; import { PopoverOptions } from '@ionic/core'; import { OverlayBaseController } from '../util/overlay'; +import { AngularDelegate } from './angular-delegate'; @Injectable() export class PopoverController extends OverlayBaseController { - constructor() { + constructor( + private cfr: ComponentFactoryResolver, + private injector: Injector, + private angularDelegate: AngularDelegate, + ) { super('ion-popover-controller'); } + + create(opts?: PopoverOptions): Promise { + return super.create({ + ...opts, + delegate: this.angularDelegate.create(this.cfr, this.injector) + }); + } } diff --git a/angular/src/providers/toast-controller.ts b/angular/src/providers/toast-controller.ts index fa2e461767e..50762e81fe9 100644 --- a/angular/src/providers/toast-controller.ts +++ b/angular/src/providers/toast-controller.ts @@ -5,6 +5,6 @@ import { OverlayBaseController } from '../util/overlay'; @Injectable() export class ToastController extends OverlayBaseController { constructor() { - super('ion-popover-controller'); + super('ion-toast-controller'); } }