@jvsoft/utils 1.0.0-alpha.7 → 1.0.0-alpha.9

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.
Files changed (48) hide show
  1. package/directives/auto-select-first.directive.d.ts +13 -0
  2. package/directives/public-api.d.ts +1 -0
  3. package/fesm2022/jvsoft-utils-directives.mjs +72 -3
  4. package/fesm2022/jvsoft-utils-directives.mjs.map +1 -1
  5. package/fesm2022/jvsoft-utils-functions.mjs +1744 -0
  6. package/fesm2022/jvsoft-utils-functions.mjs.map +1 -0
  7. package/fesm2022/jvsoft-utils-interfaces.mjs +6 -0
  8. package/fesm2022/jvsoft-utils-interfaces.mjs.map +1 -0
  9. package/fesm2022/jvsoft-utils-pipes.mjs +345 -0
  10. package/fesm2022/jvsoft-utils-pipes.mjs.map +1 -0
  11. package/fesm2022/jvsoft-utils.mjs +72 -3
  12. package/fesm2022/jvsoft-utils.mjs.map +1 -1
  13. package/functions/index.d.ts +5 -0
  14. package/interfaces/index.d.ts +5 -0
  15. package/package.json +13 -1
  16. package/pipes/index.d.ts +5 -0
  17. package/public-api.d.ts +3 -3
  18. /package/{src/functions → functions}/base64.d.ts +0 -0
  19. /package/{src/functions → functions}/browser.d.ts +0 -0
  20. /package/{src/functions → functions}/crypto-js.d.ts +0 -0
  21. /package/{src/functions → functions}/date.d.ts +0 -0
  22. /package/{src/functions → functions}/dev-log.d.ts +0 -0
  23. /package/{src/functions → functions}/email.d.ts +0 -0
  24. /package/{src/functions → functions}/file.d.ts +0 -0
  25. /package/{src/functions → functions}/forms.d.ts +0 -0
  26. /package/{src/functions → functions}/http-client.d.ts +0 -0
  27. /package/{src/functions → functions}/local-storage.d.ts +0 -0
  28. /package/{src/functions → functions}/mat-form-controls/autocomplete.d.ts +0 -0
  29. /package/{src/functions → functions}/mat-form-controls/index.d.ts +0 -0
  30. /package/{src/functions → functions}/number.d.ts +0 -0
  31. /package/{src/functions → functions}/object-transformation.d.ts +0 -0
  32. /package/{src/functions → functions}/objects-arrays.d.ts +0 -0
  33. /package/{src/functions → functions}/public-api.d.ts +0 -0
  34. /package/{src/functions → functions}/string.d.ts +0 -0
  35. /package/{src/functions → functions}/sweetalert.d.ts +0 -0
  36. /package/{src/functions → functions}/utiles.d.ts +0 -0
  37. /package/{src/interfaces → interfaces}/datos.d.ts +0 -0
  38. /package/{src/interfaces → interfaces}/public-api.d.ts +0 -0
  39. /package/{src/pipes → pipes}/data-en-lista.pipe.d.ts +0 -0
  40. /package/{src/pipes → pipes}/date-diff-string.pipe.d.ts +0 -0
  41. /package/{src/pipes → pipes}/display-with.pipe.d.ts +0 -0
  42. /package/{src/pipes → pipes}/filtro.pipe.d.ts +0 -0
  43. /package/{src/pipes → pipes}/form-control-is-required.pipe.d.ts +0 -0
  44. /package/{src/pipes → pipes}/json-parse.pipe.d.ts +0 -0
  45. /package/{src/pipes → pipes}/no-sanitize.pipe.d.ts +0 -0
  46. /package/{src/pipes → pipes}/public-api.d.ts +0 -0
  47. /package/{src/pipes → pipes}/tipo-valor-funcion.pipe.d.ts +0 -0
  48. /package/{src/pipes → pipes}/zero-fill.pipe.d.ts +0 -0
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class AutoSelectFirstDirective {
3
+ private readonly ngControl;
4
+ private readonly fcName;
5
+ private readonly toastr;
6
+ options: import("@angular/core").InputSignal<any[] | null>;
7
+ jvsIdKey: import("@angular/core").InputSignal<string | string[] | null>;
8
+ jvsEmptyMsg: import("@angular/core").InputSignal<string>;
9
+ onAutoSelect: import("@angular/core").OutputEmitterRef<any>;
10
+ constructor();
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<AutoSelectFirstDirective, never>;
12
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AutoSelectFirstDirective, "[jvsAutoSelectFirst]", never, { "options": { "alias": "jvsAutoSelectFirst"; "required": false; "isSignal": true; }; "jvsIdKey": { "alias": "jvsIdKey"; "required": false; "isSignal": true; }; "jvsEmptyMsg": { "alias": "jvsEmptyMsg"; "required": false; "isSignal": true; }; }, { "onAutoSelect": "onAutoSelect"; }, never, never, true, never>;
13
+ }
@@ -1,2 +1,3 @@
1
1
  export * from './autocomplete-match-validator.directive';
2
2
  export * from './autocomplete.directive';
3
+ export * from './auto-select-first.directive';
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, forwardRef, Directive, inject, DestroyRef, output, HostListener } from '@angular/core';
3
- import { NG_VALIDATORS, NgControl } from '@angular/forms';
2
+ import { input, forwardRef, Directive, inject, DestroyRef, output, HostListener, effect, untracked } from '@angular/core';
3
+ import { NG_VALIDATORS, NgControl, FormControlName } from '@angular/forms';
4
4
  import { Subject, merge, debounceTime, startWith, distinctUntilChanged, tap, switchMap, of, map, finalize } from 'rxjs';
5
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { ToastrService } from 'ngx-toastr';
6
7
 
7
8
  class AutocompleteMatchValidatorDirective {
8
9
  opciones = input([], { alias: 'jvsAutocompleteMatch' });
@@ -142,9 +143,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
142
143
  args: ['focus']
143
144
  }] } });
144
145
 
146
+ class AutoSelectFirstDirective {
147
+ ngControl = inject(NgControl, { optional: true });
148
+ fcName = inject(FormControlName, { optional: true });
149
+ toastr = inject(ToastrService, { optional: true });
150
+ // Inputs using Signals
151
+ options = input(null, { alias: 'jvsAutoSelectFirst' });
152
+ jvsIdKey = input(null);
153
+ jvsEmptyMsg = input('Lista sin elementos');
154
+ onAutoSelect = output();
155
+ constructor() {
156
+ effect(() => {
157
+ const currentOptions = this.options();
158
+ const idKey = this.jvsIdKey();
159
+ const emptyMsg = this.jvsEmptyMsg();
160
+ if (currentOptions === null)
161
+ return;
162
+ const optionsArray = Array.isArray(currentOptions) ? currentOptions : [];
163
+ if (optionsArray.length > 0) {
164
+ untracked(() => {
165
+ const control = this.ngControl?.control;
166
+ const currentValue = control?.value;
167
+ // Only autoselect if empty
168
+ if (control && (currentValue === null || currentValue === undefined || currentValue === '')) {
169
+ const firstItem = optionsArray[0];
170
+ let valueToSet;
171
+ // Resolve key
172
+ let effectiveKey = idKey;
173
+ // Default to formControlName if not provided
174
+ if (!effectiveKey && this.fcName) {
175
+ effectiveKey = this.fcName.name;
176
+ }
177
+ if (effectiveKey) {
178
+ if (Array.isArray(effectiveKey)) {
179
+ // Composite key: build an object with the specified keys
180
+ valueToSet = {};
181
+ effectiveKey.forEach(key => {
182
+ valueToSet[key] = firstItem[key];
183
+ });
184
+ }
185
+ else {
186
+ valueToSet = firstItem[effectiveKey];
187
+ }
188
+ }
189
+ else {
190
+ // Use whole item if no key resolution possible
191
+ valueToSet = firstItem;
192
+ }
193
+ control.setValue(valueToSet);
194
+ this.onAutoSelect.emit(firstItem);
195
+ }
196
+ });
197
+ }
198
+ else if (emptyMsg && this.toastr) {
199
+ this.toastr.warning(emptyMsg, 'Filtrado');
200
+ }
201
+ });
202
+ }
203
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AutoSelectFirstDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
204
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.14", type: AutoSelectFirstDirective, isStandalone: true, selector: "[jvsAutoSelectFirst]", inputs: { options: { classPropertyName: "options", publicName: "jvsAutoSelectFirst", isSignal: true, isRequired: false, transformFunction: null }, jvsIdKey: { classPropertyName: "jvsIdKey", publicName: "jvsIdKey", isSignal: true, isRequired: false, transformFunction: null }, jvsEmptyMsg: { classPropertyName: "jvsEmptyMsg", publicName: "jvsEmptyMsg", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onAutoSelect: "onAutoSelect" }, ngImport: i0 });
205
+ }
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AutoSelectFirstDirective, decorators: [{
207
+ type: Directive,
208
+ args: [{
209
+ selector: '[jvsAutoSelectFirst]',
210
+ standalone: true
211
+ }]
212
+ }], ctorParameters: () => [] });
213
+
145
214
  /**
146
215
  * Generated bundle index. Do not edit.
147
216
  */
148
217
 
149
- export { AutocompleteMatchValidatorDirective, JvsAutocompleteDirective };
218
+ export { AutoSelectFirstDirective, AutocompleteMatchValidatorDirective, JvsAutocompleteDirective };
150
219
  //# sourceMappingURL=jvsoft-utils-directives.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"jvsoft-utils-directives.mjs","sources":["../../../projects/utils/directives/autocomplete-match-validator.directive.ts","../../../projects/utils/directives/autocomplete.directive.ts","../../../projects/utils/directives/jvsoft-utils-directives.ts"],"sourcesContent":["import { Directive, forwardRef, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n@Directive({\n selector: '[jvsAutocompleteMatch]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AutocompleteMatchValidatorDirective),\n multi: true,\n },\n ],\n standalone: true\n})\nexport class AutocompleteMatchValidatorDirective implements Validator {\n opciones = input<any[]>([], { alias: 'jvsAutocompleteMatch' });\n formControlName = input<any>();\n idLista = input<string>();\n\n validate(control: AbstractControl): ValidationErrors | null {\n const idLista = this.idLista() ?? this.formControlName();\n const value = control.value;\n const opciones = this.opciones();\n\n if (!value) return null;\n\n if (!opciones) {\n console.error('Debe definir opciones para el validador jvsAutocompleteMatch');\n return { itemSelected: true };\n }\n\n const encontrado = opciones.some(item =>\n typeof value === 'object'\n ? item[idLista] === value[idLista]\n : item[idLista] === value\n );\n\n return encontrado ? null : { itemSelected: true };\n }\n}\n","import { Directive, ElementRef, EventEmitter, inject, OnInit, DestroyRef, HostListener, input, output } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged, isObservable, of, switchMap, takeUntil, tap, finalize, map, Observable, startWith, merge, Subject } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[jvsAutocomplete]',\n standalone: true\n})\nexport class JvsAutocompleteDirective implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngControl = inject(NgControl, { optional: true });\n private readonly focus$ = new Subject<void>();\n \n // Signal-based Inputs\n data = input<any[] | null>(null);\n fields = input<string | string[]>('');\n typeReq = input<string>('');\n queryService = input<any>(null);\n minLength = input<number>(3);\n dataExtra = input<any>({});\n anonimo = input<boolean>(false);\n debounce = input<number>(300);\n \n // Modern Outputs\n filtered = output<any[]>();\n loading = output<boolean>();\n\n @HostListener('focus')\n onFocus() {\n this.focus$.next();\n }\n\n ngOnInit(): void {\n const control = this.ngControl;\n if (!control || !control.valueChanges) {\n console.warn('JvsAutocompleteDirective: No se encontró ngControl o valueChanges. Asegúrate de que el input tenga un formControl o formControlName.');\n return;\n }\n\n // Si es data local, bajamos el debounce por defecto a 0 si no se ha especificado\n const isLocal = this.data() && !this.typeReq();\n const actualDebounce = (isLocal && this.debounce() === 300) ? 0 : this.debounce();\n\n merge(\n control.valueChanges.pipe(debounceTime(actualDebounce)),\n this.focus$\n ).pipe(\n takeUntilDestroyed(this.destroyRef),\n startWith(control.value),\n distinctUntilChanged(),\n tap(() => {\n if (this.typeReq()) this.loading.emit(true);\n }),\n switchMap((): Observable<any[] | null> => {\n const value = control.value;\n // Si el valor es un objeto (proviene de seleccionar una opción), no volvemos a filtrar\n if (typeof value === 'object' && value !== null) {\n if (this.typeReq()) this.loading.emit(false);\n return of(null);\n }\n\n if (this.typeReq() && this.queryService()) {\n return this.fetchApi(value?.toString() || '');\n } else if (this.data()) {\n const res = this.filterLocal(value?.toString() || '');\n return of(res);\n }\n \n if (this.typeReq()) this.loading.emit(false);\n return of([]);\n })\n ).subscribe((result) => {\n if (result !== null) {\n this.filtered.emit(result);\n }\n });\n }\n\n private filterLocal(value: string): any[] {\n const data = this.data();\n if (!value) return data || [];\n \n const search = value.toLowerCase();\n const rawFields = this.fields();\n const fields = Array.isArray(rawFields) ? rawFields : [rawFields];\n\n return (data || []).filter(item => {\n return fields.some(field => {\n const val = item[field];\n return val && val.toString().toLowerCase().includes(search);\n });\n });\n }\n\n private fetchApi(value: string): Observable<any[]> {\n const typeReq = this.typeReq();\n const queryService = this.queryService();\n\n if (!value || value.length < this.minLength()) {\n this.loading.emit(false);\n return of([]);\n }\n\n return queryService.getDataMethod('GET', typeReq, {\n ...this.dataExtra(),\n txtBuscar: value\n }, this.anonimo()).pipe(\n map((res: any) => res[typeReq] ?? []),\n finalize(() => this.loading.emit(false))\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jvsoft-utils-directives.mjs","sources":["../../../projects/utils/directives/autocomplete-match-validator.directive.ts","../../../projects/utils/directives/autocomplete.directive.ts","../../../projects/utils/directives/auto-select-first.directive.ts","../../../projects/utils/directives/jvsoft-utils-directives.ts"],"sourcesContent":["import { Directive, forwardRef, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n@Directive({\n selector: '[jvsAutocompleteMatch]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AutocompleteMatchValidatorDirective),\n multi: true,\n },\n ],\n standalone: true\n})\nexport class AutocompleteMatchValidatorDirective implements Validator {\n opciones = input<any[]>([], { alias: 'jvsAutocompleteMatch' });\n formControlName = input<any>();\n idLista = input<string>();\n\n validate(control: AbstractControl): ValidationErrors | null {\n const idLista = this.idLista() ?? this.formControlName();\n const value = control.value;\n const opciones = this.opciones();\n\n if (!value) return null;\n\n if (!opciones) {\n console.error('Debe definir opciones para el validador jvsAutocompleteMatch');\n return { itemSelected: true };\n }\n\n const encontrado = opciones.some(item =>\n typeof value === 'object'\n ? item[idLista] === value[idLista]\n : item[idLista] === value\n );\n\n return encontrado ? null : { itemSelected: true };\n }\n}\n","import { Directive, ElementRef, EventEmitter, inject, OnInit, DestroyRef, HostListener, input, output } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged, isObservable, of, switchMap, takeUntil, tap, finalize, map, Observable, startWith, merge, Subject } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[jvsAutocomplete]',\n standalone: true\n})\nexport class JvsAutocompleteDirective implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly ngControl = inject(NgControl, { optional: true });\n private readonly focus$ = new Subject<void>();\n \n // Signal-based Inputs\n data = input<any[] | null>(null);\n fields = input<string | string[]>('');\n typeReq = input<string>('');\n queryService = input<any>(null);\n minLength = input<number>(3);\n dataExtra = input<any>({});\n anonimo = input<boolean>(false);\n debounce = input<number>(300);\n \n // Modern Outputs\n filtered = output<any[]>();\n loading = output<boolean>();\n\n @HostListener('focus')\n onFocus() {\n this.focus$.next();\n }\n\n ngOnInit(): void {\n const control = this.ngControl;\n if (!control || !control.valueChanges) {\n console.warn('JvsAutocompleteDirective: No se encontró ngControl o valueChanges. Asegúrate de que el input tenga un formControl o formControlName.');\n return;\n }\n\n // Si es data local, bajamos el debounce por defecto a 0 si no se ha especificado\n const isLocal = this.data() && !this.typeReq();\n const actualDebounce = (isLocal && this.debounce() === 300) ? 0 : this.debounce();\n\n merge(\n control.valueChanges.pipe(debounceTime(actualDebounce)),\n this.focus$\n ).pipe(\n takeUntilDestroyed(this.destroyRef),\n startWith(control.value),\n distinctUntilChanged(),\n tap(() => {\n if (this.typeReq()) this.loading.emit(true);\n }),\n switchMap((): Observable<any[] | null> => {\n const value = control.value;\n // Si el valor es un objeto (proviene de seleccionar una opción), no volvemos a filtrar\n if (typeof value === 'object' && value !== null) {\n if (this.typeReq()) this.loading.emit(false);\n return of(null);\n }\n\n if (this.typeReq() && this.queryService()) {\n return this.fetchApi(value?.toString() || '');\n } else if (this.data()) {\n const res = this.filterLocal(value?.toString() || '');\n return of(res);\n }\n \n if (this.typeReq()) this.loading.emit(false);\n return of([]);\n })\n ).subscribe((result) => {\n if (result !== null) {\n this.filtered.emit(result);\n }\n });\n }\n\n private filterLocal(value: string): any[] {\n const data = this.data();\n if (!value) return data || [];\n \n const search = value.toLowerCase();\n const rawFields = this.fields();\n const fields = Array.isArray(rawFields) ? rawFields : [rawFields];\n\n return (data || []).filter(item => {\n return fields.some(field => {\n const val = item[field];\n return val && val.toString().toLowerCase().includes(search);\n });\n });\n }\n\n private fetchApi(value: string): Observable<any[]> {\n const typeReq = this.typeReq();\n const queryService = this.queryService();\n\n if (!value || value.length < this.minLength()) {\n this.loading.emit(false);\n return of([]);\n }\n\n return queryService.getDataMethod('GET', typeReq, {\n ...this.dataExtra(),\n txtBuscar: value\n }, this.anonimo()).pipe(\n map((res: any) => res[typeReq] ?? []),\n finalize(() => this.loading.emit(false))\n );\n }\n}\n","import {Directive, effect, inject, input, output, untracked} from '@angular/core';\nimport {FormControlName, NgControl} from '@angular/forms';\nimport {ToastrService} from 'ngx-toastr';\n\n@Directive({\n selector: '[jvsAutoSelectFirst]',\n standalone: true\n})\nexport class AutoSelectFirstDirective {\n private readonly ngControl = inject(NgControl, {optional: true});\n private readonly fcName = inject(FormControlName, {optional: true});\n private readonly toastr = inject(ToastrService, {optional: true});\n\n // Inputs using Signals\n options = input<any[] | null>(null, { alias: 'jvsAutoSelectFirst' });\n jvsIdKey = input<string | string[] | null>(null);\n jvsEmptyMsg = input<string>('Lista sin elementos');\n \n onAutoSelect = output<any>();\n\n constructor() {\n effect(() => {\n const currentOptions = this.options();\n const idKey = this.jvsIdKey();\n const emptyMsg = this.jvsEmptyMsg();\n\n if (currentOptions === null) return;\n\n const optionsArray = Array.isArray(currentOptions) ? currentOptions : [];\n\n if (optionsArray.length > 0) {\n untracked(() => {\n const control = this.ngControl?.control;\n const currentValue = control?.value;\n\n // Only autoselect if empty\n if (control && (currentValue === null || currentValue === undefined || currentValue === '')) {\n const firstItem = optionsArray[0];\n let valueToSet: any;\n\n // Resolve key\n let effectiveKey = idKey;\n // Default to formControlName if not provided\n if (!effectiveKey && this.fcName) {\n effectiveKey = this.fcName.name as string;\n }\n\n if (effectiveKey) {\n if (Array.isArray(effectiveKey)) {\n // Composite key: build an object with the specified keys\n valueToSet = {};\n effectiveKey.forEach(key => {\n valueToSet[key] = firstItem[key];\n });\n } else {\n valueToSet = firstItem[effectiveKey];\n }\n } else {\n // Use whole item if no key resolution possible\n valueToSet = firstItem;\n }\n\n control.setValue(valueToSet);\n this.onAutoSelect.emit(firstItem);\n }\n });\n } else if (emptyMsg && this.toastr) {\n this.toastr.warning(emptyMsg, 'Filtrado');\n }\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}