ngx-dsxlibrary 1.0.60 → 1.0.62
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/fesm2022/ngx-dsxlibrary.mjs +120 -38
- package/fesm2022/ngx-dsxlibrary.mjs.map +1 -1
- package/index.d.ts +295 -254
- package/ngx-dsxlibrary-1.0.62.tgz +0 -0
- package/package.json +5 -5
- package/ngx-dsxlibrary-1.0.60.tgz +0 -0
|
@@ -337,7 +337,7 @@ class AlertaService {
|
|
|
337
337
|
alertaHtmlSuccess(titleAlert, messageHtml, options = {}) {
|
|
338
338
|
// Valores por defecto (se pueden sobrescribir mediante options)
|
|
339
339
|
const { icono = 'icon/check02.png', // Ruta relativa de la imagen en assets/dsxResource/
|
|
340
|
-
icon
|
|
340
|
+
icon, // Tipo de icono SweetAlert2 (ahora opcional)
|
|
341
341
|
showConfirmButton = false, // Mostrar botón de confirmación
|
|
342
342
|
confirmButtonText = 'Ok', // Texto del botón de confirmación
|
|
343
343
|
timer = 2000, // Tiempo de auto-cierre en ms (0 = desactivado)
|
|
@@ -348,7 +348,6 @@ class AlertaService {
|
|
|
348
348
|
// Configuración base de SweetAlert
|
|
349
349
|
const alertConfig = {
|
|
350
350
|
title: titleAlert,
|
|
351
|
-
icon,
|
|
352
351
|
html: messageHtml,
|
|
353
352
|
draggable: true,
|
|
354
353
|
showConfirmButton,
|
|
@@ -360,6 +359,10 @@ class AlertaService {
|
|
|
360
359
|
imageHeight: showImage ? imageHeight : undefined,
|
|
361
360
|
imageAlt: showImage ? 'image alert' : undefined,
|
|
362
361
|
};
|
|
362
|
+
// Solo agrega el icono si está definido
|
|
363
|
+
if (icon !== undefined) {
|
|
364
|
+
alertConfig.icon = icon;
|
|
365
|
+
}
|
|
363
366
|
// Precargar imagen solo si es necesario
|
|
364
367
|
if (showImage && icono) {
|
|
365
368
|
return this.preloadImage(icono).then(() => Swal.fire(alertConfig));
|
|
@@ -462,19 +465,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImpor
|
|
|
462
465
|
|
|
463
466
|
/**
|
|
464
467
|
* Servicio para gestionar los parámetros de seguridad de la aplicación.
|
|
465
|
-
* Permite cargar los parámetros desde la API, mantenerlos en memoria, y
|
|
466
|
-
*
|
|
468
|
+
* Permite cargar los parámetros desde la API, mantenerlos en memoria, acceder y comparar valores de forma segura.
|
|
469
|
+
* Utiliza tipado genérico para los nombres de parámetros y cache interno para optimizar consultas repetidas.
|
|
470
|
+
*
|
|
471
|
+
* @template T Tipo de los nombres de parámetros permitidos (usualmente un union type de string)
|
|
467
472
|
*/
|
|
468
473
|
class ParameterValuesService {
|
|
469
|
-
/**
|
|
474
|
+
/**
|
|
475
|
+
* Parámetros iniciales inyectados mediante INITIAL_PARAMETERS.
|
|
476
|
+
* Se usan para validar y mapear los parámetros recibidos de la API.
|
|
477
|
+
*/
|
|
470
478
|
initialParameters = inject(INITIAL_PARAMETERS);
|
|
471
|
-
/**
|
|
479
|
+
/**
|
|
480
|
+
* Cache interno para optimizar la comparación de valores de parámetros.
|
|
481
|
+
* La clave es una combinación de nombre e índice, el valor es el resultado de la consulta.
|
|
482
|
+
*/
|
|
483
|
+
parameterCache = new Map();
|
|
484
|
+
alertedParams = new Set();
|
|
485
|
+
/**
|
|
486
|
+
* Servicio que contiene el método getParameterSecurity() para obtener los parámetros desde la API.
|
|
487
|
+
*/
|
|
472
488
|
apiService = inject(SecurityService);
|
|
473
|
-
/**
|
|
474
|
-
|
|
475
|
-
|
|
489
|
+
/**
|
|
490
|
+
* Señal reactiva que contiene los parámetros cargados y permite actualizaciones automáticas.
|
|
491
|
+
*/
|
|
492
|
+
_dataParameter = signal(this.initializeData(), ...(ngDevMode ? [{ debugName: "_dataParameter" }] : []));
|
|
493
|
+
/**
|
|
494
|
+
* Flag que indica si ya se cargaron los parámetros desde la API.
|
|
495
|
+
*/
|
|
476
496
|
_loaded = false;
|
|
477
|
-
/**
|
|
497
|
+
/**
|
|
498
|
+
* Inicializa los datos de parámetros usando los valores inyectados.
|
|
499
|
+
* @returns Array de parámetros iniciales tipados
|
|
500
|
+
*/
|
|
501
|
+
initializeData() {
|
|
502
|
+
return this.initialParameters.map((param) => this.createMyParameterValue(param.parameterName, param.values));
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Crea una instancia de MyParameterValues tipada y segura.
|
|
506
|
+
* @param parameterName Nombre del parámetro
|
|
507
|
+
* @param values Valores asociados al parámetro
|
|
508
|
+
* @returns Objeto MyParameterValues
|
|
509
|
+
*/
|
|
510
|
+
createMyParameterValue(parameterName, values) {
|
|
511
|
+
return {
|
|
512
|
+
parameterName,
|
|
513
|
+
values: [...values],
|
|
514
|
+
};
|
|
515
|
+
}
|
|
478
516
|
/**
|
|
479
517
|
* Devuelve los parámetros actuales como un array de solo lectura.
|
|
480
518
|
*/
|
|
@@ -493,7 +531,6 @@ class ParameterValuesService {
|
|
|
493
531
|
}
|
|
494
532
|
this._dataParameter.set(values);
|
|
495
533
|
}
|
|
496
|
-
/** ===================== MÉTODOS PRINCIPALES ===================== */
|
|
497
534
|
/**
|
|
498
535
|
* Carga los parámetros desde la API.
|
|
499
536
|
* Si ya se cargaron y force=false, devuelve la copia en memoria.
|
|
@@ -527,7 +564,53 @@ class ParameterValuesService {
|
|
|
527
564
|
refreshParameters() {
|
|
528
565
|
return this.loadParameters(true);
|
|
529
566
|
}
|
|
530
|
-
/**
|
|
567
|
+
/**
|
|
568
|
+
* Crea una copia segura y mutable de los parámetros actuales.
|
|
569
|
+
* @returns Array de parámetros
|
|
570
|
+
*/
|
|
571
|
+
createSafeCopy() {
|
|
572
|
+
return this.dataParameter.map((item) => this.createMyParameterValue(item.parameterName, [...item.values]));
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Mapea los parámetros recibidos de la API a objetos tipados y seguros.
|
|
576
|
+
* @param apiParameters Parámetros recibidos desde la API
|
|
577
|
+
* @returns Array de MyParameterValues
|
|
578
|
+
*/
|
|
579
|
+
mapToMyParameterValues(apiParameters) {
|
|
580
|
+
const initialNames = this.initialParameters.map((p) => p.parameterName);
|
|
581
|
+
return apiParameters
|
|
582
|
+
.filter((param) => initialNames.includes(param.parameterName))
|
|
583
|
+
.map((param) => {
|
|
584
|
+
// Función de conversión type-safe
|
|
585
|
+
return this.convertToTypedParameter(param);
|
|
586
|
+
})
|
|
587
|
+
.filter((param) => param !== null);
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* Convierte un parámetro de la API a un objeto tipado, validando el nombre.
|
|
591
|
+
* @param param Parámetro recibido de la API
|
|
592
|
+
* @returns Objeto MyParameterValues o null si no es válido
|
|
593
|
+
*/
|
|
594
|
+
convertToTypedParameter(param) {
|
|
595
|
+
const initialParam = this.initialParameters.find((p) => p.parameterName === param.parameterName);
|
|
596
|
+
if (!initialParam) {
|
|
597
|
+
return null;
|
|
598
|
+
}
|
|
599
|
+
// Conversión segura con verificación
|
|
600
|
+
if (this.isValidParameterName(param.parameterName)) {
|
|
601
|
+
return this.createMyParameterValue(param.parameterName, param.parameterValues?.map((v) => v.value) ?? []);
|
|
602
|
+
}
|
|
603
|
+
return null;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Verifica si un nombre de parámetro es válido según los parámetros iniciales.
|
|
607
|
+
* @param name Nombre a validar
|
|
608
|
+
* @returns true si es válido
|
|
609
|
+
*/
|
|
610
|
+
isValidParameterName(name) {
|
|
611
|
+
// Verifica que el nombre esté en los parámetros iniciales
|
|
612
|
+
return this.initialParameters.some((param) => param.parameterName === name);
|
|
613
|
+
}
|
|
531
614
|
/**
|
|
532
615
|
* Valida que los parámetros devueltos por la API coincidan con los iniciales.
|
|
533
616
|
* Muestra errores o advertencias en consola si existen diferencias.
|
|
@@ -546,21 +629,6 @@ class ParameterValuesService {
|
|
|
546
629
|
console.warn(`Cantidad distinta: iniciales=${initialNames.length}, api=${apiNames.length}`);
|
|
547
630
|
}
|
|
548
631
|
}
|
|
549
|
-
/**
|
|
550
|
-
* Transforma un array de ParameterSecurity en MyParameterValues
|
|
551
|
-
* @param apiParameters Parámetros recibidos desde la API
|
|
552
|
-
* @returns Array de MyParameterValues
|
|
553
|
-
*/
|
|
554
|
-
mapToMyParameterValues(apiParameters) {
|
|
555
|
-
const initialNames = this.initialParameters.map((p) => p.parameterName);
|
|
556
|
-
return apiParameters
|
|
557
|
-
.filter((param) => initialNames.includes(param.parameterName))
|
|
558
|
-
.map((param) => ({
|
|
559
|
-
parameterName: param.parameterName,
|
|
560
|
-
values: param.parameterValues?.map((v) => v.value) ?? [],
|
|
561
|
-
}));
|
|
562
|
-
}
|
|
563
|
-
/** ===================== HELPERS SEGUROS ===================== */
|
|
564
632
|
/**
|
|
565
633
|
* Obtiene un valor específico de un parámetro.
|
|
566
634
|
* Devuelve `defaultValue` si no existe o el índice es inválido.
|
|
@@ -577,14 +645,35 @@ class ParameterValuesService {
|
|
|
577
645
|
return param.values[index];
|
|
578
646
|
}
|
|
579
647
|
/**
|
|
580
|
-
* Compara un valor específico con un valor esperado.
|
|
648
|
+
* Compara un valor específico con un valor esperado, usando cache para optimizar llamadas repetidas.
|
|
581
649
|
* @param parameterName Nombre del parámetro
|
|
582
650
|
* @param expectedValue Valor esperado
|
|
583
651
|
* @param index Índice del valor dentro del array (default: 0)
|
|
584
652
|
* @returns true si coincide, false en caso contrario
|
|
585
653
|
*/
|
|
586
654
|
isParameterValue(parameterName, expectedValue, index = 0) {
|
|
587
|
-
|
|
655
|
+
const cacheKey = `${String(parameterName)}_${index}`;
|
|
656
|
+
// Validación: si el parámetro no existe, muestra mensaje solo una vez y corta el flujo
|
|
657
|
+
const paramExists = this.dataParameter.some((p) => p.parameterName === parameterName);
|
|
658
|
+
if (!paramExists) {
|
|
659
|
+
if (!this.alertedParams.has(parameterName)) {
|
|
660
|
+
window.alert(`Error: El parámetro '${parameterName}' no existe.`);
|
|
661
|
+
this.alertedParams.add(parameterName);
|
|
662
|
+
}
|
|
663
|
+
return false;
|
|
664
|
+
}
|
|
665
|
+
if (!this.parameterCache.has(cacheKey)) {
|
|
666
|
+
//console.log('Parametro: ' + parameterName);
|
|
667
|
+
const value = this.getValue(parameterName, index);
|
|
668
|
+
this.parameterCache.set(cacheKey, value);
|
|
669
|
+
}
|
|
670
|
+
return this.parameterCache.get(cacheKey) === expectedValue;
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Limpia el cache interno de comparaciones de parámetros.
|
|
674
|
+
*/
|
|
675
|
+
clearParameterCache() {
|
|
676
|
+
this.parameterCache.clear();
|
|
588
677
|
}
|
|
589
678
|
/**
|
|
590
679
|
* Verifica si un parámetro tiene al menos un valor.
|
|
@@ -614,7 +703,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImpor
|
|
|
614
703
|
}] });
|
|
615
704
|
|
|
616
705
|
class NavbarDsxComponent {
|
|
617
|
-
_securityService = inject(SecurityService);
|
|
706
|
+
//private _securityService = inject(SecurityService);
|
|
618
707
|
_parameterSecurityService = inject(ParameterValuesService);
|
|
619
708
|
_alertaService = inject(AlertaService);
|
|
620
709
|
logoWidth = input('300', ...(ngDevMode ? [{ debugName: "logoWidth" }] : []));
|
|
@@ -659,7 +748,7 @@ class NavbarDsxComponent {
|
|
|
659
748
|
console.error('Error al actualizar parámetros de SeguridadIT', err);
|
|
660
749
|
this._alertaService.toastrAlerts(3, 'SeguridadIT', 'Error al actualizar parámetros!', 2);
|
|
661
750
|
},
|
|
662
|
-
complete: () =>
|
|
751
|
+
complete: () => this._parameterSecurityService.clearParameterCache(),
|
|
663
752
|
});
|
|
664
753
|
}
|
|
665
754
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NavbarDsxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -1040,13 +1129,6 @@ function createInitialCache(cacheKeys) {
|
|
|
1040
1129
|
return Object.fromEntries(Object.values(cacheKeys).map((key) => [key, false]));
|
|
1041
1130
|
}
|
|
1042
1131
|
|
|
1043
|
-
const INITIAL_PARAMETERS_FOR_TYPE = [
|
|
1044
|
-
'pCreate',
|
|
1045
|
-
'pRead',
|
|
1046
|
-
'pUpdate',
|
|
1047
|
-
'pDelete',
|
|
1048
|
-
];
|
|
1049
|
-
|
|
1050
1132
|
class DsxAddToolsModule {
|
|
1051
1133
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: DsxAddToolsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1052
1134
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: DsxAddToolsModule, imports: [JsonValuesDebujComponent], exports: [CommonModule,
|