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
JavaScript
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=