grav-svelte 0.0.74 → 0.0.75
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.
|
@@ -2,17 +2,49 @@
|
|
|
2
2
|
import { onMount } from 'svelte';
|
|
3
3
|
import InputFormSelect from './InputFormSelect.svelte';
|
|
4
4
|
|
|
5
|
-
export let levels = []; // [{ label, fetchFn, default, field }]
|
|
5
|
+
export let levels = []; // [{ label, fetchFn, default, field, showPlusIcon?, onPlusClick? }]
|
|
6
6
|
// Cargar datos iniciales para el primer nivel
|
|
7
7
|
let varS = false;
|
|
8
8
|
let fetchFnCloned = [];
|
|
9
9
|
export let selectedValues = {};
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
onMount(async () => {
|
|
11
12
|
varS = false;
|
|
13
|
+
|
|
14
|
+
// Clonar las funciones fetch
|
|
12
15
|
levels.forEach((item) => {
|
|
13
16
|
fetchFnCloned.push({ fetchFn: item.fetchFn });
|
|
14
|
-
selectedValues[item.field] = item.default?.value;
|
|
15
17
|
});
|
|
18
|
+
|
|
19
|
+
// Si hay valores iniciales, cargar y establecer los objetos Select completos
|
|
20
|
+
for (let i = 0; i < levels.length; i++) {
|
|
21
|
+
const level = levels[i];
|
|
22
|
+
const initialValue = selectedValues[level.field];
|
|
23
|
+
|
|
24
|
+
if (initialValue) {
|
|
25
|
+
// Cargar las opciones para este nivel
|
|
26
|
+
let options = [];
|
|
27
|
+
if (i === 0) {
|
|
28
|
+
options = await fetchFnCloned[i].fetchFn();
|
|
29
|
+
} else {
|
|
30
|
+
// Para niveles subsecuentes, necesitamos el valor del nivel anterior
|
|
31
|
+
const parentValue = selectedValues[levels[i - 1].field];
|
|
32
|
+
if (parentValue) {
|
|
33
|
+
options = await fetchFnCloned[i].fetchFn(parentValue);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Buscar el objeto Select que coincida con el valor inicial
|
|
38
|
+
const selectedOption = options.find(opt => opt.value == initialValue);
|
|
39
|
+
if (selectedOption) {
|
|
40
|
+
levels[i].default = selectedOption;
|
|
41
|
+
cacheResults[i] = options; // Cachear los resultados
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
selectedValues[level.field] = level.default?.value;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
16
48
|
varS = true;
|
|
17
49
|
});
|
|
18
50
|
|
|
@@ -44,6 +76,8 @@
|
|
|
44
76
|
{res}
|
|
45
77
|
changeFunction={(e) => handleChange(0, e.detail, level.field)}
|
|
46
78
|
onClear={() => handleChange(0, null, level.field)}
|
|
79
|
+
showPlusIcon={level.showPlusIcon ?? false}
|
|
80
|
+
onPlusClick={level.onPlusClick ?? (() => {})}
|
|
47
81
|
/>
|
|
48
82
|
{/await}
|
|
49
83
|
{/if}
|
|
@@ -62,6 +96,8 @@
|
|
|
62
96
|
{res}
|
|
63
97
|
changeFunction={(e) => handleChange(i, e.detail, level.field)}
|
|
64
98
|
onClear={() => handleChange(i, null, level.field)}
|
|
99
|
+
showPlusIcon={level.showPlusIcon ?? false}
|
|
100
|
+
onPlusClick={level.onPlusClick ?? (() => {})}
|
|
65
101
|
/>
|
|
66
102
|
{/await}
|
|
67
103
|
{:else}
|