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