valtech-components 2.0.388 → 2.0.390
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/esm2022/lib/components/molecules/select-search/select-search.component.mjs +66 -7
- package/fesm2022/valtech-components.mjs +65 -6
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/select-search/select-search.component.d.ts +2 -0
- package/lib/components/organisms/article/article.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, inject, Input, ViewChild, signal, computed } from '@angular/core';
|
|
2
|
+
import { Component, inject, Input, ViewChild, signal, computed, effect } from '@angular/core';
|
|
3
3
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { IonicModule } from '@ionic/angular';
|
|
5
5
|
import { LangService } from '../../../services/lang-provider/lang-provider.service';
|
|
@@ -19,6 +19,8 @@ export class SelectSearchComponent {
|
|
|
19
19
|
this.isOpen = signal(false);
|
|
20
20
|
this.searchTerm = signal('');
|
|
21
21
|
this.selectedValue = signal(null);
|
|
22
|
+
// Force options to be reactive
|
|
23
|
+
this.optionsSignal = signal([]);
|
|
22
24
|
// Computed signals
|
|
23
25
|
this.displayValue = computed(() => {
|
|
24
26
|
const value = this.selectedValue();
|
|
@@ -28,20 +30,25 @@ export class SelectSearchComponent {
|
|
|
28
30
|
return option ? option[this.labelProperty] : '';
|
|
29
31
|
});
|
|
30
32
|
this.filteredOptions = computed(() => {
|
|
31
|
-
|
|
33
|
+
// Use signal instead of props directly
|
|
34
|
+
const options = this.optionsSignal();
|
|
32
35
|
const search = this.searchTerm().toLowerCase();
|
|
33
36
|
// Debug mejorado
|
|
34
37
|
console.log('[SelectSearch] filteredOptions computed:', {
|
|
35
38
|
optionsCount: options.length,
|
|
36
39
|
searchTerm: search,
|
|
37
|
-
options: options
|
|
40
|
+
options: options,
|
|
38
41
|
labelProperty: this.labelProperty,
|
|
39
42
|
valueProperty: this.valueProperty,
|
|
43
|
+
propsExists: !!this.props,
|
|
44
|
+
propsOptionsExists: !!this.props?.options,
|
|
45
|
+
propsOptionsLength: this.props?.options?.length || 0,
|
|
40
46
|
firstOptionStructure: options[0] ? {
|
|
41
47
|
[this.labelProperty]: options[0][this.labelProperty],
|
|
42
48
|
[this.valueProperty]: options[0][this.valueProperty],
|
|
43
|
-
typeOfId: typeof options[0][this.valueProperty]
|
|
44
|
-
|
|
49
|
+
typeOfId: typeof options[0][this.valueProperty],
|
|
50
|
+
fullOption: options[0]
|
|
51
|
+
} : 'NO_OPTIONS'
|
|
45
52
|
});
|
|
46
53
|
if (!search) {
|
|
47
54
|
return options;
|
|
@@ -60,8 +67,26 @@ export class SelectSearchComponent {
|
|
|
60
67
|
this.placeholder = this.langService.getText('_global', 'selectOption', 'Seleccione una opción');
|
|
61
68
|
// Close dropdown when clicking outside
|
|
62
69
|
document.addEventListener('click', this.handleClickOutside.bind(this));
|
|
70
|
+
// Debug effect to track when filteredOptions changes
|
|
71
|
+
effect(() => {
|
|
72
|
+
const options = this.filteredOptions();
|
|
73
|
+
console.log('[SelectSearch] EFFECT - filteredOptions changed:', {
|
|
74
|
+
optionsCount: options.length,
|
|
75
|
+
options: options,
|
|
76
|
+
timestamp: new Date().toLocaleTimeString()
|
|
77
|
+
});
|
|
78
|
+
});
|
|
63
79
|
}
|
|
64
80
|
ngOnInit() {
|
|
81
|
+
console.log('[SelectSearch] ngOnInit:', {
|
|
82
|
+
props: !!this.props,
|
|
83
|
+
options: this.props?.options?.length || 0,
|
|
84
|
+
control: !!this.props?.control
|
|
85
|
+
});
|
|
86
|
+
// Update options signal
|
|
87
|
+
if (this.props?.options) {
|
|
88
|
+
this.optionsSignal.set(this.props.options);
|
|
89
|
+
}
|
|
65
90
|
this.applyDefaultValue();
|
|
66
91
|
this.syncSelectedValue();
|
|
67
92
|
}
|
|
@@ -69,7 +94,18 @@ export class SelectSearchComponent {
|
|
|
69
94
|
document.removeEventListener('click', this.handleClickOutside.bind(this));
|
|
70
95
|
}
|
|
71
96
|
ngOnChanges(changes) {
|
|
97
|
+
console.log('[SelectSearch] ngOnChanges:', {
|
|
98
|
+
hasPropsChange: !!changes['props'],
|
|
99
|
+
props: !!this.props,
|
|
100
|
+
options: this.props?.options?.length || 0,
|
|
101
|
+
propsOptions: this.props?.options
|
|
102
|
+
});
|
|
72
103
|
if (changes['props'] && this.props) {
|
|
104
|
+
// Update options signal when props change
|
|
105
|
+
if (this.props.options) {
|
|
106
|
+
console.log('[SelectSearch] Updating optionsSignal with:', this.props.options);
|
|
107
|
+
this.optionsSignal.set(this.props.options);
|
|
108
|
+
}
|
|
73
109
|
this.syncSelectedValue();
|
|
74
110
|
}
|
|
75
111
|
}
|
|
@@ -117,13 +153,22 @@ export class SelectSearchComponent {
|
|
|
117
153
|
}
|
|
118
154
|
}
|
|
119
155
|
getOptionByValue(value) {
|
|
120
|
-
return this.
|
|
156
|
+
return this.optionsSignal().find(option => String(option[this.valueProperty]) === String(value));
|
|
121
157
|
}
|
|
122
158
|
applyDefaultValue() {
|
|
123
159
|
if (this.props) {
|
|
124
160
|
applyDefaultValueToControl(this.props);
|
|
125
161
|
}
|
|
126
162
|
}
|
|
163
|
+
debugOptions() {
|
|
164
|
+
console.log('[SelectSearch] DEBUG CLICK:', {
|
|
165
|
+
props: this.props,
|
|
166
|
+
filteredOptions: this.filteredOptions(),
|
|
167
|
+
searchTerm: this.searchTerm(),
|
|
168
|
+
propsOptions: this.props?.options,
|
|
169
|
+
computed: this.filteredOptions()
|
|
170
|
+
});
|
|
171
|
+
}
|
|
127
172
|
syncSelectedValue() {
|
|
128
173
|
if (this.props?.control?.value) {
|
|
129
174
|
this.selectedValue.set(String(this.props.control.value));
|
|
@@ -164,6 +209,11 @@ export class SelectSearchComponent {
|
|
|
164
209
|
[class.visible]="isOpen()"
|
|
165
210
|
#dropdown
|
|
166
211
|
>
|
|
212
|
+
<!-- Debug button -->
|
|
213
|
+
<div class="search-container" style="background: red; color: white; padding: 4px;">
|
|
214
|
+
<button (click)="debugOptions()">DEBUG: {{ filteredOptions().length }} opciones</button>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
167
217
|
<!-- Search bar -->
|
|
168
218
|
<div class="search-container" *ngIf="props?.options && props.options.length > 5">
|
|
169
219
|
<ion-searchbar
|
|
@@ -198,6 +248,8 @@ export class SelectSearchComponent {
|
|
|
198
248
|
<ion-item *ngIf="filteredOptions().length === 0" class="no-results">
|
|
199
249
|
<ion-label color="medium">
|
|
200
250
|
{{ searchTerm() ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
|
|
251
|
+
<!-- Debug info -->
|
|
252
|
+
<br><small>Debug: {{ filteredOptions().length }} opciones | Props: {{ !!props }} | Search: "{{ searchTerm() }}"</small>
|
|
201
253
|
</ion-label>
|
|
202
254
|
</ion-item>
|
|
203
255
|
</ion-list>
|
|
@@ -241,6 +293,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
241
293
|
[class.visible]="isOpen()"
|
|
242
294
|
#dropdown
|
|
243
295
|
>
|
|
296
|
+
<!-- Debug button -->
|
|
297
|
+
<div class="search-container" style="background: red; color: white; padding: 4px;">
|
|
298
|
+
<button (click)="debugOptions()">DEBUG: {{ filteredOptions().length }} opciones</button>
|
|
299
|
+
</div>
|
|
300
|
+
|
|
244
301
|
<!-- Search bar -->
|
|
245
302
|
<div class="search-container" *ngIf="props?.options && props.options.length > 5">
|
|
246
303
|
<ion-searchbar
|
|
@@ -275,6 +332,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
275
332
|
<ion-item *ngIf="filteredOptions().length === 0" class="no-results">
|
|
276
333
|
<ion-label color="medium">
|
|
277
334
|
{{ searchTerm() ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
|
|
335
|
+
<!-- Debug info -->
|
|
336
|
+
<br><small>Debug: {{ filteredOptions().length }} opciones | Props: {{ !!props }} | Search: "{{ searchTerm() }}"</small>
|
|
278
337
|
</ion-label>
|
|
279
338
|
</ion-item>
|
|
280
339
|
</ion-list>
|
|
@@ -296,4 +355,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
296
355
|
}], placeholder: [{
|
|
297
356
|
type: Input
|
|
298
357
|
}] } });
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9zZWxlY3Qtc2VhcmNoL3NlbGVjdC1zZWFyY2guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBS0wsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBbUZqRSxNQUFNLE9BQU8scUJBQXFCO0lBMkRoQztRQXREUyxrQkFBYSxHQUFXLE1BQU0sQ0FBQztRQUMvQixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUM3QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUUxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUxQyx3Q0FBd0M7UUFDeEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixlQUFVLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLGtCQUFhLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUU1QyxtQkFBbUI7UUFDbkIs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlFVDt3REFJc0IsV0FBVztzQkFBakMsU0FBUzt1QkFBQyxVQUFVO2dCQUNHLFlBQVk7c0JBQW5DLFNBQVM7dUJBQUMsV0FBVztnQkFFYixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBseURlZmF1bHRWYWx1ZVRvQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9mb3JtLWRlZmF1bHRzJztcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvdGV4dCc7XG5pbXBvcnQgeyBJbnB1dE1ldGFkYXRhLCBJbnB1dE9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXNlbGVjdC1zZWFyY2gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25pY01vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtY29udGFpbmVyXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCRldmVudClcIj5cbiAgICAgIDwhLS0gTWFpbiBpbnB1dCBkaXNwbGF5IC0tPlxuICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAjbWFpbklucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZSgpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BzPy5wbGFjZWhvbGRlciB8fCBwbGFjZWhvbGRlclwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICAgIGNsYXNzPVwibWFpbi1pbnB1dFwiXG4gICAgICAgIFtjbGFzcy5pcy1vcGVuXT1cImlzT3BlbigpXCJcbiAgICAgIC8+XG4gICAgICBcbiAgICAgIDwhLS0gRHJvcGRvd24gaWNvbiAtLT5cbiAgICAgIDxpb24taWNvbiBcbiAgICAgICAgbmFtZT1cImNoZXZyb24tZG93bi1vdXRsaW5lXCIgXG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24taWNvblwiIFxuICAgICAgICBbY2xhc3Mucm90YXRlZF09XCJpc09wZW4oKVwiXG4gICAgICA+PC9pb24taWNvbj5cbiAgICAgIFxuICAgICAgPCEtLSBIaWRkZW4gaW5wdXQgZm9yIGZvcm0gY29udHJvbCAtLT5cbiAgICAgIDxpb24taW5wdXQgXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTtcIiBcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb3BzPy5jb250cm9sXCIgXG4gICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRHJvcGRvd24gb3ZlcmxheSAtLT5cbiAgICA8ZGl2IFxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1vdmVybGF5XCIgXG4gICAgICBbY2xhc3MudmlzaWJsZV09XCJpc09wZW4oKVwiXG4gICAgICAjZHJvcGRvd25cbiAgICA+XG4gICAgICA8IS0tIFNlYXJjaCBiYXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiICpuZ0lmPVwicHJvcHM/Lm9wdGlvbnMgJiYgcHJvcHMub3B0aW9ucy5sZW5ndGggPiA1XCI+XG4gICAgICAgIDxpb24tc2VhcmNoYmFyXG4gICAgICAgICAgI3NlYXJjaGJhclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQnVzY2FyJ1wiXG4gICAgICAgICAgKGlvbklucHV0KT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXJtKClcIlxuICAgICAgICAgIHNob3ctY2xlYXItYnV0dG9uPVwiZm9jdXNcIlxuICAgICAgICAgIFtkZWJvdW5jZV09XCIyMDBcIlxuICAgICAgICA+PC9pb24tc2VhcmNoYmFyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDwhLS0gT3B0aW9ucyBsaXN0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24tbGlzdCBjbGFzcz1cIm9wdGlvbnMtbGlzdFwiPlxuICAgICAgICAgIDxpb24taXRlbSBcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrQnk6IHRyYWNrQnlGblwiIFxuICAgICAgICAgICAgYnV0dG9uIFxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgb3B0aW9uW2xhYmVsUHJvcGVydHldIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8aW9uLWljb24gXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZChvcHRpb24pXCIgXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGVja21hcmstb3V0bGluZVwiIFxuICAgICAgICAgICAgICBzbG90PVwiZW5kXCIgXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgIDxpb24taXRlbSAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICB7eyBzZWFyY2hUZXJtKCkgPyAnTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcycgOiAnTm8gaGF5IG9wY2lvbmVzIGRpc3BvbmlibGVzJyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0U2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJykgZHJvcGRvd25SZWYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtYWluSW5wdXQnKSBtYWluSW5wdXRSZWYhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIHByb3BzITogSW5wdXRNZXRhZGF0YTtcbiAgQElucHV0KCkgbGFiZWxQcm9wZXJ0eTogc3RyaW5nID0gJ25hbWUnO1xuICBASW5wdXQoKSB2YWx1ZVByb3BlcnR5OiBzdHJpbmcgPSAnaWQnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG4gIFxuICAvLyBTaWduYWxzIGZvciByZWFjdGl2ZSBzdGF0ZSBtYW5hZ2VtZW50XG4gIGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHNlYXJjaFRlcm0gPSBzaWduYWwoJycpO1xuICBzZWxlY3RlZFZhbHVlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBcbiAgLy8gQ29tcHV0ZWQgc2lnbmFsc1xuICBkaXNwbGF5VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUoKTtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHZhbHVlKTtcbiAgICByZXR1cm4gb3B0aW9uID8gb3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV0gOiAnJztcbiAgfSk7XG5cbiAgZmlsdGVyZWRPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BzPy5vcHRpb25zIHx8IFtdO1xuICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoVGVybSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgLy8gRGVidWcgbWVqb3JhZG9cbiAgICBjb25zb2xlLmxvZygnW1NlbGVjdFNlYXJjaF0gZmlsdGVyZWRPcHRpb25zIGNvbXB1dGVkOicsIHtcbiAgICAgIG9wdGlvbnNDb3VudDogb3B0aW9ucy5sZW5ndGgsXG4gICAgICBzZWFyY2hUZXJtOiBzZWFyY2gsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLnNsaWNlKDAsIDMpLFxuICAgICAgbGFiZWxQcm9wZXJ0eTogdGhpcy5sYWJlbFByb3BlcnR5LFxuICAgICAgdmFsdWVQcm9wZXJ0eTogdGhpcy52YWx1ZVByb3BlcnR5LFxuICAgICAgZmlyc3RPcHRpb25TdHJ1Y3R1cmU6IG9wdGlvbnNbMF0gPyB7XG4gICAgICAgIFt0aGlzLmxhYmVsUHJvcGVydHldOiBvcHRpb25zWzBdW3RoaXMubGFiZWxQcm9wZXJ0eV0sXG4gICAgICAgIFt0aGlzLnZhbHVlUHJvcGVydHldOiBvcHRpb25zWzBdW3RoaXMudmFsdWVQcm9wZXJ0eV0sXG4gICAgICAgIHR5cGVPZklkOiB0eXBlb2Ygb3B0aW9uc1swXVt0aGlzLnZhbHVlUHJvcGVydHldXG4gICAgICB9IDogbnVsbFxuICAgIH0pO1xuICAgIFxuICAgIGlmICghc2VhcmNoKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IG9wdGlvblt0aGlzLmxhYmVsUHJvcGVydHldXG4gICAgICAgID8gcmVwbGFjZVNwZWNpYWxDaGFycyhTdHJpbmcob3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV0pLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldXG4gICAgICAgID8gcmVwbGFjZVNwZWNpYWxDaGFycyhTdHJpbmcob3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV0pLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBzZWFyY2hUZXJtID0gcmVwbGFjZVNwZWNpYWxDaGFycyhzZWFyY2gpO1xuICAgICAgcmV0dXJuIGxhYmVsLmluY2x1ZGVzKHNlYXJjaFRlcm0pIHx8IHZhbHVlLmluY2x1ZGVzKHNlYXJjaFRlcm0pO1xuICAgIH0pO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgJ3NlbGVjdE9wdGlvbicsICdTZWxlY2Npb25lIHVuYSBvcGNpw7NuJyk7XG4gICAgXG4gICAgLy8gQ2xvc2UgZHJvcGRvd24gd2hlbiBjbGlja2luZyBvdXRzaWRlXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXBwbHlEZWZhdWx0VmFsdWUoKTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZFZhbHVlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddICYmIHRoaXMucHJvcHMpIHtcbiAgICAgIHRoaXMuc3luY1NlbGVjdGVkVmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBDb21wb25lbnQgbWV0aG9kc1xuICB0b2dnbGVEcm9wZG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzT3Blbi51cGRhdGUodmFsdWUgPT4gIXZhbHVlKTtcbiAgICBcbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgLy8gRm9jdXMgc2VhcmNoIGJhciB3aGVuIG9wZW5pbmcgaWYgYXZhaWxhYmxlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoYmFyID0gdGhpcy5kcm9wZG93blJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW9uLXNlYXJjaGJhcicpO1xuICAgICAgICBpZiAoc2VhcmNoYmFyKSB7XG4gICAgICAgICAgc2VhcmNoYmFyLnNldEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoZXZlbnQuZGV0YWlsLnZhbHVlIHx8ICcnKTtcbiAgfVxuXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IElucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcob3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV0pOyAvLyBDb252ZXJ0aXIgYSBzdHJpbmdcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoJycpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAodGhpcy5wcm9wcz8uY29udHJvbCkge1xuICAgICAgdGhpcy5wcm9wcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMucHJvcHMuY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5wcm9wcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBpc1NlbGVjdGVkKG9wdGlvbjogSW5wdXRPcHRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuc2VsZWN0ZWRWYWx1ZSgpKSA9PT0gU3RyaW5nKG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihfaW5kZXg6IG51bWJlciwgb3B0aW9uOiBJbnB1dE9wdGlvbik6IGFueSB7XG4gICAgcmV0dXJuIG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGlja091dHNpZGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkgJiYgXG4gICAgICAgICF0aGlzLm1haW5JbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAhdGhpcy5kcm9wZG93blJlZj8ubmF0aXZlRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogSW5wdXRPcHRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzPy5vcHRpb25zPy5maW5kKG9wdGlvbiA9PiBcbiAgICAgIFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSkgPT09IFN0cmluZyh2YWx1ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURlZmF1bHRWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcykge1xuICAgICAgYXBwbHlEZWZhdWx0VmFsdWVUb0NvbnRyb2wodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VsZWN0ZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcz8uY29udHJvbD8udmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5zZXQoU3RyaW5nKHRoaXMucHJvcHMuY29udHJvbC52YWx1ZSkpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9zZWxlY3Qtc2VhcmNoL3NlbGVjdC1zZWFyY2guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBS0wsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQTBGakUsTUFBTSxPQUFPLHFCQUFxQjtJQW1FaEM7UUE5RFMsa0JBQWEsR0FBVyxNQUFNLENBQUM7UUFDL0Isa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFDN0IsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFMUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUMsd0NBQXdDO1FBQ3hDLFdBQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixrQkFBYSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFNUMsK0JB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b3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBseURlZmF1bHRWYWx1ZVRvQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9mb3JtLWRlZmF1bHRzJztcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvdGV4dCc7XG5pbXBvcnQgeyBJbnB1dE1ldGFkYXRhLCBJbnB1dE9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXNlbGVjdC1zZWFyY2gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25pY01vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtY29udGFpbmVyXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCRldmVudClcIj5cbiAgICAgIDwhLS0gTWFpbiBpbnB1dCBkaXNwbGF5IC0tPlxuICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAjbWFpbklucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZSgpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BzPy5wbGFjZWhvbGRlciB8fCBwbGFjZWhvbGRlclwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICAgIGNsYXNzPVwibWFpbi1pbnB1dFwiXG4gICAgICAgIFtjbGFzcy5pcy1vcGVuXT1cImlzT3BlbigpXCJcbiAgICAgIC8+XG4gICAgICBcbiAgICAgIDwhLS0gRHJvcGRvd24gaWNvbiAtLT5cbiAgICAgIDxpb24taWNvbiBcbiAgICAgICAgbmFtZT1cImNoZXZyb24tZG93bi1vdXRsaW5lXCIgXG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24taWNvblwiIFxuICAgICAgICBbY2xhc3Mucm90YXRlZF09XCJpc09wZW4oKVwiXG4gICAgICA+PC9pb24taWNvbj5cbiAgICAgIFxuICAgICAgPCEtLSBIaWRkZW4gaW5wdXQgZm9yIGZvcm0gY29udHJvbCAtLT5cbiAgICAgIDxpb24taW5wdXQgXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTtcIiBcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb3BzPy5jb250cm9sXCIgXG4gICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRHJvcGRvd24gb3ZlcmxheSAtLT5cbiAgICA8ZGl2IFxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1vdmVybGF5XCIgXG4gICAgICBbY2xhc3MudmlzaWJsZV09XCJpc09wZW4oKVwiXG4gICAgICAjZHJvcGRvd25cbiAgICA+XG4gICAgICA8IS0tIERlYnVnIGJ1dHRvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiByZWQ7IGNvbG9yOiB3aGl0ZTsgcGFkZGluZzogNHB4O1wiPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkZWJ1Z09wdGlvbnMoKVwiPkRFQlVHOiB7eyBmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggfX0gb3BjaW9uZXM8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8IS0tIFNlYXJjaCBiYXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiICpuZ0lmPVwicHJvcHM/Lm9wdGlvbnMgJiYgcHJvcHMub3B0aW9ucy5sZW5ndGggPiA1XCI+XG4gICAgICAgIDxpb24tc2VhcmNoYmFyXG4gICAgICAgICAgI3NlYXJjaGJhclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQnVzY2FyJ1wiXG4gICAgICAgICAgKGlvbklucHV0KT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXJtKClcIlxuICAgICAgICAgIHNob3ctY2xlYXItYnV0dG9uPVwiZm9jdXNcIlxuICAgICAgICAgIFtkZWJvdW5jZV09XCIyMDBcIlxuICAgICAgICA+PC9pb24tc2VhcmNoYmFyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDwhLS0gT3B0aW9ucyBsaXN0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24tbGlzdCBjbGFzcz1cIm9wdGlvbnMtbGlzdFwiPlxuICAgICAgICAgIDxpb24taXRlbSBcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrQnk6IHRyYWNrQnlGblwiIFxuICAgICAgICAgICAgYnV0dG9uIFxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgb3B0aW9uW2xhYmVsUHJvcGVydHldIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8aW9uLWljb24gXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZChvcHRpb24pXCIgXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGVja21hcmstb3V0bGluZVwiIFxuICAgICAgICAgICAgICBzbG90PVwiZW5kXCIgXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgIDxpb24taXRlbSAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICB7eyBzZWFyY2hUZXJtKCkgPyAnTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcycgOiAnTm8gaGF5IG9wY2lvbmVzIGRpc3BvbmlibGVzJyB9fVxuICAgICAgICAgICAgICA8IS0tIERlYnVnIGluZm8gLS0+XG4gICAgICAgICAgICAgIDxicj48c21hbGw+RGVidWc6IHt7IGZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCB9fSBvcGNpb25lcyB8IFByb3BzOiB7eyAhIXByb3BzIH19IHwgU2VhcmNoOiBcInt7IHNlYXJjaFRlcm0oKSB9fVwiPC9zbWFsbD5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LXNlYXJjaC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duUmVmITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbWFpbklucHV0JykgbWFpbklucHV0UmVmITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBwcm9wcyE6IElucHV0TWV0YWRhdGE7XG4gIEBJbnB1dCgpIGxhYmVsUHJvcGVydHk6IHN0cmluZyA9ICduYW1lJztcbiAgQElucHV0KCkgdmFsdWVQcm9wZXJ0eTogc3RyaW5nID0gJ2lkJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgbGFuZ1NlcnZpY2UgPSBpbmplY3QoTGFuZ1NlcnZpY2UpO1xuICBcbiAgLy8gU2lnbmFscyBmb3IgcmVhY3RpdmUgc3RhdGUgbWFuYWdlbWVudFxuICBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBzZWFyY2hUZXJtID0gc2lnbmFsKCcnKTtcbiAgc2VsZWN0ZWRWYWx1ZSA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgXG4gIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgcmVhY3RpdmVcbiAgb3B0aW9uc1NpZ25hbCA9IHNpZ25hbDxJbnB1dE9wdGlvbltdPihbXSk7XG4gIFxuICAvLyBDb21wdXRlZCBzaWduYWxzXG4gIGRpc3BsYXlWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZSgpO1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcbiAgICBcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpO1xuICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bdGhpcy5sYWJlbFByb3BlcnR5XSA6ICcnO1xuICB9KTtcblxuICBmaWx0ZXJlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gVXNlIHNpZ25hbCBpbnN0ZWFkIG9mIHByb3BzIGRpcmVjdGx5XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1NpZ25hbCgpO1xuICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoVGVybSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgLy8gRGVidWcgbWVqb3JhZG9cbiAgICBjb25zb2xlLmxvZygnW1NlbGVjdFNlYXJjaF0gZmlsdGVyZWRPcHRpb25zIGNvbXB1dGVkOicsIHtcbiAgICAgIG9wdGlvbnNDb3VudDogb3B0aW9ucy5sZW5ndGgsXG4gICAgICBzZWFyY2hUZXJtOiBzZWFyY2gsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgbGFiZWxQcm9wZXJ0eTogdGhpcy5sYWJlbFByb3BlcnR5LFxuICAgICAgdmFsdWVQcm9wZXJ0eTogdGhpcy52YWx1ZVByb3BlcnR5LFxuICAgICAgcHJvcHNFeGlzdHM6ICEhdGhpcy5wcm9wcyxcbiAgICAgIHByb3BzT3B0aW9uc0V4aXN0czogISF0aGlzLnByb3BzPy5vcHRpb25zLFxuICAgICAgcHJvcHNPcHRpb25zTGVuZ3RoOiB0aGlzLnByb3BzPy5vcHRpb25zPy5sZW5ndGggfHwgMCxcbiAgICAgIGZpcnN0T3B0aW9uU3RydWN0dXJlOiBvcHRpb25zWzBdID8ge1xuICAgICAgICBbdGhpcy5sYWJlbFByb3BlcnR5XTogb3B0aW9uc1swXVt0aGlzLmxhYmVsUHJvcGVydHldLFxuICAgICAgICBbdGhpcy52YWx1ZVByb3BlcnR5XTogb3B0aW9uc1swXVt0aGlzLnZhbHVlUHJvcGVydHldLFxuICAgICAgICB0eXBlT2ZJZDogdHlwZW9mIG9wdGlvbnNbMF1bdGhpcy52YWx1ZVByb3BlcnR5XSxcbiAgICAgICAgZnVsbE9wdGlvbjogb3B0aW9uc1swXVxuICAgICAgfSA6ICdOT19PUFRJT05TJ1xuICAgIH0pO1xuICAgIFxuICAgIGlmICghc2VhcmNoKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IG9wdGlvblt0aGlzLmxhYmVsUHJvcGVydHldXG4gICAgICAgID8gcmVwbGFjZVNwZWNpYWxDaGFycyhTdHJpbmcob3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV0pLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldXG4gICAgICAgID8gcmVwbGFjZVNwZWNpYWxDaGFycyhTdHJpbmcob3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV0pLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBzZWFyY2hUZXJtID0gcmVwbGFjZVNwZWNpYWxDaGFycyhzZWFyY2gpO1xuICAgICAgcmV0dXJuIGxhYmVsLmluY2x1ZGVzKHNlYXJjaFRlcm0pIHx8IHZhbHVlLmluY2x1ZGVzKHNlYXJjaFRlcm0pO1xuICAgIH0pO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgJ3NlbGVjdE9wdGlvbicsICdTZWxlY2Npb25lIHVuYSBvcGNpw7NuJyk7XG4gICAgXG4gICAgLy8gQ2xvc2UgZHJvcGRvd24gd2hlbiBjbGlja2luZyBvdXRzaWRlXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpKTtcbiAgICBcbiAgICAvLyBEZWJ1ZyBlZmZlY3QgdG8gdHJhY2sgd2hlbiBmaWx0ZXJlZE9wdGlvbnMgY2hhbmdlc1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbU2VsZWN0U2VhcmNoXSBFRkZFQ1QgLSBmaWx0ZXJlZE9wdGlvbnMgY2hhbmdlZDonLCB7XG4gICAgICAgIG9wdGlvbnNDb3VudDogb3B0aW9ucy5sZW5ndGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZygnW1NlbGVjdFNlYXJjaF0gbmdPbkluaXQ6Jywge1xuICAgICAgcHJvcHM6ICEhdGhpcy5wcm9wcyxcbiAgICAgIG9wdGlvbnM6IHRoaXMucHJvcHM/Lm9wdGlvbnM/Lmxlbmd0aCB8fCAwLFxuICAgICAgY29udHJvbDogISF0aGlzLnByb3BzPy5jb250cm9sXG4gICAgfSk7XG4gICAgXG4gICAgLy8gVXBkYXRlIG9wdGlvbnMgc2lnbmFsXG4gICAgaWYgKHRoaXMucHJvcHM/Lm9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9uc1NpZ25hbC5zZXQodGhpcy5wcm9wcy5vcHRpb25zKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5hcHBseURlZmF1bHRWYWx1ZSgpO1xuICAgIHRoaXMuc3luY1NlbGVjdGVkVmFsdWUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc29sZS5sb2coJ1tTZWxlY3RTZWFyY2hdIG5nT25DaGFuZ2VzOicsIHtcbiAgICAgIGhhc1Byb3BzQ2hhbmdlOiAhIWNoYW5nZXNbJ3Byb3BzJ10sXG4gICAgICBwcm9wczogISF0aGlzLnByb3BzLFxuICAgICAgb3B0aW9uczogdGhpcy5wcm9wcz8ub3B0aW9ucz8ubGVuZ3RoIHx8IDAsXG4gICAgICBwcm9wc09wdGlvbnM6IHRoaXMucHJvcHM/Lm9wdGlvbnNcbiAgICB9KTtcbiAgICBcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXSAmJiB0aGlzLnByb3BzKSB7XG4gICAgICAvLyBVcGRhdGUgb3B0aW9ucyBzaWduYWwgd2hlbiBwcm9wcyBjaGFuZ2VcbiAgICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tTZWxlY3RTZWFyY2hdIFVwZGF0aW5nIG9wdGlvbnNTaWduYWwgd2l0aDonLCB0aGlzLnByb3BzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnNTaWduYWwuc2V0KHRoaXMucHJvcHMub3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN5bmNTZWxlY3RlZFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcG9uZW50IG1ldGhvZHNcbiAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc09wZW4udXBkYXRlKHZhbHVlID0+ICF2YWx1ZSk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIC8vIEZvY3VzIHNlYXJjaCBiYXIgd2hlbiBvcGVuaW5nIGlmIGF2YWlsYWJsZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaGJhciA9IHRoaXMuZHJvcGRvd25SZWY/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lvbi1zZWFyY2hiYXInKTtcbiAgICAgICAgaWYgKHNlYXJjaGJhcikge1xuICAgICAgICAgIHNlYXJjaGJhci5zZXRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0uc2V0KGV2ZW50LmRldGFpbC52YWx1ZSB8fCAnJyk7XG4gIH1cblxuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBJbnB1dE9wdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldKTsgLy8gQ29udmVydGlyIGEgc3RyaW5nXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNlYXJjaFRlcm0uc2V0KCcnKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgZm9ybSBjb250cm9sXG4gICAgaWYgKHRoaXMucHJvcHM/LmNvbnRyb2wpIHtcbiAgICAgIHRoaXMucHJvcHMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnByb3BzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIHRoaXMucHJvcHMuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChvcHRpb246IElucHV0T3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnNlbGVjdGVkVmFsdWUoKSkgPT09IFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSk7XG4gIH1cblxuICB0cmFja0J5Rm4oX2luZGV4OiBudW1iZXIsIG9wdGlvbjogSW5wdXRPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzT3BlbigpICYmIFxuICAgICAgICAhdGhpcy5tYWluSW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgIXRoaXMuZHJvcGRvd25SZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnNlYXJjaFRlcm0uc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9wdGlvbkJ5VmFsdWUodmFsdWU6IHN0cmluZyk6IElucHV0T3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zU2lnbmFsKCkuZmluZChvcHRpb24gPT4gXG4gICAgICBTdHJpbmcob3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV0pID09PSBTdHJpbmcodmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlEZWZhdWx0VmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgIGFwcGx5RGVmYXVsdFZhbHVlVG9Db250cm9sKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGRlYnVnT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1NlbGVjdFNlYXJjaF0gREVCVUcgQ0xJQ0s6Jywge1xuICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICBmaWx0ZXJlZE9wdGlvbnM6IHRoaXMuZmlsdGVyZWRPcHRpb25zKCksXG4gICAgICBzZWFyY2hUZXJtOiB0aGlzLnNlYXJjaFRlcm0oKSxcbiAgICAgIHByb3BzT3B0aW9uczogdGhpcy5wcm9wcz8ub3B0aW9ucyxcbiAgICAgIGNvbXB1dGVkOiB0aGlzLmZpbHRlcmVkT3B0aW9ucygpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWxlY3RlZFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzPy5jb250cm9sPy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLnNldChTdHJpbmcodGhpcy5wcm9wcy5jb250cm9sLnZhbHVlKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Component, Input, Output, Injectable, inject, InjectionToken, Inject, ChangeDetectorRef, HostListener, Pipe, ChangeDetectionStrategy, ViewChild, signal, computed, forwardRef } from '@angular/core';
|
|
2
|
+
import { EventEmitter, Component, Input, Output, Injectable, inject, InjectionToken, Inject, ChangeDetectorRef, HostListener, Pipe, ChangeDetectionStrategy, ViewChild, signal, computed, forwardRef, effect } from '@angular/core';
|
|
3
3
|
import { IonAvatar, IonCard, IonIcon, IonButton, IonSpinner, IonText, IonModal, IonHeader, IonToolbar, IonContent, IonButtons, IonTitle, IonProgressBar, IonCardContent, IonCardHeader, IonCardTitle, IonCardSubtitle, IonCheckbox, IonTextarea, IonDatetime, IonDatetimeButton, IonInput, IonSelect, IonSelectOption, IonLabel, IonSearchbar, IonRadioGroup, IonRadio, IonMenuButton, IonFooter, IonList, IonListHeader, IonNote, IonItem } from '@ionic/angular/standalone';
|
|
4
4
|
import * as i1 from '@angular/common';
|
|
5
5
|
import { CommonModule, NgStyle, Location, AsyncPipe, NgFor, NgClass } from '@angular/common';
|
|
@@ -6769,6 +6769,8 @@ class SelectSearchComponent {
|
|
|
6769
6769
|
this.isOpen = signal(false);
|
|
6770
6770
|
this.searchTerm = signal('');
|
|
6771
6771
|
this.selectedValue = signal(null);
|
|
6772
|
+
// Force options to be reactive
|
|
6773
|
+
this.optionsSignal = signal([]);
|
|
6772
6774
|
// Computed signals
|
|
6773
6775
|
this.displayValue = computed(() => {
|
|
6774
6776
|
const value = this.selectedValue();
|
|
@@ -6778,20 +6780,25 @@ class SelectSearchComponent {
|
|
|
6778
6780
|
return option ? option[this.labelProperty] : '';
|
|
6779
6781
|
});
|
|
6780
6782
|
this.filteredOptions = computed(() => {
|
|
6781
|
-
|
|
6783
|
+
// Use signal instead of props directly
|
|
6784
|
+
const options = this.optionsSignal();
|
|
6782
6785
|
const search = this.searchTerm().toLowerCase();
|
|
6783
6786
|
// Debug mejorado
|
|
6784
6787
|
console.log('[SelectSearch] filteredOptions computed:', {
|
|
6785
6788
|
optionsCount: options.length,
|
|
6786
6789
|
searchTerm: search,
|
|
6787
|
-
options: options
|
|
6790
|
+
options: options,
|
|
6788
6791
|
labelProperty: this.labelProperty,
|
|
6789
6792
|
valueProperty: this.valueProperty,
|
|
6793
|
+
propsExists: !!this.props,
|
|
6794
|
+
propsOptionsExists: !!this.props?.options,
|
|
6795
|
+
propsOptionsLength: this.props?.options?.length || 0,
|
|
6790
6796
|
firstOptionStructure: options[0] ? {
|
|
6791
6797
|
[this.labelProperty]: options[0][this.labelProperty],
|
|
6792
6798
|
[this.valueProperty]: options[0][this.valueProperty],
|
|
6793
|
-
typeOfId: typeof options[0][this.valueProperty]
|
|
6794
|
-
|
|
6799
|
+
typeOfId: typeof options[0][this.valueProperty],
|
|
6800
|
+
fullOption: options[0]
|
|
6801
|
+
} : 'NO_OPTIONS'
|
|
6795
6802
|
});
|
|
6796
6803
|
if (!search) {
|
|
6797
6804
|
return options;
|
|
@@ -6810,8 +6817,26 @@ class SelectSearchComponent {
|
|
|
6810
6817
|
this.placeholder = this.langService.getText('_global', 'selectOption', 'Seleccione una opción');
|
|
6811
6818
|
// Close dropdown when clicking outside
|
|
6812
6819
|
document.addEventListener('click', this.handleClickOutside.bind(this));
|
|
6820
|
+
// Debug effect to track when filteredOptions changes
|
|
6821
|
+
effect(() => {
|
|
6822
|
+
const options = this.filteredOptions();
|
|
6823
|
+
console.log('[SelectSearch] EFFECT - filteredOptions changed:', {
|
|
6824
|
+
optionsCount: options.length,
|
|
6825
|
+
options: options,
|
|
6826
|
+
timestamp: new Date().toLocaleTimeString()
|
|
6827
|
+
});
|
|
6828
|
+
});
|
|
6813
6829
|
}
|
|
6814
6830
|
ngOnInit() {
|
|
6831
|
+
console.log('[SelectSearch] ngOnInit:', {
|
|
6832
|
+
props: !!this.props,
|
|
6833
|
+
options: this.props?.options?.length || 0,
|
|
6834
|
+
control: !!this.props?.control
|
|
6835
|
+
});
|
|
6836
|
+
// Update options signal
|
|
6837
|
+
if (this.props?.options) {
|
|
6838
|
+
this.optionsSignal.set(this.props.options);
|
|
6839
|
+
}
|
|
6815
6840
|
this.applyDefaultValue();
|
|
6816
6841
|
this.syncSelectedValue();
|
|
6817
6842
|
}
|
|
@@ -6819,7 +6844,18 @@ class SelectSearchComponent {
|
|
|
6819
6844
|
document.removeEventListener('click', this.handleClickOutside.bind(this));
|
|
6820
6845
|
}
|
|
6821
6846
|
ngOnChanges(changes) {
|
|
6847
|
+
console.log('[SelectSearch] ngOnChanges:', {
|
|
6848
|
+
hasPropsChange: !!changes['props'],
|
|
6849
|
+
props: !!this.props,
|
|
6850
|
+
options: this.props?.options?.length || 0,
|
|
6851
|
+
propsOptions: this.props?.options
|
|
6852
|
+
});
|
|
6822
6853
|
if (changes['props'] && this.props) {
|
|
6854
|
+
// Update options signal when props change
|
|
6855
|
+
if (this.props.options) {
|
|
6856
|
+
console.log('[SelectSearch] Updating optionsSignal with:', this.props.options);
|
|
6857
|
+
this.optionsSignal.set(this.props.options);
|
|
6858
|
+
}
|
|
6823
6859
|
this.syncSelectedValue();
|
|
6824
6860
|
}
|
|
6825
6861
|
}
|
|
@@ -6867,13 +6903,22 @@ class SelectSearchComponent {
|
|
|
6867
6903
|
}
|
|
6868
6904
|
}
|
|
6869
6905
|
getOptionByValue(value) {
|
|
6870
|
-
return this.
|
|
6906
|
+
return this.optionsSignal().find(option => String(option[this.valueProperty]) === String(value));
|
|
6871
6907
|
}
|
|
6872
6908
|
applyDefaultValue() {
|
|
6873
6909
|
if (this.props) {
|
|
6874
6910
|
applyDefaultValueToControl(this.props);
|
|
6875
6911
|
}
|
|
6876
6912
|
}
|
|
6913
|
+
debugOptions() {
|
|
6914
|
+
console.log('[SelectSearch] DEBUG CLICK:', {
|
|
6915
|
+
props: this.props,
|
|
6916
|
+
filteredOptions: this.filteredOptions(),
|
|
6917
|
+
searchTerm: this.searchTerm(),
|
|
6918
|
+
propsOptions: this.props?.options,
|
|
6919
|
+
computed: this.filteredOptions()
|
|
6920
|
+
});
|
|
6921
|
+
}
|
|
6877
6922
|
syncSelectedValue() {
|
|
6878
6923
|
if (this.props?.control?.value) {
|
|
6879
6924
|
this.selectedValue.set(String(this.props.control.value));
|
|
@@ -6914,6 +6959,11 @@ class SelectSearchComponent {
|
|
|
6914
6959
|
[class.visible]="isOpen()"
|
|
6915
6960
|
#dropdown
|
|
6916
6961
|
>
|
|
6962
|
+
<!-- Debug button -->
|
|
6963
|
+
<div class="search-container" style="background: red; color: white; padding: 4px;">
|
|
6964
|
+
<button (click)="debugOptions()">DEBUG: {{ filteredOptions().length }} opciones</button>
|
|
6965
|
+
</div>
|
|
6966
|
+
|
|
6917
6967
|
<!-- Search bar -->
|
|
6918
6968
|
<div class="search-container" *ngIf="props?.options && props.options.length > 5">
|
|
6919
6969
|
<ion-searchbar
|
|
@@ -6948,6 +6998,8 @@ class SelectSearchComponent {
|
|
|
6948
6998
|
<ion-item *ngIf="filteredOptions().length === 0" class="no-results">
|
|
6949
6999
|
<ion-label color="medium">
|
|
6950
7000
|
{{ searchTerm() ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
|
|
7001
|
+
<!-- Debug info -->
|
|
7002
|
+
<br><small>Debug: {{ filteredOptions().length }} opciones | Props: {{ !!props }} | Search: "{{ searchTerm() }}"</small>
|
|
6951
7003
|
</ion-label>
|
|
6952
7004
|
</ion-item>
|
|
6953
7005
|
</ion-list>
|
|
@@ -6991,6 +7043,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
6991
7043
|
[class.visible]="isOpen()"
|
|
6992
7044
|
#dropdown
|
|
6993
7045
|
>
|
|
7046
|
+
<!-- Debug button -->
|
|
7047
|
+
<div class="search-container" style="background: red; color: white; padding: 4px;">
|
|
7048
|
+
<button (click)="debugOptions()">DEBUG: {{ filteredOptions().length }} opciones</button>
|
|
7049
|
+
</div>
|
|
7050
|
+
|
|
6994
7051
|
<!-- Search bar -->
|
|
6995
7052
|
<div class="search-container" *ngIf="props?.options && props.options.length > 5">
|
|
6996
7053
|
<ion-searchbar
|
|
@@ -7025,6 +7082,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
7025
7082
|
<ion-item *ngIf="filteredOptions().length === 0" class="no-results">
|
|
7026
7083
|
<ion-label color="medium">
|
|
7027
7084
|
{{ searchTerm() ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
|
|
7085
|
+
<!-- Debug info -->
|
|
7086
|
+
<br><small>Debug: {{ filteredOptions().length }} opciones | Props: {{ !!props }} | Search: "{{ searchTerm() }}"</small>
|
|
7028
7087
|
</ion-label>
|
|
7029
7088
|
</ion-item>
|
|
7030
7089
|
</ion-list>
|