LP#1775466 Retracting dynamic component for now
authorBill Erickson <berickxx@gmail.com>
Tue, 19 Jun 2018 15:21:57 +0000 (11:21 -0400)
committerBill Erickson <berickxx@gmail.com>
Wed, 5 Sep 2018 14:05:23 +0000 (10:05 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/common.module.ts
Open-ILS/src/eg2/src/app/share/print/print.component.ts
Open-ILS/src/eg2/src/app/share/util/dynamic.component.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html
Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts

index 89fef35..e04e003 100644 (file)
@@ -6,7 +6,6 @@ import {NgModule, ModuleWithProviders} from '@angular/core';
 import {RouterModule} from '@angular/router';
 import {FormsModule} from '@angular/forms';
 import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
-import {HttpClientModule} from '@angular/common/http';
 
 import {EventService} from '@eg/core/event.service';
 import {StoreService} from '@eg/core/store.service';
@@ -27,38 +26,30 @@ import {ConfirmDialogComponent} from '@eg/share/dialog/confirm.component';
 import {PromptDialogComponent} from '@eg/share/dialog/prompt.component';
 import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
 
-// DynamicComponent only works in JIT compilation mode.
-// Leaving for now as reference while considering alternatives
-import {DynamicComponent} from '@eg/share/util/dynamic.component';
-
 @NgModule({
   declarations: [
     PrintComponent,
     DialogComponent,
     ConfirmDialogComponent,
     PromptDialogComponent,
-    ProgressDialogComponent,
-    DynamicComponent
+    ProgressDialogComponent
   ],
   imports: [
     CommonModule,
     FormsModule,
     RouterModule,
-    HttpClientModule,
     NgbModule
   ],
   exports: [
     CommonModule,
     RouterModule,
-    HttpClientModule,
     NgbModule,
     FormsModule,
     PrintComponent,
     DialogComponent,
     ConfirmDialogComponent,
     PromptDialogComponent,
-    ProgressDialogComponent,
-    DynamicComponent
+    ProgressDialogComponent
   ]
 })
 
index 0270a8b..53762d6 100644 (file)
@@ -1,6 +1,5 @@
 import {Component, OnInit, TemplateRef, ElementRef} from '@angular/core';
 // See dynamic.component for details on why it's commented out.
-//import {DynamicComponent} from '@eg/share/util/dynamic.component';
 import {PrintService, PrintRequest} from './print.service';
 
 @Component({
diff --git a/Open-ILS/src/eg2/src/app/share/util/dynamic.component.ts b/Open-ILS/src/eg2/src/app/share/util/dynamic.component.ts
deleted file mode 100644 (file)
index 2f67671..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * WARNING: This component only works when using the JIT compiler.
- * Compiling --aot prevents the JitCompiler from working.
- */
-import {Component, OnInit, ViewChild, Input, Output, TemplateRef} from '@angular/core';
-import {Compiler, ViewContainerRef, NgModule, EventEmitter} from '@angular/core';
-import {HttpClient} from '@angular/common/http';
-
-/**
- * Render HTML content derived from a string or a URL path, 
- * interpolating the provided context data along the way.
- * 
- * Content text or URL values may be provided as Inputs or passed
- * directly to component build* methods.
- */
-
-@Component({
-  selector: 'eg-dynamic-component',
-  template: '<ng-container #container></ng-container>'
-})
-
-export class DynamicComponent implements OnInit {
-
-    @ViewChild('container', {read: ViewContainerRef})
-    private container: ViewContainerRef;
-
-    @Input() content: string;
-    @Input() contentUrl: string;
-    @Input() contextData: any;
-
-    // Emits true if the content was render-able, false otherwise
-    @Output() onComplete: EventEmitter<boolean>;
-
-    constructor(
-        private compiler: Compiler,
-        private http: HttpClient
-    ) {
-        console.warn("DynamicComponent only works in JIT compilation mode");
-        this.onComplete = new EventEmitter<boolean>();
-    }
-
-    ngOnInit() {
-        if (this.contentUrl) {
-            this.buildFromUrl(this.contentUrl, this.contextData);
-        } else if (this.content) {
-            this.buildFromString(this.content, this.contextData);
-        }
-    }
-
-    buildFromString(template: string, context: any = {}) {
-        try {
-            this.addComponent(template, context);
-        } catch (err) {
-            console.error(`Error rendering dynamic content: ${err}`);
-            this.onComplete.emit(false);
-            return;
-        }
-
-        this.onComplete.emit(true);
-    }
-
-    // Returns a promise which resolves if the requested URL
-    // was found and was render-able, rejected otherwise.
-    buildFromUrl(url: string, context: any = {}): Promise<void> {
-        return this.http.get(url, {responseType: 'text'}).toPromise()
-        .then(
-            html => {
-                console.debug(`Loaded dynamic content from: ${url}`);
-                try {
-                    this.addComponent(html, context);
-                } catch (err) {
-                    const msg = `Error rendering dynamic content: ${url}`;
-                    console.error(msg);
-                    this.onComplete.emit(false);
-                    return Promise.reject(msg);
-                }
-                this.onComplete.emit(true);
-            },
-            notFound => {
-                console.debug(
-                    `Unable to fetch dynamic component URL: ${url}`, notFound);    
-                this.onComplete.emit(false);
-            }
-        )
-    }
-
-    // Method below taken practically verbatim from
-    // https://stackoverflow.com/a/39507831
-    private addComponent(template: string, context: any) {
-        @Component({template}) class TemplateComponent {}
-        @NgModule({declarations: [TemplateComponent]}) class TemplateModule {}
-
-        const mod = 
-            this.compiler.compileModuleAndAllComponentsSync(TemplateModule);
-
-        const factory = mod.componentFactories.find(comp =>
-            comp.componentType === TemplateComponent
-        );
-
-        const component = this.container.createComponent(factory);
-        Object.assign(component.instance, context);
-
-        // If context changes at a later stage, the change detection
-        // may need to be triggered manually:
-        // component.changeDetectorRef.detectChanges();
-    }
-
-}
-
index b96a7ce..dbea15a 100644 (file)
 <button class="btn btn-secondary" (click)="doPrint()">Test Print</button>
 <ng-template #printTemplate let-context>Hello, {{context.world}}!</ng-template>
 
-
-<!--  Dynamic components only work with the JIT compiler.
-      Leaving globally disabled for now.
-<br/>
-<button class="btn btn-secondary" (click)="doDynamicPrint()">Test DynamicPrint</button>
-
-<br/><br/>
-
-<b>Dynamic content: </b>
-<eg-dynamic-component #dynamic></eg-dynamic-component>
-
-<br/>
-
-<b>Dynamic Complent via URL Inline</b>
-<eg-dynamic-component 
-  contentUrl="/test-template.html" 
-  [contextData]="{world:'world'}"
-  (onComplete)="renderLocal=!$event">
-</eg-dynamic-component>
-<div *ngIf="renderLocal">
-  <b>fall through local template: hello {{world}}</b>
-</div>
--->
-
 <br/><br/>
 
 <!-- grid stuff -->
index 46f2bd5..eb0fdb0 100644 (file)
@@ -13,7 +13,6 @@ import {OrgService} from '@eg/core/org.service';
 import {Pager} from '@eg/share/util/pager';
 import {DateSelectComponent} from '@eg/share/date-select/date-select.component';
 import {PrintService} from '@eg/share/print/print.service';
-//import {DynamicComponent} from '@eg/share/util/dynamic.component';
 
 @Component({
   templateUrl: 'sandbox.component.html'
@@ -29,9 +28,6 @@ export class SandboxComponent implements OnInit {
     @ViewChild('printTemplate')
     private printTemplate: TemplateRef<any>;
 
-    //@ViewChild('dynamic') private dynamic: DynamicComponent;
-    //@ViewChild('dynamicUrl') private dynamicUrl: DynamicComponent;
-
     // @ViewChild('helloStr') private helloStr: StringComponent;
 
     gridDataSource: GridDataSource = new GridDataSource();
@@ -85,15 +81,6 @@ export class SandboxComponent implements OnInit {
                 return cbt;
             }));
         };
-
-        /*
-        this.dynamic.buildFromString(
-            '<b>HELLO {{world}}</b>', {world: this.world});
-
-        // Assumes a file on the server at this URL
-        this.dynamicUrl.buildFromUrl(
-            '/test-template.html', {world: this.world});
-        */
     }
 
     doPrint() {
@@ -104,16 +91,6 @@ export class SandboxComponent implements OnInit {
         });
     }
 
-    doDynamicPrint() {
-        /*
-        this.printer.print({
-            templateString: '<b>DYNAMIC HELLO {{world}}</b>',
-            contextData: {world : this.world},
-            printContext: 'default'
-        });
-        */
-    }
-
     changeDate(date) {
         console.log('HERE WITH ' + date);
         this.testDate = date;