UNPKG

@kassdoug/tableadv

Version:

Componente Angular 16+ para criação de uma table com amis recursos. Projeto com base na ideia da lib DataTables

76 lines 11.2 kB
import { Component, Input, ViewChild, ViewContainerRef, } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class CellComponent { constructor(componentFactoryResolver) { this.componentFactoryResolver = componentFactoryResolver; this.label = ''; this.componentized = false; } ngOnInit() { this.getLabel(); } /** Pega o label a ser exibido, podendo ser um component ou string */ getLabel() { const column_name = this.col.db; if (column_name.includes('.')) { let item = column_name.split('.').filter((f) => f); let value = this.row; item.forEach((ff) => { value = value[ff]; }); this.label = value; } else { this.label = this.row[column_name]; } if (typeof this.label == 'object' && this.label !== null && this.label !== '') { if (this.label.component !== null) { this.componentized = true; let instance = this.label.component.instance; let properties = this.label.component.properties; setTimeout(() => this.setComponent(instance, properties), 0); } } } /** Caso o label for um componente, aquis era feito as tratativas para inserção do mesmo */ setComponent(cmpInstance, properties) { const factory = this.componentFactoryResolver.resolveComponentFactory(cmpInstance); const componentRef = factory.create(this.container.injector); Object.keys(properties).forEach((key) => { let value = properties[key]; componentRef.instance[key] = this.delteKeyComponent(value); }); this.container.insert(componentRef.hostView); } /** Remove do valor inserido no component externo, somente os valores originais, retirando valores que possam ser compoenentes, corrigindo a duplicação infinita */ delteKeyComponent(item) { Object.keys(item).forEach((key) => { if (item[key] !== null && item[key] !== undefined) { if (typeof item[key] == 'object' && item[key].hasOwnProperty('component')) { if (item[key]['component'].hasOwnProperty('instance')) { delete item[key]; } } } }); return item; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CellComponent, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CellComponent, selector: "gd-cell", inputs: { row: "row", col: "col" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div *ngIf=\"!componentized; else cont\" [innerHTML]=\"label\"></div> \r\n<ng-template #cont><ng-container #container></ng-container></ng-template> ", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CellComponent, decorators: [{ type: Component, args: [{ selector: 'gd-cell', template: "<div *ngIf=\"!componentized; else cont\" [innerHTML]=\"label\"></div> \r\n<ng-template #cont><ng-container #container></ng-container></ng-template> " }] }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }]; }, propDecorators: { container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef }] }], row: [{ type: Input }], col: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYXNzZG91Zy90YWJsZWFkdi9zcmMvY29tcG9uZW50cy9jZWxsL2NlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fzc2RvdWcvdGFibGVhZHYvc3JjL2NvbXBvbmVudHMvY2VsbC9jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUVMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7OztBQU12QixNQUFNLE9BQU8sYUFBYTtJQVN4QixZQUFvQix3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUh0RSxVQUFLLEdBQWlCLEVBQUUsQ0FBQztRQUN6QixrQkFBYSxHQUFZLEtBQUssQ0FBQztJQUUwQyxDQUFDO0lBRTFFLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxRQUFRO1FBQ04sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFFaEMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV4RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDdkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxRQUFRO1lBQzdCLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSTtZQUNuQixJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFDakI7WUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtnQkFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBRTFCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDN0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUVqRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDOUQ7U0FDRjtJQUNILENBQUM7SUFFRCwyRkFBMkY7SUFDM0YsWUFBWSxDQUFDLFdBQWdCLEVBQUUsVUFBZTtRQUM1QyxNQUFNLE9BQU8sR0FDWCxJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxtS0FBbUs7SUFDbkssaUJBQWlCLENBQUMsSUFBUztRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUNqRCxJQUNFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVE7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQ3JDO29CQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRTt3QkFDckQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2xCO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs4R0E3RVUsYUFBYTtrR0FBYixhQUFhLHNLQUNRLGdCQUFnQiw2QkNkbEQsdUpBQzJFOzsyRkRZOUQsYUFBYTtrQkFKekIsU0FBUzsrQkFDRSxTQUFTOytHQUtuQixTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUV6QyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dkLWNlbGwnLFxuICB0ZW1wbGF0ZVVybDogJ2NlbGwuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGNvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gIEBJbnB1dCgpIHJvdzogYW55O1xuICBASW5wdXQoKSBjb2w6IGFueTtcblxuICBsYWJlbDogc3RyaW5nIHwgYW55ID0gJyc7XG4gIGNvbXBvbmVudGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ2V0TGFiZWwoKTtcbiAgfVxuXG4gIC8qKiBQZWdhIG8gbGFiZWwgYSBzZXIgZXhpYmlkbywgcG9kZW5kbyBzZXIgdW0gY29tcG9uZW50IG91IHN0cmluZyAqL1xuICBnZXRMYWJlbCgpIHtcbiAgICBjb25zdCBjb2x1bW5fbmFtZSA9IHRoaXMuY29sLmRiO1xuXG4gICAgaWYgKGNvbHVtbl9uYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIGxldCBpdGVtID0gY29sdW1uX25hbWUuc3BsaXQoJy4nKS5maWx0ZXIoKGY6IGFueSkgPT4gZik7XG5cbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMucm93O1xuICAgICAgaXRlbS5mb3JFYWNoKChmZjogYW55KSA9PiB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVbZmZdO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmxhYmVsID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWwgPSB0aGlzLnJvd1tjb2x1bW5fbmFtZV07XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHRoaXMubGFiZWwgPT0gJ29iamVjdCcgJiZcbiAgICAgIHRoaXMubGFiZWwgIT09IG51bGwgJiZcbiAgICAgIHRoaXMubGFiZWwgIT09ICcnXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5sYWJlbC5jb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRpemVkID0gdHJ1ZTtcblxuICAgICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLmxhYmVsLmNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgbGV0IHByb3BlcnRpZXMgPSB0aGlzLmxhYmVsLmNvbXBvbmVudC5wcm9wZXJ0aWVzO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRDb21wb25lbnQoaW5zdGFuY2UsIHByb3BlcnRpZXMpLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQ2FzbyBvIGxhYmVsIGZvciB1bSBjb21wb25lbnRlLCBhcXVpcyBlcmEgZmVpdG8gYXMgdHJhdGF0aXZhcyBwYXJhIGluc2Vyw6fDo28gZG8gbWVzbW8gKi9cbiAgc2V0Q29tcG9uZW50KGNtcEluc3RhbmNlOiBhbnksIHByb3BlcnRpZXM6IGFueSkge1xuICAgIGNvbnN0IGZhY3Rvcnk6IGFueSA9XG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjbXBJbnN0YW5jZSk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5jb250YWluZXIuaW5qZWN0b3IpO1xuXG4gICAgT2JqZWN0LmtleXMocHJvcGVydGllcykuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVtrZXldID0gdGhpcy5kZWx0ZUtleUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbnRhaW5lci5pbnNlcnQoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgZG8gdmFsb3IgaW5zZXJpZG8gbm8gY29tcG9uZW50IGV4dGVybm8sIHNvbWVudGUgb3MgdmFsb3JlcyBvcmlnaW5haXMsIHJldGlyYW5kbyB2YWxvcmVzIHF1ZSBwb3NzYW0gc2VyIGNvbXBvZW5lbnRlcywgY29ycmlnaW5kbyBhIGR1cGxpY2HDp8OjbyBpbmZpbml0YSAqL1xuICBkZWx0ZUtleUNvbXBvbmVudChpdGVtOiBhbnkpIHtcbiAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGl0ZW1ba2V5XSAhPT0gbnVsbCAmJiBpdGVtW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGl0ZW1ba2V5XSA9PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIGl0ZW1ba2V5XS5oYXNPd25Qcm9wZXJ0eSgnY29tcG9uZW50JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGl0ZW1ba2V5XVsnY29tcG9uZW50J10uaGFzT3duUHJvcGVydHkoJ2luc3RhbmNlJykpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBpdGVtW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiFjb21wb25lbnRpemVkOyBlbHNlIGNvbnRcIiBbaW5uZXJIVE1MXT1cImxhYmVsXCI+PC9kaXY+IFxyXG48bmctdGVtcGxhdGUgI2NvbnQ+PG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPjwvbmctdGVtcGxhdGU+ICAiXX0=