ngx-dynamic-dashboard
Version:
an dashboard lib for angular 10
48 lines • 5.91 kB
JavaScript
import { Component, ComponentFactoryResolver, Input, ViewChild, ViewContainerRef } from '@angular/core';
import { GadgetInstanceService } from './grid.service';
import { GadgetFactory } from '../add-gadget/gadget-factory';
/*
this class handles the dynamic creation of components
*/
export class CellComponent {
constructor(cfr, gadgetInstanceService) {
this.cfr = cfr;
this.gadgetInstanceService = gadgetInstanceService;
}
ngOnInit() {
/*
create component instance dynamically
*/
const component = GadgetFactory.getComponentType(this.gadgetType);
if (component) {
const compFactory = this.cfr.resolveComponentFactory(component);
const gadgetRef = this.viewContainerRef.createComponent(compFactory);
/*
we need to pass the input parameters (instance id and config) back into the newly created component.
*/
gadgetRef.instance.configureGadget(this.gadgetInstanceId, this.gadgetConfig, this.gadgetTags);
/*
add concrete component to service for tracking
*/
this.gadgetInstanceService.addInstance(gadgetRef);
}
}
}
CellComponent.decorators = [
{ type: Component, args: [{
selector: 'dashboard-grid-cell',
template: '<ng-template #container></ng-template>'
},] }
];
CellComponent.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: GadgetInstanceService }
];
CellComponent.propDecorators = {
gadgetType: [{ type: Input }],
gadgetConfig: [{ type: Input }],
gadgetInstanceId: [{ type: Input }],
gadgetTags: [{ type: Input }],
viewContainerRef: [{ type: ViewChild, args: ['container', { static: true, read: ViewContainerRef },] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2JlbmxpL3dvcmtzcGFjZXMvbmd4LWR5bmFtaWMtZGFzaGJvYXJkLWZyYW1ld29yay9wcm9qZWN0cy9uZ3gtZHluYW1pYy1kYXNoYm9hcmQvc3JjLyIsInNvdXJjZXMiOlsiZGFzaGJvYXJkL2dyaWQvY2VsbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCx3QkFBd0IsRUFFeEIsS0FBSyxFQUVMLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRzNEOztHQUVHO0FBTUgsTUFBTSxPQUFPLGFBQWE7SUFTdEIsWUFDWSxHQUE2QixFQUFVLHFCQUE0QztRQUFuRixRQUFHLEdBQUgsR0FBRyxDQUEwQjtRQUFVLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7SUFDL0YsQ0FBQztJQUVELFFBQVE7UUFDSjs7V0FFRztRQUNILE1BQU0sU0FBUyxHQUFjLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0UsSUFBSSxTQUFTLEVBQUU7WUFDWCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sU0FBUyxHQUE2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRS9GOztlQUVHO1lBQ0gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlGOztlQUVHO1lBQ0gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyRDtJQUVMLENBQUM7OztZQXJDSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsUUFBUSxFQUFFLHdDQUF3QzthQUNyRDs7O1lBbEJHLHdCQUF3QjtZQU9wQixxQkFBcUI7Ozt5QkFheEIsS0FBSzsyQkFDTCxLQUFLOytCQUNMLEtBQUs7eUJBQ0wsS0FBSzsrQkFFTCxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LCBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtHYWRnZXRJbnN0YW5jZVNlcnZpY2V9IGZyb20gJy4vZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7R2FkZ2V0RmFjdG9yeX0gZnJvbSAnLi4vYWRkLWdhZGdldC9nYWRnZXQtZmFjdG9yeSc7XG5pbXBvcnQge0dhZGdldEJhc2V9IGZyb20gJy4uL2dhZGdldHMvX2NvbW1vbi9nYWRnZXQtYmFzZSc7XG5cbi8qXG4gdGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBkeW5hbWljIGNyZWF0aW9uIG9mIGNvbXBvbmVudHNcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Rhc2hib2FyZC1ncmlkLWNlbGwnLFxuICAgIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICNjb250YWluZXI+PC9uZy10ZW1wbGF0ZT4nXG59KVxuZXhwb3J0IGNsYXNzIENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIGdhZGdldFR5cGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBnYWRnZXRDb25maWc6IGFueTtcbiAgICBASW5wdXQoKSBnYWRnZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAgQElucHV0KCkgZ2FkZ2V0VGFnczogQXJyYXk8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHtzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgcHJpdmF0ZSBnYWRnZXRJbnN0YW5jZVNlcnZpY2U6IEdhZGdldEluc3RhbmNlU2VydmljZSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvKlxuICAgICAgICAgY3JlYXRlIGNvbXBvbmVudCBpbnN0YW5jZSBkeW5hbWljYWxseVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY29tcG9uZW50OiBUeXBlPGFueT4gPSBHYWRnZXRGYWN0b3J5LmdldENvbXBvbmVudFR5cGUodGhpcy5nYWRnZXRUeXBlKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgY29tcEZhY3RvcnkgPSB0aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgICAgICAgICAgY29uc3QgZ2FkZ2V0UmVmOiBDb21wb25lbnRSZWY8R2FkZ2V0QmFzZT4gPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBGYWN0b3J5KTtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICB3ZSBuZWVkIHRvIHBhc3MgdGhlIGlucHV0IHBhcmFtZXRlcnMgKGluc3RhbmNlIGlkIGFuZCBjb25maWcpIGJhY2sgaW50byB0aGUgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdhZGdldFJlZi5pbnN0YW5jZS5jb25maWd1cmVHYWRnZXQodGhpcy5nYWRnZXRJbnN0YW5jZUlkLCB0aGlzLmdhZGdldENvbmZpZywgdGhpcy5nYWRnZXRUYWdzKTtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICBhZGQgY29uY3JldGUgY29tcG9uZW50IHRvIHNlcnZpY2UgZm9yIHRyYWNraW5nXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZ2FkZ2V0SW5zdGFuY2VTZXJ2aWNlLmFkZEluc3RhbmNlKGdhZGdldFJlZik7XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG4iXX0=