@jvsoft/components 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,266 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Input, Output, Component } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i3 from '@angular/material/tree';
6
+ import { MatTreeModule } from '@angular/material/tree';
7
+ import * as i4 from '@angular/material/icon';
8
+ import { MatIconModule } from '@angular/material/icon';
9
+ import * as i5 from '@angular/material/checkbox';
10
+ import { MatCheckboxModule } from '@angular/material/checkbox';
11
+ import * as i2 from '@angular/forms';
12
+ import { FormsModule } from '@angular/forms';
13
+ import { NestedTreeControl } from '@angular/cdk/tree';
14
+ import { DataModel } from '@jvsoft/utils';
15
+ import shortHash from 'shorthash2';
16
+
17
+ function generarArbol(lista, campoId, campoIdPadre, idPadre = null, strChildren = 'hijos') {
18
+ const node2 = [];
19
+ lista.filter(n => n[campoIdPadre] === idPadre).forEach(n => {
20
+ n[strChildren] = generarArbol(lista, campoId, campoIdPadre, n[campoId], strChildren);
21
+ node2.push(n);
22
+ });
23
+ return node2;
24
+ }
25
+
26
+ class ListaArbolComponent {
27
+ listaSuscription;
28
+ nombreColeccion;
29
+ checkbox = false;
30
+ expandirRecursivo = false;
31
+ checkboxSeleccionados = [];
32
+ campoId;
33
+ campoIdPadre;
34
+ campoStr;
35
+ strHijoContainer = 'hijos';
36
+ menuContextual;
37
+ classSeleccionado = ['bg-primary-activo', 'text-primary', 'dark:!bg-primary-dark-activo'];
38
+ classAnulado = ['line-through', 'text-red', 'italic'];
39
+ campoAnulado;
40
+ templateTxtData;
41
+ condicionMostrar;
42
+ condicionesClaseFila = () => [];
43
+ set selectionModel(val) {
44
+ this.objSeleccionado = val;
45
+ }
46
+ selectionModelChange = new EventEmitter();
47
+ seleccionado = new EventEmitter();
48
+ listaCheck = new EventEmitter();
49
+ listaCheckObj = new EventEmitter();
50
+ _idTabla = [];
51
+ get idTabla() {
52
+ return this._idTabla;
53
+ }
54
+ set idTabla(val) {
55
+ if (Array.isArray(val)) {
56
+ this._idTabla = val;
57
+ }
58
+ else {
59
+ this._idTabla.push(val);
60
+ }
61
+ }
62
+ get buscarItemSeleccionado() {
63
+ const dRet = this.listaOriginal.find(itm => this._seleccionado === this.propiedadSeleccion(itm));
64
+ return dRet ?? null;
65
+ }
66
+ get objSeleccionado() {
67
+ return this.buscarItemSeleccionado; // ?? this.objThis?.['seleccionados']?.[this.nombreColeccion];
68
+ }
69
+ set objSeleccionado(val) {
70
+ this.seleccionarItem(val, true);
71
+ }
72
+ chkLista = new DataModel();
73
+ listaMuestraArbol = [];
74
+ listaOriginal = [];
75
+ treeControl = new NestedTreeControl((node) => node[this.strHijoContainer]);
76
+ _seleccionado = {};
77
+ ngOnInit() {
78
+ this.listaSuscription.subscribe(res => {
79
+ if (res) {
80
+ this.listaOriginal = res;
81
+ const listaAs = generarArbol(res, this.campoId, this.campoIdPadre, null, this.strHijoContainer);
82
+ this.listaMuestraArbol = [];
83
+ setTimeout(() => {
84
+ this.listaMuestraArbol = listaAs;
85
+ }, 1);
86
+ if (this.checkbox) {
87
+ this.chkLista.agregarControles(res, this.campoId);
88
+ this.checkboxSeleccionados.forEach((chkSel) => {
89
+ this.chkLista.setState(chkSel[this.campoId], true);
90
+ });
91
+ this.emitirModeloCheck();
92
+ }
93
+ }
94
+ });
95
+ }
96
+ idTablaValor(data) {
97
+ if (data) {
98
+ if (this.idTabla.length < 1) {
99
+ return shortHash(JSON.stringify({ data, claseFinal: undefined }));
100
+ }
101
+ return this.idTabla.map(d => data[d]).join('-');
102
+ }
103
+ return '';
104
+ }
105
+ propiedadSeleccion(item) {
106
+ return `${this.nombreColeccion}_${this.idTablaValor(item)}`;
107
+ }
108
+ esSeleccionActual(item) {
109
+ return this._seleccionado === this.propiedadSeleccion(item);
110
+ }
111
+ seleccionarItem(item, forzado = false) {
112
+ const idItem = this.propiedadSeleccion(item);
113
+ console.warn(idItem);
114
+ if (forzado) {
115
+ this._seleccionado = idItem;
116
+ }
117
+ else {
118
+ this._seleccionado = this._seleccionado === idItem ? null : idItem;
119
+ }
120
+ this.selectionModelChange.emit(this.objSeleccionado);
121
+ this.seleccionado.emit(this.objSeleccionado);
122
+ }
123
+ hasChild = (_, node) => !!node[this.strHijoContainer] && node[this.strHijoContainer].length > 0;
124
+ opcMenu(v) {
125
+ // console.warn(v);
126
+ // console.warn(this.objSeleccionado);
127
+ const opAdic = { seccion: this.nombreColeccion };
128
+ opAdic['itemSeleccionado'] = this.objSeleccionado;
129
+ // v = {...v, ...opAdic};
130
+ // this.seleccionado.emit(v);
131
+ }
132
+ emitirModeloCheck() {
133
+ this.listaCheck.emit(this.chkLista.generarLista());
134
+ this.listaCheckObj.emit(this.chkLista.generarLista('object'));
135
+ }
136
+ cambiarPadre(checkActual, estado) {
137
+ const parentId = checkActual[this.campoIdPadre];
138
+ if (parentId) {
139
+ const padreAct = this.listaMuestraArbol.find((itm) => itm[this.campoId] == parentId);
140
+ if (padreAct) {
141
+ this.chkLista.setState(parentId, this.hijosActivos('checked', padreAct) || this.hijosActivos('indeterminate', padreAct));
142
+ this.cambiarPadre(padreAct, estado);
143
+ }
144
+ }
145
+ }
146
+ cambiarCheck(checkActual, estado) {
147
+ console.log(checkActual, estado);
148
+ if (this.hasChild(0, checkActual)) {
149
+ (this.treeControl.getChildren(checkActual) ?? []).forEach((vas) => {
150
+ this.cambiarCheck(vas, estado);
151
+ });
152
+ }
153
+ this.cambiarPadre(checkActual, estado);
154
+ this.chkLista.setState(checkActual[this.campoId], estado);
155
+ }
156
+ hijosActivos(tipo, checkActual) {
157
+ let totalHijos = 0;
158
+ let cantActivo = 0;
159
+ if (this.hasChild(0, checkActual)) {
160
+ (this.treeControl.getChildren(checkActual) ?? []).forEach((vas) => {
161
+ if (this.chkLista.getState(vas[this.campoId] + '')) {
162
+ cantActivo++;
163
+ }
164
+ totalHijos++;
165
+ });
166
+ }
167
+ switch (tipo) {
168
+ case 'checked':
169
+ return (cantActivo == totalHijos);
170
+ case 'indeterminate':
171
+ if (cantActivo == totalHijos) {
172
+ this.chkLista.setState(checkActual[this.campoId], true);
173
+ }
174
+ return ((cantActivo > 0) && (cantActivo != totalHijos));
175
+ }
176
+ return false;
177
+ }
178
+ classFila2(item) {
179
+ let clases = [];
180
+ if (this.campoAnulado && item[this.campoAnulado] === 1) {
181
+ clases = clases.concat(this.classAnulado);
182
+ }
183
+ if (item?.seleccionado) {
184
+ clases = clases.concat(this.classSeleccionado);
185
+ }
186
+ clases = clases.concat(this.condicionesClaseFila(item));
187
+ item.claseFinal = clases;
188
+ return clases;
189
+ }
190
+ classFila(item) {
191
+ let claseFinal = [];
192
+ if (this.campoAnulado && (item[this.campoAnulado] == 1)) {
193
+ claseFinal = claseFinal.concat(this.classAnulado);
194
+ }
195
+ if (this.objSeleccionado == item || this.esSeleccionActual(item)) {
196
+ claseFinal = claseFinal.concat(this.classSeleccionado);
197
+ }
198
+ claseFinal = claseFinal.concat(this.condicionesClaseFila(item));
199
+ item.claseFinal = claseFinal;
200
+ return claseFinal;
201
+ }
202
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ListaArbolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
203
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: ListaArbolComponent, isStandalone: true, selector: "jvs-lista-arbol", inputs: { listaSuscription: "listaSuscription", nombreColeccion: "nombreColeccion", checkbox: "checkbox", expandirRecursivo: "expandirRecursivo", checkboxSeleccionados: "checkboxSeleccionados", campoId: "campoId", campoIdPadre: "campoIdPadre", campoStr: "campoStr", strHijoContainer: "strHijoContainer", menuContextual: "menuContextual", classSeleccionado: "classSeleccionado", classAnulado: "classAnulado", campoAnulado: "campoAnulado", templateTxtData: "templateTxtData", condicionMostrar: "condicionMostrar", condicionesClaseFila: "condicionesClaseFila", selectionModel: "selectionModel", idTabla: "idTabla" }, outputs: { selectionModelChange: "selectionModelChange", seleccionado: "seleccionado", listaCheck: "listaCheck", listaCheckObj: "listaCheckObj" }, ngImport: i0, template: "<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-tree-node class=\"!pl-0 min-h-0\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </mat-tree-node>\n\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i3.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], outputs: ["activation", "expandedChange"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i3.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i3.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i3.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
204
+ }
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ListaArbolComponent, decorators: [{
206
+ type: Component,
207
+ args: [{ selector: 'jvs-lista-arbol', standalone: true, imports: [
208
+ CommonModule,
209
+ FormsModule,
210
+ MatTreeModule,
211
+ MatIconModule,
212
+ MatCheckboxModule,
213
+ ], template: "<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-tree-node class=\"!pl-0 min-h-0\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </mat-tree-node>\n\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n" }]
214
+ }], propDecorators: { listaSuscription: [{
215
+ type: Input
216
+ }], nombreColeccion: [{
217
+ type: Input
218
+ }], checkbox: [{
219
+ type: Input
220
+ }], expandirRecursivo: [{
221
+ type: Input
222
+ }], checkboxSeleccionados: [{
223
+ type: Input
224
+ }], campoId: [{
225
+ type: Input
226
+ }], campoIdPadre: [{
227
+ type: Input
228
+ }], campoStr: [{
229
+ type: Input
230
+ }], strHijoContainer: [{
231
+ type: Input
232
+ }], menuContextual: [{
233
+ type: Input
234
+ }], classSeleccionado: [{
235
+ type: Input
236
+ }], classAnulado: [{
237
+ type: Input
238
+ }], campoAnulado: [{
239
+ type: Input
240
+ }], templateTxtData: [{
241
+ type: Input
242
+ }], condicionMostrar: [{
243
+ type: Input
244
+ }], condicionesClaseFila: [{
245
+ type: Input
246
+ }], selectionModel: [{
247
+ type: Input
248
+ }], selectionModelChange: [{
249
+ type: Output
250
+ }], seleccionado: [{
251
+ type: Output
252
+ }], listaCheck: [{
253
+ type: Output
254
+ }], listaCheckObj: [{
255
+ type: Output
256
+ }], idTabla: [{
257
+ type: Input,
258
+ args: [{ required: true }]
259
+ }] } });
260
+
261
+ /**
262
+ * Generated bundle index. Do not edit.
263
+ */
264
+
265
+ export { ListaArbolComponent };
266
+ //# sourceMappingURL=jvsoft-components-lista-arbol.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jvsoft-components-lista-arbol.mjs","sources":["../../../projects/components/lista-arbol/lista-arbol.functions.ts","../../../projects/components/lista-arbol/lista-arbol.component.ts","../../../projects/components/lista-arbol/lista-arbol.component.html","../../../projects/components/lista-arbol/jvsoft-components-lista-arbol.ts"],"sourcesContent":["export function generarArbol(lista: any[], campoId: string, campoIdPadre: string, idPadre = null, strChildren = 'hijos'): any[] {\n const node2: any[] = [];\n lista.filter(n => n[campoIdPadre] === idPadre).forEach(n => {\n n[strChildren] = generarArbol(lista, campoId, campoIdPadre, n[campoId], strChildren);\n node2.push(n);\n });\n return node2;\n}\n","import {Component, EventEmitter, Input, OnInit, Output, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatTreeModule} from '@angular/material/tree';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {FormsModule} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {NestedTreeControl} from '@angular/cdk/tree';\nimport {generarArbol} from './lista-arbol.functions';\nimport {DataModel} from '@jvsoft/utils';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport shortHash from 'shorthash2';\n\n@Component({\n selector: 'jvs-lista-arbol',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatTreeModule,\n MatIconModule,\n MatCheckboxModule,\n ],\n templateUrl: './lista-arbol.component.html',\n})\nexport class ListaArbolComponent<T = any> implements OnInit {\n @Input() listaSuscription!: Observable<T[]>;\n @Input() nombreColeccion!: string;\n @Input() checkbox = false;\n @Input() expandirRecursivo = false;\n @Input() checkboxSeleccionados: T[] = [];\n\n @Input() campoId!: string;\n @Input() campoIdPadre!: string;\n @Input() campoStr!: string;\n @Input() strHijoContainer = 'hijos';\n @Input() menuContextual?: { abrirMenuContextual: Function; cerrarMenuContextual: Function };\n @Input() classSeleccionado: string[] = ['bg-primary-activo', 'text-primary', 'dark:!bg-primary-dark-activo'];\n @Input() classAnulado: string[] = ['line-through', 'text-red', 'italic'];\n @Input() campoAnulado?: string | null;\n @Input() templateTxtData?: TemplateRef<any>;\n @Input() condicionMostrar?: (item: T) => boolean;\n @Input() condicionesClaseFila: (item: T) => string[] = () => [];\n\n @Input() set selectionModel(val: SelectionModel<any>) {\n this.objSeleccionado = val;\n }\n @Output() selectionModelChange = new EventEmitter<SelectionModel<any>>();\n\n @Output() seleccionado = new EventEmitter<any>();\n @Output() listaCheck = new EventEmitter<T[]>();\n @Output() listaCheckObj = new EventEmitter<Record<string, any>>();\n\n private _idTabla: string[] = [];\n\n get idTabla(): string[] {\n return this._idTabla;\n }\n\n @Input({required: true}) set idTabla(val: string[] | string) {\n if (Array.isArray(val)) {\n this._idTabla = val;\n }\n else {\n this._idTabla.push(val);\n }\n }\n\n get buscarItemSeleccionado(): any {\n const dRet = this.listaOriginal.find(itm => this._seleccionado === this.propiedadSeleccion(itm));\n return dRet ?? null;\n }\n get objSeleccionado() {\n return this.buscarItemSeleccionado; // ?? this.objThis?.['seleccionados']?.[this.nombreColeccion];\n }\n\n set objSeleccionado(val: any) {\n this.seleccionarItem(val, true);\n }\n\n chkLista = new DataModel();\n listaMuestraArbol: T[] = [];\n listaOriginal: T[] = [];\n\n treeControl = new NestedTreeControl((node: any) => node[this.strHijoContainer]);\n\n _seleccionado: any = {};\n\n ngOnInit(): void {\n this.listaSuscription.subscribe(res => {\n if (res) {\n this.listaOriginal = res;\n const listaAs = generarArbol(res, this.campoId, this.campoIdPadre, null, this.strHijoContainer);\n this.listaMuestraArbol = [];\n setTimeout(() => {\n this.listaMuestraArbol = listaAs;\n }, 1);\n if (this.checkbox) {\n this.chkLista.agregarControles(res, this.campoId);\n this.checkboxSeleccionados.forEach((chkSel: any) => {\n this.chkLista.setState(chkSel[this.campoId], true);\n });\n this.emitirModeloCheck();\n }\n }\n });\n }\n\n\n idTablaValor(data: any): string {\n if (data) {\n if (this.idTabla.length < 1) {\n return shortHash(JSON.stringify({data, claseFinal: undefined}))\n }\n return this.idTabla.map(d => data[d]).join('-');\n }\n return '';\n }\n\n propiedadSeleccion(item: any): string {\n return `${this.nombreColeccion}_${this.idTablaValor(item)}`;\n }\n\n esSeleccionActual(item: any): boolean {\n return this._seleccionado === this.propiedadSeleccion(item);\n }\n seleccionarItem(item?: any, forzado: boolean = false): void {\n const idItem = this.propiedadSeleccion(item);\n console.warn(idItem);\n if (forzado) {\n this._seleccionado = idItem;\n }\n else {\n this._seleccionado = this._seleccionado === idItem ? null:idItem;\n }\n this.selectionModelChange.emit(this.objSeleccionado);\n this.seleccionado.emit(this.objSeleccionado);\n }\n\n\n hasChild = (_: number, node: any) => !!node[this.strHijoContainer] && node[this.strHijoContainer].length > 0;\n\n\n opcMenu(v: any) {\n // console.warn(v);\n // console.warn(this.objSeleccionado);\n const opAdic: any = {seccion: this.nombreColeccion};\n opAdic['itemSeleccionado'] = this.objSeleccionado;\n // v = {...v, ...opAdic};\n // this.seleccionado.emit(v);\n }\n\n emitirModeloCheck() {\n this.listaCheck.emit(<any[]>this.chkLista.generarLista());\n this.listaCheckObj.emit(<object>this.chkLista.generarLista('object'));\n }\n\n\n cambiarPadre(checkActual: T, estado: boolean): void {\n const parentId = (checkActual as any)[this.campoIdPadre];\n if (parentId) {\n const padreAct = this.listaMuestraArbol.find((itm: any) => itm[this.campoId] == parentId);\n if (padreAct) {\n this.chkLista.setState(parentId, this.hijosActivos('checked', padreAct) || this.hijosActivos('indeterminate', padreAct));\n this.cambiarPadre(padreAct, estado);\n }\n }\n }\n\n cambiarCheck(checkActual: T, estado: boolean): void {\n console.log(checkActual, estado);\n if (this.hasChild(0, checkActual)) {\n (this.treeControl.getChildren(checkActual) ?? []).forEach((vas: any) => {\n this.cambiarCheck(vas, estado);\n });\n }\n this.cambiarPadre(checkActual, estado);\n this.chkLista.setState((checkActual as any)[this.campoId], estado);\n }\n\n hijosActivos(tipo: 'checked' | 'indeterminate', checkActual: T): boolean {\n let totalHijos = 0;\n let cantActivo = 0;\n if (this.hasChild(0, checkActual)) {\n (this.treeControl.getChildren(checkActual) ?? []).forEach((vas: any) => {\n if (this.chkLista.getState(vas[this.campoId] + '')) {\n cantActivo++;\n }\n totalHijos++;\n });\n }\n\n switch (tipo) {\n case 'checked':\n return (cantActivo == totalHijos);\n case 'indeterminate':\n if (cantActivo == totalHijos) {\n this.chkLista.setState((checkActual as any)[this.campoId], true);\n }\n return ((cantActivo > 0) && (cantActivo != totalHijos));\n }\n return false;\n }\n\n\n classFila2(item: T): string[] {\n let clases: string[] = [];\n if (this.campoAnulado && (item as any)[this.campoAnulado] === 1) {\n clases = clases.concat(this.classAnulado);\n }\n if ((item as any)?.seleccionado) {\n clases = clases.concat(this.classSeleccionado);\n }\n clases = clases.concat(this.condicionesClaseFila(item));\n (item as any).claseFinal = clases;\n return clases;\n }\n\n classFila(item: any) {\n let claseFinal: any[] = [];\n if (this.campoAnulado && (item[this.campoAnulado] == 1)) {\n claseFinal = claseFinal.concat(this.classAnulado);\n }\n if (this.objSeleccionado == item || this.esSeleccionActual(item)) {\n claseFinal = claseFinal.concat(this.classSeleccionado);\n }\n claseFinal = claseFinal.concat(this.condicionesClaseFila(item));\n item.claseFinal = claseFinal;\n return claseFinal;\n }\n}\n\n","<mat-tree [dataSource]=\"listaMuestraArbol\" [treeControl]=\"treeControl\">\n <mat-tree-node class=\"!pl-0 min-h-0\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\n [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: false }\"></ng-container>\n </mat-tree-node>\n\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"flex flex-col trans-ease-out cursor-pointer\" matTreeNodeToggle [matTreeNodeToggleRecursive]=\"expandirRecursivo\">\n <ng-container [ngTemplateOutlet]=\"liDat\"\n [ngTemplateOutletContext]=\"{ node: node, nested: true }\"></ng-container>\n <div class=\"pl-4\" [class.tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </div>\n </mat-nested-tree-node>\n</mat-tree>\n\n<ng-template #liDat let-node=\"node\" let-nested=\"nested\">\n <div class=\"flex items-center gap-0 text-sm trans-ease-out cursor-pointer p-0 w-full\"\n (contextmenu)=\"menuContextual?.abrirMenuContextual($event, node); $event.preventDefault();\"\n (click)=\"seleccionarItem(node); opcMenu({ seccion: nombreColeccion, tipo: 'ver', item: node }); menuContextual?.cerrarMenuContextual();\"\n [ngClass]=\"classFila(node)\">\n <mat-icon *ngIf=\"!nested\"></mat-icon>\n <mat-icon *ngIf=\"nested\"\n [svgIcon]=\"treeControl.isExpanded(node) ? 'roundExpandMore' : 'roundChevronRight'\"></mat-icon>\n\n <mat-checkbox *ngIf=\"checkbox\"\n [(ngModel)]=\"chkLista.modelosChk[node[campoId]]\"\n [ngModelOptions]=\"{ standalone: true }\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"cambiarCheck(node, $event.checked); emitirModeloCheck()\"\n [checked]=\"nested ? hijosActivos('checked', node) : false\"\n [indeterminate]=\"nested ? hijosActivos('indeterminate', node) : false\">\n </mat-checkbox>\n\n <span *ngIf=\"!templateTxtData\" class=\"w-full\">{{ node[campoStr] }}</span>\n <ng-container *ngIf=\"templateTxtData\" [ngTemplateOutlet]=\"templateTxtData\"\n [ngTemplateOutletContext]=\"{ data: node, treeControl }\"></ng-container>\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}