@c80/ui 1.0.42 → 1.0.45
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.
- package/c80-ui.d.ts +5 -0
- package/esm2022/c80-ui.js +5 -0
- package/esm2022/c80-ui.js.map +1 -0
- package/esm2022/index.js +6 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/card-level/card-level.component.js +56 -0
- package/esm2022/lib/card-level/card-level.component.js.map +1 -0
- package/esm2022/lib/card-level/card-level.interface.js +2 -0
- package/esm2022/lib/card-level/card-level.interface.js.map +1 -0
- package/esm2022/lib/card-level/index.js +3 -0
- package/esm2022/lib/card-level/index.js.map +1 -0
- package/esm2022/lib/icon/icon.component.js +48 -0
- package/esm2022/lib/icon/icon.component.js.map +1 -0
- package/esm2022/lib/icon/icon.constants.js +237 -0
- package/esm2022/lib/icon/icon.constants.js.map +1 -0
- package/esm2022/lib/icon/icon.types.js +2 -0
- package/esm2022/lib/icon/icon.types.js.map +1 -0
- package/esm2022/lib/icon/icon.utils.js +4 -0
- package/esm2022/lib/icon/icon.utils.js.map +1 -0
- package/esm2022/lib/icon/index.js +4 -0
- package/esm2022/lib/icon/index.js.map +1 -0
- package/esm2022/lib/modal/index.js +3 -0
- package/esm2022/lib/modal/index.js.map +1 -0
- package/esm2022/lib/modal/modal.component.js +86 -0
- package/esm2022/lib/modal/modal.component.js.map +1 -0
- package/esm2022/lib/modal/modal.service.js +83 -0
- package/esm2022/lib/modal/modal.service.js.map +1 -0
- package/esm2022/lib/stat-card/index.js +2 -0
- package/esm2022/lib/stat-card/index.js.map +1 -0
- package/esm2022/lib/stat-card/stat-card.component.js +13 -0
- package/esm2022/lib/stat-card/stat-card.component.js.map +1 -0
- package/esm2022/lib/table/index.js +9 -0
- package/esm2022/lib/table/index.js.map +1 -0
- package/esm2022/lib/table/table-column-visibility.service.js +105 -0
- package/esm2022/lib/table/table-column-visibility.service.js.map +1 -0
- package/esm2022/lib/table/table-crud-state.service.js +115 -0
- package/esm2022/lib/table/table-crud-state.service.js.map +1 -0
- package/esm2022/lib/table/table-data-converter.service.js +145 -0
- package/esm2022/lib/table/table-data-converter.service.js.map +1 -0
- package/esm2022/lib/table/table-data-utils.service.js +193 -0
- package/esm2022/lib/table/table-data-utils.service.js.map +1 -0
- package/esm2022/lib/table/table-selection.service.js +121 -0
- package/esm2022/lib/table/table-selection.service.js.map +1 -0
- package/esm2022/lib/table/table.component.js +413 -0
- package/esm2022/lib/table/table.component.js.map +1 -0
- package/esm2022/lib/table/table.types.js +5 -0
- package/esm2022/lib/table/table.types.js.map +1 -0
- package/esm2022/lib/table/table.utils.js +107 -0
- package/esm2022/lib/table/table.utils.js.map +1 -0
- package/lib/icon/icon.component.d.ts +1 -1
- package/lib/modal/index.d.ts +2 -3
- package/lib/stat-card/stat-card.component.d.ts +2 -2
- package/lib/table/index.d.ts +1 -0
- package/lib/table/table-column-visibility.service.d.ts +17 -35
- package/lib/table/table-crud-state.service.d.ts +10 -27
- package/lib/table/table-data-utils.service.d.ts +15 -5
- package/lib/table/table-selection.service.d.ts +19 -18
- package/lib/table/table.component.d.ts +123 -98
- package/lib/table/table.types.d.ts +25 -2
- package/lib/table/table.utils.d.ts +42 -0
- package/package.json +7 -9
- package/esm2022/c80-ui.mjs +0 -5
- package/esm2022/index.mjs +0 -6
- package/esm2022/lib/card-level/card-level.component.mjs +0 -57
- package/esm2022/lib/card-level/card-level.interface.mjs +0 -2
- package/esm2022/lib/card-level/index.mjs +0 -3
- package/esm2022/lib/icon/icon.component.mjs +0 -49
- package/esm2022/lib/icon/icon.constants.mjs +0 -237
- package/esm2022/lib/icon/icon.types.mjs +0 -2
- package/esm2022/lib/icon/icon.utils.mjs +0 -4
- package/esm2022/lib/icon/index.mjs +0 -4
- package/esm2022/lib/modal/index.mjs +0 -3
- package/esm2022/lib/modal/modal.component.mjs +0 -86
- package/esm2022/lib/modal/modal.service.mjs +0 -83
- package/esm2022/lib/stat-card/index.mjs +0 -2
- package/esm2022/lib/stat-card/stat-card.component.mjs +0 -16
- package/esm2022/lib/table/index.mjs +0 -8
- package/esm2022/lib/table/table-column-visibility.service.mjs +0 -156
- package/esm2022/lib/table/table-crud-state.service.mjs +0 -186
- package/esm2022/lib/table/table-data-converter.service.mjs +0 -145
- package/esm2022/lib/table/table-data-utils.service.mjs +0 -166
- package/esm2022/lib/table/table-selection.service.mjs +0 -138
- package/esm2022/lib/table/table.component.mjs +0 -476
- package/esm2022/lib/table/table.types.mjs +0 -5
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Servicio para utilidades de manipulación de datos en tablas C80
|
|
5
|
-
*
|
|
6
|
-
* Proporciona métodos para:
|
|
7
|
-
* - Acceso a valores de celdas (incluyendo propiedades anidadas)
|
|
8
|
-
* - Formateo de valores para display
|
|
9
|
-
* - Gestión de enums y colores
|
|
10
|
-
* - Ordenamiento de datos
|
|
11
|
-
*/
|
|
12
|
-
export class TableDataUtilsService {
|
|
13
|
-
/**
|
|
14
|
-
* Obtiene el valor de una celda usando el accessor, soportando notación de punto para propiedades anidadas
|
|
15
|
-
* @param row - La fila de datos
|
|
16
|
-
* @param accessor - El accessor de la columna
|
|
17
|
-
* @returns El valor de la celda
|
|
18
|
-
*/
|
|
19
|
-
getCellValue(row, accessor) {
|
|
20
|
-
if (accessor.includes('.')) {
|
|
21
|
-
return this.getNestedValue(row, accessor);
|
|
22
|
-
}
|
|
23
|
-
return row[accessor];
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Obtiene el valor de un objeto usando notación de punto (ej: 'task.name')
|
|
27
|
-
* @param obj - Objeto del cual obtener el valor
|
|
28
|
-
* @param accessor - Ruta de acceso usando notación de punto
|
|
29
|
-
* @returns El valor anidado o undefined
|
|
30
|
-
*/
|
|
31
|
-
getNestedValue(obj, accessor) {
|
|
32
|
-
return accessor.split('.').reduce((current, key) => {
|
|
33
|
-
return current && typeof current === 'object' ? current[key] : undefined;
|
|
34
|
-
}, obj);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Devuelve el valor de display para una celda, mostrando '-' para valores falsy excepto 0, false y objetos/arrays vacíos
|
|
38
|
-
* @param value - Valor a formatear
|
|
39
|
-
* @returns Cadena formateada para display
|
|
40
|
-
*/
|
|
41
|
-
getDisplayValue(value) {
|
|
42
|
-
// Si el valor es 0, mostrarlo
|
|
43
|
-
if (value === 0) {
|
|
44
|
-
return '0';
|
|
45
|
-
}
|
|
46
|
-
// Si el valor es false, debe ser manejado por lógica booleana en template, no aquí
|
|
47
|
-
if (value === false) {
|
|
48
|
-
return 'false';
|
|
49
|
-
}
|
|
50
|
-
// Manejar objetos y arrays (incluyendo los vacíos)
|
|
51
|
-
if (typeof value === 'object' && value !== null) {
|
|
52
|
-
try {
|
|
53
|
-
return JSON.stringify(value);
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return '[object Object]';
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// Si el valor son otros falsy values (null, undefined, ''), mostrar '-'
|
|
60
|
-
if (!value) {
|
|
61
|
-
return '-';
|
|
62
|
-
}
|
|
63
|
-
// Manejar otros tipos explícitamente
|
|
64
|
-
if (typeof value === 'string' ||
|
|
65
|
-
typeof value === 'number' ||
|
|
66
|
-
typeof value === 'boolean') {
|
|
67
|
-
return String(value);
|
|
68
|
-
}
|
|
69
|
-
// Para cualquier otro tipo (función, símbolo, etc.), devolver un fallback seguro
|
|
70
|
-
return '-';
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Obtiene el texto de display para un valor enum
|
|
74
|
-
* @param value - Valor del enum
|
|
75
|
-
* @param col - Definición de la columna
|
|
76
|
-
* @returns Texto formateado del enum
|
|
77
|
-
*/
|
|
78
|
-
getEnumDisplayValue(value, col) {
|
|
79
|
-
if (!col.enum || (value !== 0 && !value)) {
|
|
80
|
-
return '-';
|
|
81
|
-
}
|
|
82
|
-
const displayValue = col.enum[value];
|
|
83
|
-
return (displayValue ||
|
|
84
|
-
(typeof value === 'string' || typeof value === 'number'
|
|
85
|
-
? String(value)
|
|
86
|
-
: '-'));
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Obtiene las opciones del enum como array para dropdowns select
|
|
90
|
-
* @param col - Definición de la columna
|
|
91
|
-
* @returns Array de opciones con value y label
|
|
92
|
-
*/
|
|
93
|
-
getEnumOptions(col) {
|
|
94
|
-
if (!col.enum)
|
|
95
|
-
return [];
|
|
96
|
-
return Object.entries(col.enum).map(([value, label]) => ({
|
|
97
|
-
value: Number.isNaN(Number(value)) ? value : Number(value),
|
|
98
|
-
label,
|
|
99
|
-
}));
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Obtiene el color CSS para un valor de celda basado en la configuración de color de la columna
|
|
103
|
-
* @param value - Valor de la celda
|
|
104
|
-
* @param col - Definición de la columna
|
|
105
|
-
* @returns Color CSS o undefined si no hay configuración
|
|
106
|
-
*/
|
|
107
|
-
getCellColor(value, col) {
|
|
108
|
-
if (!col.color || (value !== 0 && !value)) {
|
|
109
|
-
return undefined;
|
|
110
|
-
}
|
|
111
|
-
return col.color[value];
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Aplica ordenamiento a los items basándose en las columnas con configuración de orden
|
|
115
|
-
* @param items - Array de items a ordenar (se modifica in-place)
|
|
116
|
-
* @param columns - Definiciones de columnas
|
|
117
|
-
*/
|
|
118
|
-
applySorting(items, columns) {
|
|
119
|
-
const orderedColumns = columns.filter((col) => col.order);
|
|
120
|
-
if (orderedColumns.length > 0) {
|
|
121
|
-
for (const col of orderedColumns) {
|
|
122
|
-
items.sort((a, b) => {
|
|
123
|
-
const valueA = this.getCellValue(a, col.accessor);
|
|
124
|
-
const valueB = this.getCellValue(b, col.accessor);
|
|
125
|
-
if (col.order === 'ASC') {
|
|
126
|
-
if (valueA > valueB)
|
|
127
|
-
return 1;
|
|
128
|
-
if (valueA < valueB)
|
|
129
|
-
return -1;
|
|
130
|
-
return 0;
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
if (valueA < valueB)
|
|
134
|
-
return 1;
|
|
135
|
-
if (valueA > valueB)
|
|
136
|
-
return -1;
|
|
137
|
-
return 0;
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Calcula el max-height de la tabla basado en el tamaño
|
|
145
|
-
* @param size - Tamaño configurado (0 = sin límite)
|
|
146
|
-
* @returns String CSS para max-height o undefined si sin límite
|
|
147
|
-
*/
|
|
148
|
-
getTableMaxHeight(size) {
|
|
149
|
-
if (size <= 0) {
|
|
150
|
-
return undefined; // Sin límite de altura
|
|
151
|
-
}
|
|
152
|
-
// Altura base de 400px * size
|
|
153
|
-
const baseHeight = 400;
|
|
154
|
-
const maxHeight = Math.round(baseHeight * size);
|
|
155
|
-
return `${maxHeight}px`;
|
|
156
|
-
}
|
|
157
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableDataUtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
158
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableDataUtilsService, providedIn: 'root' });
|
|
159
|
-
}
|
|
160
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableDataUtilsService, decorators: [{
|
|
161
|
-
type: Injectable,
|
|
162
|
-
args: [{
|
|
163
|
-
providedIn: 'root'
|
|
164
|
-
}]
|
|
165
|
-
}] });
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS11dGlscy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLWRhdGEtdXRpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQzs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFFOUI7Ozs7O09BS0c7SUFDSCxZQUFZLENBQW9DLEdBQU0sRUFBRSxRQUFnQjtRQUNwRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFRLEdBQStCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLEdBQTRCLEVBQUUsUUFBZ0I7UUFDekQsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMvQyxPQUFPLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFFLE9BQW1DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMxRyxDQUFDLEVBQUUsR0FBYyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBYztRQUMxQiw4QkFBOEI7UUFDOUIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDZCxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUM7UUFDRCxtRkFBbUY7UUFDbkYsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbEIsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQztRQUNELG1EQUFtRDtRQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNMLE9BQU8saUJBQWlCLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUM7UUFDRCx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO1FBQ0QscUNBQXFDO1FBQ3JDLElBQ0ksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUN6QixPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFDNUIsQ0FBQztZQUNDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxpRkFBaUY7UUFDakYsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFjLEVBQUUsR0FBbUI7UUFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQXdCLENBQUMsQ0FBQztRQUN4RCxPQUFPLENBQ0gsWUFBWTtZQUNaLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQ25ELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDYixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsR0FBbUI7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDekIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzFELEtBQUs7U0FDUixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBQyxLQUFjLEVBQUUsR0FBbUI7UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQXdCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBb0MsS0FBVSxFQUFFLE9BQXlCO1FBQ2pGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBb0IsQ0FBQztvQkFDckUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBb0IsQ0FBQztvQkFFckUsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO3dCQUN0QixJQUFJLE1BQU0sR0FBRyxNQUFNOzRCQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM5QixJQUFJLE1BQU0sR0FBRyxNQUFNOzRCQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxDQUFDO29CQUNiLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLE1BQU0sR0FBRyxNQUFNOzRCQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM5QixJQUFJLE1BQU0sR0FBRyxNQUFNOzRCQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxDQUFDO29CQUNiLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsSUFBWTtRQUMxQixJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sU0FBUyxDQUFDLENBQUMsdUJBQXVCO1FBQzdDLENBQUM7UUFDRCw4QkFBOEI7UUFDOUIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2hELE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQztJQUM1QixDQUFDO3dHQXRKUSxxQkFBcUI7NEdBQXJCLHFCQUFxQixjQUZsQixNQUFNOzs0RkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQzgwVGFibGVDb2xEZWYgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIHV0aWxpZGFkZXMgZGUgbWFuaXB1bGFjacOzbiBkZSBkYXRvcyBlbiB0YWJsYXMgQzgwXG4gKlxuICogUHJvcG9yY2lvbmEgbcOpdG9kb3MgcGFyYTpcbiAqIC0gQWNjZXNvIGEgdmFsb3JlcyBkZSBjZWxkYXMgKGluY2x1eWVuZG8gcHJvcGllZGFkZXMgYW5pZGFkYXMpXG4gKiAtIEZvcm1hdGVvIGRlIHZhbG9yZXMgcGFyYSBkaXNwbGF5XG4gKiAtIEdlc3Rpw7NuIGRlIGVudW1zIHkgY29sb3Jlc1xuICogLSBPcmRlbmFtaWVudG8gZGUgZGF0b3NcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFVdGlsc1NlcnZpY2Uge1xuXG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCB2YWxvciBkZSB1bmEgY2VsZGEgdXNhbmRvIGVsIGFjY2Vzc29yLCBzb3BvcnRhbmRvIG5vdGFjacOzbiBkZSBwdW50byBwYXJhIHByb3BpZWRhZGVzIGFuaWRhZGFzXG4gICAgICogQHBhcmFtIHJvdyAtIExhIGZpbGEgZGUgZGF0b3NcbiAgICAgKiBAcGFyYW0gYWNjZXNzb3IgLSBFbCBhY2Nlc3NvciBkZSBsYSBjb2x1bW5hXG4gICAgICogQHJldHVybnMgRWwgdmFsb3IgZGUgbGEgY2VsZGFcbiAgICAgKi9cbiAgICBnZXRDZWxsVmFsdWU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihyb3c6IFQsIGFjY2Vzc29yOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICAgICAgaWYgKGFjY2Vzc29yLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgYWNjZXNzb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVthY2Nlc3Nvcl07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCB2YWxvciBkZSB1biBvYmpldG8gdXNhbmRvIG5vdGFjacOzbiBkZSBwdW50byAoZWo6ICd0YXNrLm5hbWUnKVxuICAgICAqIEBwYXJhbSBvYmogLSBPYmpldG8gZGVsIGN1YWwgb2J0ZW5lciBlbCB2YWxvclxuICAgICAqIEBwYXJhbSBhY2Nlc3NvciAtIFJ1dGEgZGUgYWNjZXNvIHVzYW5kbyBub3RhY2nDs24gZGUgcHVudG9cbiAgICAgKiBAcmV0dXJucyBFbCB2YWxvciBhbmlkYWRvIG8gdW5kZWZpbmVkXG4gICAgICovXG4gICAgZ2V0TmVzdGVkVmFsdWUob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYWNjZXNzb3I6IHN0cmluZyk6IHVua25vd24ge1xuICAgICAgICByZXR1cm4gYWNjZXNzb3Iuc3BsaXQoJy4nKS5yZWR1Y2UoKGN1cnJlbnQsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgJiYgdHlwZW9mIGN1cnJlbnQgPT09ICdvYmplY3QnID8gKGN1cnJlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sIG9iaiBhcyB1bmtub3duKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXZ1ZWx2ZSBlbCB2YWxvciBkZSBkaXNwbGF5IHBhcmEgdW5hIGNlbGRhLCBtb3N0cmFuZG8gJy0nIHBhcmEgdmFsb3JlcyBmYWxzeSBleGNlcHRvIDAsIGZhbHNlIHkgb2JqZXRvcy9hcnJheXMgdmFjw61vc1xuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbG9yIGEgZm9ybWF0ZWFyXG4gICAgICogQHJldHVybnMgQ2FkZW5hIGZvcm1hdGVhZGEgcGFyYSBkaXNwbGF5XG4gICAgICovXG4gICAgZ2V0RGlzcGxheVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAgICAgLy8gU2kgZWwgdmFsb3IgZXMgMCwgbW9zdHJhcmxvXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfVxuICAgICAgICAvLyBTaSBlbCB2YWxvciBlcyBmYWxzZSwgZGViZSBzZXIgbWFuZWphZG8gcG9yIGzDs2dpY2EgYm9vbGVhbmEgZW4gdGVtcGxhdGUsIG5vIGFxdcOtXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiAnZmFsc2UnO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1hbmVqYXIgb2JqZXRvcyB5IGFycmF5cyAoaW5jbHV5ZW5kbyBsb3MgdmFjw61vcylcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBPYmplY3RdJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTaSBlbCB2YWxvciBzb24gb3Ryb3MgZmFsc3kgdmFsdWVzIChudWxsLCB1bmRlZmluZWQsICcnKSwgbW9zdHJhciAnLSdcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICctJztcbiAgICAgICAgfVxuICAgICAgICAvLyBNYW5lamFyIG90cm9zIHRpcG9zIGV4cGzDrWNpdGFtZW50ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhcmEgY3VhbHF1aWVyIG90cm8gdGlwbyAoZnVuY2nDs24sIHPDrW1ib2xvLCBldGMuKSwgZGV2b2x2ZXIgdW4gZmFsbGJhY2sgc2VndXJvXG4gICAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCB0ZXh0byBkZSBkaXNwbGF5IHBhcmEgdW4gdmFsb3IgZW51bVxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbG9yIGRlbCBlbnVtXG4gICAgICogQHBhcmFtIGNvbCAtIERlZmluaWNpw7NuIGRlIGxhIGNvbHVtbmFcbiAgICAgKiBAcmV0dXJucyBUZXh0byBmb3JtYXRlYWRvIGRlbCBlbnVtXG4gICAgICovXG4gICAgZ2V0RW51bURpc3BsYXlWYWx1ZSh2YWx1ZTogdW5rbm93biwgY29sOiBDODBUYWJsZUNvbERlZik6IHN0cmluZyB7XG4gICAgICAgIGlmICghY29sLmVudW0gfHwgKHZhbHVlICE9PSAwICYmICF2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAnLSc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gY29sLmVudW1bdmFsdWUgYXMgc3RyaW5nIHwgbnVtYmVyXTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSB8fFxuICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgIDogJy0nKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9idGllbmUgbGFzIG9wY2lvbmVzIGRlbCBlbnVtIGNvbW8gYXJyYXkgcGFyYSBkcm9wZG93bnMgc2VsZWN0XG4gICAgICogQHBhcmFtIGNvbCAtIERlZmluaWNpw7NuIGRlIGxhIGNvbHVtbmFcbiAgICAgKiBAcmV0dXJucyBBcnJheSBkZSBvcGNpb25lcyBjb24gdmFsdWUgeSBsYWJlbFxuICAgICAqL1xuICAgIGdldEVudW1PcHRpb25zKGNvbDogQzgwVGFibGVDb2xEZWYpOiB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfVtdIHtcbiAgICAgICAgaWYgKCFjb2wuZW51bSkgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29sLmVudW0pLm1hcCgoW3ZhbHVlLCBsYWJlbF0pID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPYnRpZW5lIGVsIGNvbG9yIENTUyBwYXJhIHVuIHZhbG9yIGRlIGNlbGRhIGJhc2FkbyBlbiBsYSBjb25maWd1cmFjacOzbiBkZSBjb2xvciBkZSBsYSBjb2x1bW5hXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsb3IgZGUgbGEgY2VsZGFcbiAgICAgKiBAcGFyYW0gY29sIC0gRGVmaW5pY2nDs24gZGUgbGEgY29sdW1uYVxuICAgICAqIEByZXR1cm5zIENvbG9yIENTUyBvIHVuZGVmaW5lZCBzaSBubyBoYXkgY29uZmlndXJhY2nDs25cbiAgICAgKi9cbiAgICBnZXRDZWxsQ29sb3IodmFsdWU6IHVua25vd24sIGNvbDogQzgwVGFibGVDb2xEZWYpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWNvbC5jb2xvciB8fCAodmFsdWUgIT09IDAgJiYgIXZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sLmNvbG9yW3ZhbHVlIGFzIHN0cmluZyB8IG51bWJlcl07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBsaWNhIG9yZGVuYW1pZW50byBhIGxvcyBpdGVtcyBiYXPDoW5kb3NlIGVuIGxhcyBjb2x1bW5hcyBjb24gY29uZmlndXJhY2nDs24gZGUgb3JkZW5cbiAgICAgKiBAcGFyYW0gaXRlbXMgLSBBcnJheSBkZSBpdGVtcyBhIG9yZGVuYXIgKHNlIG1vZGlmaWNhIGluLXBsYWNlKVxuICAgICAqIEBwYXJhbSBjb2x1bW5zIC0gRGVmaW5pY2lvbmVzIGRlIGNvbHVtbmFzXG4gICAgICovXG4gICAgYXBwbHlTb3J0aW5nPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oaXRlbXM6IFRbXSwgY29sdW1uczogQzgwVGFibGVDb2xEZWZbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmRlcmVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5vcmRlcik7XG4gICAgICAgIGlmIChvcmRlcmVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBvcmRlcmVkQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVBID0gdGhpcy5nZXRDZWxsVmFsdWUoYSwgY29sLmFjY2Vzc29yKSBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlQiA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGIsIGNvbC5hY2Nlc3NvcikgYXMgc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wub3JkZXIgPT09ICdBU0MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVBID4gdmFsdWVCKSByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVBID4gdmFsdWVCKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYSBlbCBtYXgtaGVpZ2h0IGRlIGxhIHRhYmxhIGJhc2FkbyBlbiBlbCB0YW1hw7FvXG4gICAgICogQHBhcmFtIHNpemUgLSBUYW1hw7FvIGNvbmZpZ3VyYWRvICgwID0gc2luIGzDrW1pdGUpXG4gICAgICogQHJldHVybnMgU3RyaW5nIENTUyBwYXJhIG1heC1oZWlnaHQgbyB1bmRlZmluZWQgc2kgc2luIGzDrW1pdGVcbiAgICAgKi9cbiAgICBnZXRUYWJsZU1heEhlaWdodChzaXplOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBTaW4gbMOtbWl0ZSBkZSBhbHR1cmFcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHR1cmEgYmFzZSBkZSA0MDBweCAqIHNpemVcbiAgICAgICAgY29uc3QgYmFzZUhlaWdodCA9IDQwMDtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChiYXNlSGVpZ2h0ICogc2l6ZSk7XG4gICAgICAgIHJldHVybiBgJHttYXhIZWlnaHR9cHhgO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { Injectable, signal } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Servicio para gestionar la selección de elementos en tablas C80
|
|
5
|
-
*
|
|
6
|
-
* Maneja:
|
|
7
|
-
* - Selección simple y múltiple
|
|
8
|
-
* - Estado de selección completa
|
|
9
|
-
* - Preservación de selección tras actualizaciones de datos
|
|
10
|
-
* - Emisión de eventos de selección
|
|
11
|
-
*/
|
|
12
|
-
export class TableSelectionService {
|
|
13
|
-
/**
|
|
14
|
-
* Inicializa el estado de selección para una nueva tabla
|
|
15
|
-
* @returns Objeto con signals y métodos de selección
|
|
16
|
-
*/
|
|
17
|
-
createSelectionState() {
|
|
18
|
-
const selectedItems = signal(new Set());
|
|
19
|
-
const selectAllChecked = signal(false);
|
|
20
|
-
const selectAllIndeterminate = signal(false);
|
|
21
|
-
return {
|
|
22
|
-
selectedItems: selectedItems.asReadonly(),
|
|
23
|
-
selectAllChecked: selectAllChecked.asReadonly(),
|
|
24
|
-
selectAllIndeterminate: selectAllIndeterminate.asReadonly(),
|
|
25
|
-
clearSelection: this.createClearSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate),
|
|
26
|
-
toggleSelectAll: this.createToggleSelectAllFn(selectedItems, selectAllChecked, selectAllIndeterminate),
|
|
27
|
-
toggleItemSelection: this.createToggleItemSelectionFn(selectedItems),
|
|
28
|
-
isItemSelected: this.createIsItemSelectedFn(selectedItems),
|
|
29
|
-
preserveSelection: this.createPreserveSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate),
|
|
30
|
-
getSelectedItems: this.createGetSelectedItemsFn(selectedItems),
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
createClearSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate) {
|
|
34
|
-
return () => {
|
|
35
|
-
selectedItems.set(new Set());
|
|
36
|
-
selectAllChecked.set(false);
|
|
37
|
-
selectAllIndeterminate.set(false);
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
createToggleSelectAllFn(selectedItems, selectAllChecked, selectAllIndeterminate) {
|
|
41
|
-
return (allItems) => {
|
|
42
|
-
const currentSelection = selectedItems();
|
|
43
|
-
if (currentSelection.size === allItems.length) {
|
|
44
|
-
selectedItems.set(new Set());
|
|
45
|
-
selectAllChecked.set(false);
|
|
46
|
-
selectAllIndeterminate.set(false);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
const allIds = new Set(allItems.map(item => item['id']));
|
|
50
|
-
selectedItems.set(allIds);
|
|
51
|
-
this.updateSelectAllState(allItems, allIds.size, selectAllChecked, selectAllIndeterminate);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
createToggleItemSelectionFn(selectedItems) {
|
|
56
|
-
return (item, multiple) => {
|
|
57
|
-
const id = item['id'];
|
|
58
|
-
const currentSelection = new Set(selectedItems());
|
|
59
|
-
if (!multiple) {
|
|
60
|
-
if (currentSelection.has(id)) {
|
|
61
|
-
currentSelection.clear();
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
currentSelection.clear();
|
|
65
|
-
currentSelection.add(id);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else if (currentSelection.has(id)) {
|
|
69
|
-
currentSelection.delete(id);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
currentSelection.add(id);
|
|
73
|
-
}
|
|
74
|
-
selectedItems.set(currentSelection);
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
createIsItemSelectedFn(selectedItems) {
|
|
78
|
-
return (item) => {
|
|
79
|
-
const id = item['id'];
|
|
80
|
-
return selectedItems().has(id);
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
createPreserveSelectionFn(selectedItems, selectAllChecked, selectAllIndeterminate) {
|
|
84
|
-
return (newData) => {
|
|
85
|
-
const currentSelection = selectedItems();
|
|
86
|
-
if (currentSelection.size === 0 || newData.length === 0) {
|
|
87
|
-
selectedItems.set(new Set());
|
|
88
|
-
selectAllChecked.set(false);
|
|
89
|
-
selectAllIndeterminate.set(false);
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const availableIds = new Set(newData.map(item => item['id']));
|
|
93
|
-
const preservedSelection = new Set(Array.from(currentSelection).filter(id => availableIds.has(id)));
|
|
94
|
-
selectedItems.set(preservedSelection);
|
|
95
|
-
this.updateSelectAllState(newData, preservedSelection.size, selectAllChecked, selectAllIndeterminate);
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
createGetSelectedItemsFn(selectedItems) {
|
|
99
|
-
return (allData) => {
|
|
100
|
-
const selectedIds = selectedItems();
|
|
101
|
-
return allData.filter(item => selectedIds.has(item['id']));
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
updateSelectAllState(allItems, selectedCount, selectAllChecked, selectAllIndeterminate) {
|
|
105
|
-
const totalCount = allItems.length;
|
|
106
|
-
if (selectedCount === 0) {
|
|
107
|
-
selectAllChecked.set(false);
|
|
108
|
-
selectAllIndeterminate.set(false);
|
|
109
|
-
}
|
|
110
|
-
else if (selectedCount === totalCount) {
|
|
111
|
-
selectAllChecked.set(true);
|
|
112
|
-
selectAllIndeterminate.set(false);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
selectAllChecked.set(false);
|
|
116
|
-
selectAllIndeterminate.set(true);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Emite los elementos seleccionados a través del EventEmitter proporcionado
|
|
121
|
-
* @param selectionState - Estado de selección
|
|
122
|
-
* @param allData - Todos los datos de la tabla
|
|
123
|
-
* @param selectableEmitter - EventEmitter para emitir la selección
|
|
124
|
-
*/
|
|
125
|
-
emitSelection(selectionState, allData, selectableEmitter) {
|
|
126
|
-
const selectedItems = selectionState.getSelectedItems(allData);
|
|
127
|
-
selectableEmitter.emit(selectedItems);
|
|
128
|
-
}
|
|
129
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
130
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableSelectionService, providedIn: 'root' });
|
|
131
|
-
}
|
|
132
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableSelectionService, decorators: [{
|
|
133
|
-
type: Injectable,
|
|
134
|
-
args: [{
|
|
135
|
-
providedIn: 'root'
|
|
136
|
-
}]
|
|
137
|
-
}] });
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvdGFibGUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQUdqRTs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFFOUI7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsT0FBTztZQUNILGFBQWEsRUFBRSxhQUFhLENBQUMsVUFBVSxFQUFFO1lBQ3pDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUU7WUFDM0QsY0FBYyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7WUFDcEcsZUFBZSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7WUFDdEcsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQztZQUNwRSxjQUFjLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQztZQUMxRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDO1lBQzFHLGdCQUFnQixFQUFFLElBQUks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O1FBQ3JFLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxvQkFBb0IsQ0FDeEIsUUFBYSxFQUNiLGFBQXFCLEVBQ3JCLGdCQUFvRCxFQUNwRCxzQkFBMEQ7UUFFMUQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUVuQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0Isc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ0osZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUNULGNBQTRELEVBQzVELE9BQVksRUFDWixpQkFBb0M7UUFFcEMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBUSxDQUFDO1FBQ3RFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO3dHQTVKUSxxQkFBcUI7NEdBQXJCLHFCQUFxQixjQUZsQixNQUFNOzs0RkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElEIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0aW9uYXIgbGEgc2VsZWNjacOzbiBkZSBlbGVtZW50b3MgZW4gdGFibGFzIEM4MFxuICpcbiAqIE1hbmVqYTpcbiAqIC0gU2VsZWNjacOzbiBzaW1wbGUgeSBtw7psdGlwbGVcbiAqIC0gRXN0YWRvIGRlIHNlbGVjY2nDs24gY29tcGxldGFcbiAqIC0gUHJlc2VydmFjacOzbiBkZSBzZWxlY2Npw7NuIHRyYXMgYWN0dWFsaXphY2lvbmVzIGRlIGRhdG9zXG4gKiAtIEVtaXNpw7NuIGRlIGV2ZW50b3MgZGUgc2VsZWNjacOzblxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlU2VsZWN0aW9uU2VydmljZSB7XG5cbiAgICAvKipcbiAgICAgKiBJbmljaWFsaXphIGVsIGVzdGFkbyBkZSBzZWxlY2Npw7NuIHBhcmEgdW5hIG51ZXZhIHRhYmxhXG4gICAgICogQHJldHVybnMgT2JqZXRvIGNvbiBzaWduYWxzIHkgbcOpdG9kb3MgZGUgc2VsZWNjacOzblxuICAgICAqL1xuICAgIGNyZWF0ZVNlbGVjdGlvblN0YXRlPF9UIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gc2lnbmFsPFNldDxJRD4+KG5ldyBTZXQoKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdEFsbENoZWNrZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgICAgICBjb25zdCBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gc2lnbmFsKGZhbHNlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogc2VsZWN0ZWRJdGVtcy5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkOiBzZWxlY3RBbGxDaGVja2VkLmFzUmVhZG9ubHkoKSxcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGU6IHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuYXNSZWFkb25seSgpLFxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb246IHRoaXMuY3JlYXRlQ2xlYXJTZWxlY3Rpb25GbihzZWxlY3RlZEl0ZW1zLCBzZWxlY3RBbGxDaGVja2VkLCBzZWxlY3RBbGxJbmRldGVybWluYXRlKSxcbiAgICAgICAgICAgIHRvZ2dsZVNlbGVjdEFsbDogdGhpcy5jcmVhdGVUb2dnbGVTZWxlY3RBbGxGbihzZWxlY3RlZEl0ZW1zLCBzZWxlY3RBbGxDaGVja2VkLCBzZWxlY3RBbGxJbmRldGVybWluYXRlKSxcbiAgICAgICAgICAgIHRvZ2dsZUl0ZW1TZWxlY3Rpb246IHRoaXMuY3JlYXRlVG9nZ2xlSXRlbVNlbGVjdGlvbkZuKHNlbGVjdGVkSXRlbXMpLFxuICAgICAgICAgICAgaXNJdGVtU2VsZWN0ZWQ6IHRoaXMuY3JlYXRlSXNJdGVtU2VsZWN0ZWRGbihzZWxlY3RlZEl0ZW1zKSxcbiAgICAgICAgICAgIHByZXNlcnZlU2VsZWN0aW9uOiB0aGlzLmNyZWF0ZVByZXNlcnZlU2VsZWN0aW9uRm4oc2VsZWN0ZWRJdGVtcywgc2VsZWN0QWxsQ2hlY2tlZCwgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSksXG4gICAgICAgICAgICBnZXRTZWxlY3RlZEl0ZW1zOiB0aGlzLmNyZWF0ZUdldFNlbGVjdGVkSXRlbXNGbihzZWxlY3RlZEl0ZW1zKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNsZWFyU2VsZWN0aW9uRm4oXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxTZXQ8SUQ+Pj4sXG4gICAgICAgIHNlbGVjdEFsbENoZWNrZWQ6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj4sXG4gICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGU6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuc2V0KG5ldyBTZXQoKSk7XG4gICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgICAgICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUb2dnbGVTZWxlY3RBbGxGbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PElEPj4+LFxuICAgICAgICBzZWxlY3RBbGxDaGVja2VkOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+LFxuICAgICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoYWxsSXRlbXM6IFRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGVkSXRlbXMoKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uc2l6ZSA9PT0gYWxsSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zZXQobmV3IFNldCgpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGxJZHMgPSBuZXcgU2V0KGFsbEl0ZW1zLm1hcChpdGVtID0+IGl0ZW1bJ2lkJ10gYXMgSUQpKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnNldChhbGxJZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoYWxsSXRlbXMsIGFsbElkcy5zaXplLCBzZWxlY3RBbGxDaGVja2VkLCBzZWxlY3RBbGxJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRvZ2dsZUl0ZW1TZWxlY3Rpb25GbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8U2V0PElEPj4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoaXRlbTogVCwgbXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXSBhcyBJRDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSBuZXcgU2V0KHNlbGVjdGVkSXRlbXMoKSk7XG5cbiAgICAgICAgICAgIGlmICghbXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbi5hZGQoaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnNldChjdXJyZW50U2VsZWN0aW9uKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUlzSXRlbVNlbGVjdGVkRm48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFNldDxJRD4+PlxuICAgICkge1xuICAgICAgICByZXR1cm4gKGl0ZW06IFQpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXSBhcyBJRDtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zKCkuaGFzKGlkKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVByZXNlcnZlU2VsZWN0aW9uRm48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFNldDxJRD4+PixcbiAgICAgICAgc2VsZWN0QWxsQ2hlY2tlZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PixcbiAgICAgICAgc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZTogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PlxuICAgICkge1xuICAgICAgICByZXR1cm4gKG5ld0RhdGE6IFRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGVkSXRlbXMoKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uc2l6ZSA9PT0gMCB8fCBuZXdEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuc2V0KG5ldyBTZXQoKSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUlkcyA9IG5ldyBTZXQobmV3RGF0YS5tYXAoaXRlbSA9PiBpdGVtWydpZCddIGFzIElEKSk7XG4gICAgICAgICAgICBjb25zdCBwcmVzZXJ2ZWRTZWxlY3Rpb24gPSBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oY3VycmVudFNlbGVjdGlvbikuZmlsdGVyKGlkID0+IGF2YWlsYWJsZUlkcy5oYXMoaWQpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5zZXQocHJlc2VydmVkU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUobmV3RGF0YSwgcHJlc2VydmVkU2VsZWN0aW9uLnNpemUsIHNlbGVjdEFsbENoZWNrZWQsIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR2V0U2VsZWN0ZWRJdGVtc0ZuPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxTZXQ8SUQ+Pj5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIChhbGxEYXRhOiBUW10pOiBUW10gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBzZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgICAgICByZXR1cm4gYWxsRGF0YS5maWx0ZXIoaXRlbSA9PiBzZWxlY3RlZElkcy5oYXMoaXRlbVsnaWQnXSBhcyBJRCkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0QWxsU3RhdGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgYWxsSXRlbXM6IFRbXSxcbiAgICAgICAgc2VsZWN0ZWRDb3VudDogbnVtYmVyLFxuICAgICAgICBzZWxlY3RBbGxDaGVja2VkOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+LFxuICAgICAgICBzZWxlY3RBbGxJbmRldGVybWluYXRlOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBhbGxJdGVtcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICAgICAgICBzZWxlY3RBbGxDaGVja2VkLnNldCh0cnVlKTtcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdEFsbENoZWNrZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdGUgbG9zIGVsZW1lbnRvcyBzZWxlY2Npb25hZG9zIGEgdHJhdsOpcyBkZWwgRXZlbnRFbWl0dGVyIHByb3BvcmNpb25hZG9cbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhdGUgLSBFc3RhZG8gZGUgc2VsZWNjacOzblxuICAgICAqIEBwYXJhbSBhbGxEYXRhIC0gVG9kb3MgbG9zIGRhdG9zIGRlIGxhIHRhYmxhXG4gICAgICogQHBhcmFtIHNlbGVjdGFibGVFbWl0dGVyIC0gRXZlbnRFbWl0dGVyIHBhcmEgZW1pdGlyIGxhIHNlbGVjY2nDs25cbiAgICAgKi9cbiAgICBlbWl0U2VsZWN0aW9uPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIHNlbGVjdGlvblN0YXRlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmNyZWF0ZVNlbGVjdGlvblN0YXRlPixcbiAgICAgICAgYWxsRGF0YTogVFtdLFxuICAgICAgICBzZWxlY3RhYmxlRW1pdHRlcjogRXZlbnRFbWl0dGVyPFRbXT5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGlvblN0YXRlLmdldFNlbGVjdGVkSXRlbXMoYWxsRGF0YSkgYXMgVFtdO1xuICAgICAgICBzZWxlY3RhYmxlRW1pdHRlci5lbWl0KHNlbGVjdGVkSXRlbXMpO1xuICAgIH1cbn1cbiJdfQ==
|