UNPKG

dynamic-mat-table

Version:

dynamic-mat-table is an Angular component for presenting large and complex data with a lightning fast performance (at least 10x faster) and excellent level of control over the presentation.

83 lines 9.21 kB
import { Compiler, ComponentFactoryResolver, Directive, EventEmitter, Input, ViewContainerRef } from '@angular/core'; import { DynamicMatTableComponent } from '../../dynamic-mat-table/dynamic-mat-table.component'; export class DynamicCellDirective { constructor(compiler, cfr, vc, parent) { this.compiler = compiler; this.cfr = cfr; this.vc = vc; this.parent = parent; this.componentRef = null; } ngOnChanges(changes) { if (this.componentRef === null || this.componentRef === undefined) { this.initComponent(); } // pass input parameters if (changes.column && changes.column.currentValue) { this.componentRef.instance.column = this.column; } if (changes.row && changes.row.currentValue) { this.componentRef.instance.row = this.row; } if (changes.onRowEvent && changes.onRowEvent.currentValue) { this.componentRef.instance.onRowEvent = this.onRowEvent; } } ngOnInit() { } ngOnDestroy() { if (this.componentRef) { this.componentRef.destroy(); } } initComponent() { try { const componentFactory = this.cfr.resolveComponentFactory(this.component); this.componentRef = this.vc.createComponent(componentFactory); this.updateInput(); } catch (e) { console.warn(e); } } updateInput() { if (this.parent) { this.componentRef.instance.parent = this.parent; } if (this.column) { this.componentRef.instance.column = this.column; } if (this.row) { this.componentRef.instance.row = this.row; } if (this.onRowEvent) { this.componentRef.instance.onRowEvent = this.onRowEvent; } } } /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DynamicCellDirective.decorators = [ { type: Directive, args: [{ selector: '[dynamicCell]' },] } ]; /** * @type {function(): !Array<(null|{ * type: ?, * decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>), * })>} * @nocollapse */ DynamicCellDirective.ctorParameters = () => [ { type: Compiler }, { type: ComponentFactoryResolver }, { type: ViewContainerRef }, { type: DynamicMatTableComponent } ]; /** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DynamicCellDirective.propDecorators = { component: [{ type: Input }], column: [{ type: Input }], row: [{ type: Input }], onRowEvent: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jZWxsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2R5bmFtaWMtbWF0LXRhYmxlL3NyYy9saWIvY29yZXMvZHluYW1pYy1jZWxsL2R5bmFtaWMtY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBZ0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQStDLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhMLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBUS9GLE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsWUFDUyxRQUFrQixFQUNqQixHQUE2QixFQUM3QixFQUFvQixFQUNwQixNQUFxQztRQUh0QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2pCLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQzdCLE9BQUUsR0FBRixFQUFFLENBQWtCO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQStCO1FBTi9DLGlCQUFZLEdBQStCLElBQUksQ0FBQztJQU81QyxDQUFDO0lBRUwsV0FBVyxDQUFDLE9BQXNCO1FBRWhDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQ2pFO1lBQ0UsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO1FBQ0Qsd0JBQXdCO1FBQ3hCLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFDakQ7WUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNqRDtRQUNELElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFDM0M7WUFDRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQWdCLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDcEQ7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQ3pEO1lBQ0csSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFnQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ2xFO0lBQ0gsQ0FBQztJQUVELFFBQVEsS0FBSyxDQUFDO0lBRWQsV0FBVztRQUVULElBQUksSUFBSSxDQUFDLFlBQVksRUFDckI7WUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFFWCxJQUNBO1lBQ0UsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFlLGdCQUFnQixDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO1FBQUMsT0FBTyxDQUFDLEVBQ1Y7WUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFFVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQ2Y7WUFDRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQXlCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDbkU7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQ2Y7WUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNqRDtRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsRUFDWjtZQUNHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBeUIsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUM3RDtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFDbkI7WUFDRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQXlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDM0U7SUFDSCxDQUFDOzs7O1lBaEZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTthQUMxQjs7Ozs7Ozs7OztZQVRRLFFBQVE7WUFBRSx3QkFBd0I7WUFBNkYsZ0JBQWdCO1lBRS9JLHdCQUF3Qjs7Ozt3QkFVOUIsS0FBSztxQkFDTCxLQUFLO2tCQUNMLEtBQUs7eUJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVyLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTWF0VGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9keW5hbWljLW1hdC10YWJsZS9keW5hbWljLW1hdC10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLWZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSVJvd0V2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXJvdy5tb2RlbCc7XHJcbmltcG9ydCB7IElEeW5hbWljQ2VsbCB9IGZyb20gJy4vSUR5bmFtaWNDZWxsJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2R5bmFtaWNDZWxsXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNDZWxsRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxyXG57XHJcbiAgQElucHV0KCkgY29tcG9uZW50OiBhbnk7XHJcbiAgQElucHV0KCkgY29sdW1uOiBUYWJsZUZpZWxkPGFueT47XHJcbiAgQElucHV0KCkgcm93OiBhbnk7XHJcbiAgQElucHV0KCkgb25Sb3dFdmVudDogRXZlbnRFbWl0dGVyPElSb3dFdmVudD47XHJcbiAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8SUR5bmFtaWNDZWxsPiA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBpbGVyOiBDb21waWxlcixcclxuICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIHZjOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSBwYXJlbnQ6IER5bmFtaWNNYXRUYWJsZUNvbXBvbmVudDxhbnk+XHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWRcclxuICB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgPT09IG51bGwgfHwgdGhpcy5jb21wb25lbnRSZWYgPT09IHVuZGVmaW5lZClcclxuICAgIHtcclxuICAgICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XHJcbiAgICB9XHJcbiAgICAvLyBwYXNzIGlucHV0IHBhcmFtZXRlcnNcclxuICAgIGlmIChjaGFuZ2VzLmNvbHVtbiAmJiBjaGFuZ2VzLmNvbHVtbi5jdXJyZW50VmFsdWUpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbHVtbiA9IHRoaXMuY29sdW1uO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMucm93ICYmIGNoYW5nZXMucm93LmN1cnJlbnRWYWx1ZSlcclxuICAgIHtcclxuICAgICAgKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSkucm93ID0gdGhpcy5yb3c7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy5vblJvd0V2ZW50ICYmIGNoYW5nZXMub25Sb3dFdmVudC5jdXJyZW50VmFsdWUpXHJcbiAgICB7XHJcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpLm9uUm93RXZlbnQgPSB0aGlzLm9uUm93RXZlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHsgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkXHJcbiAge1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKVxyXG4gICAge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0Q29tcG9uZW50KClcclxuICB7XHJcbiAgICB0cnlcclxuICAgIHtcclxuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PElEeW5hbWljQ2VsbD4odGhpcy5jb21wb25lbnQpO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmMuY3JlYXRlQ29tcG9uZW50PElEeW5hbWljQ2VsbD4oY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAgIHRoaXMudXBkYXRlSW5wdXQoKTtcclxuICAgIH0gY2F0Y2ggKGUpXHJcbiAgICB7XHJcbiAgICAgIGNvbnNvbGUud2FybihlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUlucHV0KClcclxuICB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQpXHJcbiAgICB7XHJcbiAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBJRHluYW1pY0NlbGwpLnBhcmVudCA9IHRoaXMucGFyZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29sdW1uKVxyXG4gICAge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb2x1bW4gPSB0aGlzLmNvbHVtbjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJvdylcclxuICAgIHtcclxuICAgICAgKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIElEeW5hbWljQ2VsbCkucm93ID0gdGhpcy5yb3c7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vblJvd0V2ZW50KVxyXG4gICAge1xyXG4gICAgICAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgSUR5bmFtaWNDZWxsKS5vblJvd0V2ZW50ID0gdGhpcy5vblJvd0V2ZW50O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=