|
1 | 1 | <template>
|
2 | 2 | <BaseErrorBoundary :theme="theme">
|
3 | 3 | <LoaderContent
|
4 |
| - :loading="submitting" |
| 4 | + :loading="submitting || loading" |
5 | 5 | :content="!!stages?.length"
|
6 | 6 | :theme="theme"
|
7 | 7 | class="flx --flxColumn --flx-start-stretch --gap-30 --maxWidth-full"
|
8 |
| - :class="$attrs.class" |
9 | 8 | :unwrap="unwrap"
|
10 | 9 | >
|
11 |
| - <div class="scroll --vertical modal-content" :class="unwrap ? $attrs.class : ''"> |
| 10 | + <div |
| 11 | + v-if="(formInputsKeys?.length || $slots.default) && !loading" |
| 12 | + class="modal-content" |
| 13 | + :class="unwrap ? 'scroll --vertical' : ''" |
| 14 | + > |
12 | 15 | <form
|
13 | 16 | method="post"
|
14 | 17 | class="flx --flxColumn --flx-start-stretch"
|
15 | 18 | :class="stagesClasses ?? '--gap-30'"
|
16 | 19 | >
|
17 |
| - <FormSimple |
18 |
| - v-for="key in formInputsKeys[activeStage]" |
19 |
| - :key="[key, activeStage].join('-')" |
20 |
| - :model-value="formInputs[key].inputs" |
21 |
| - :theme="theme" |
22 |
| - :invalid="invalid" |
23 |
| - no-form |
24 |
| - :title="formInputs[key].title" |
25 |
| - :readonly="formInputs[key].readonly" |
26 |
| - :empty-message="formInputs[key].emptyMessage" |
27 |
| - @update:model-value="updateForm(key, $event)" |
28 |
| - @update:invalid="invalid = $event" |
29 |
| - /> |
30 |
| - <div |
31 |
| - v-if="!hideRequiredDisclaimer || $slots.disclaimers" |
32 |
| - class="flx --flxColumn" |
33 |
| - > |
34 |
| - <slot name="disclaimers"> |
| 20 | + <slot></slot> |
| 21 | + <template v-if="formInputsKeys?.length"> |
| 22 | + <div |
| 23 | + class="flx --flxColumn --flx-start-stretch" |
| 24 | + :class="[stagesClasses ?? '--gap-30', $attrs.class]" |
| 25 | + > |
| 26 | + <FormSimple |
| 27 | + v-for="key in formInputsKeys[activeStage]" |
| 28 | + :key="[key, activeStage].join('-')" |
| 29 | + :model-value="formInputs[key].inputs" |
| 30 | + :theme="theme" |
| 31 | + :invalid="invalid" |
| 32 | + no-form |
| 33 | + :title="formInputs[key].title" |
| 34 | + :readonly="formInputs[key].readonly" |
| 35 | + :empty-message="formInputs[key].emptyMessage" |
| 36 | + @update:model-value="updateForm(key, $event)" |
| 37 | + @update:invalid="invalid = $event" |
| 38 | + /> |
| 39 | + </div> |
| 40 | + <slot |
| 41 | + v-if="!hideRequiredDisclaimer || $slots.disclaimers" |
| 42 | + name="disclaimers" |
| 43 | + > |
35 | 44 | <p class="--txtSize-xs">
|
36 | 45 | {{ t("required_verification") }}
|
37 | 46 | </p>
|
38 | 47 | </slot>
|
39 |
| - </div> |
| 48 | + </template> |
40 | 49 | </form>
|
41 | 50 | </div>
|
42 | 51 | <slot name="actions">
|
|
193 | 202 | const invalid = ref<iInvalidInput[]>([]);
|
194 | 203 | const formInputsKeys = ref<string[][]>([]);
|
195 | 204 | const formInputs = ref<Record<string, iForm>>({});
|
| 205 | + const loading = ref(true); |
196 | 206 | /**
|
197 | 207 | * Wheter external changes are comming to stages
|
198 | 208 | */
|
|
235 | 245 | return inputs.reduce((acc, input) => ({ ...acc, [input.name]: input.values }), {});
|
236 | 246 | }
|
237 | 247 | function resetStages(newStages: iForm[][]) {
|
| 248 | + loading.value = true; |
| 249 | +
|
238 | 250 | // reset
|
239 | 251 | const newLocalStages: string[][] = [];
|
240 | 252 | const newLocalFormInputs: Record<string, iForm> = {};
|
|
269 | 281 |
|
270 | 282 | formInputsKeys.value = newLocalStages;
|
271 | 283 | formInputs.value = newLocalFormInputs;
|
| 284 | + loading.value = false; |
272 | 285 | }
|
273 | 286 |
|
274 | 287 | function fullReset() {
|
275 | 288 | const wasListened = lastListened.value;
|
276 | 289 |
|
| 290 | + loading.value = true; |
277 | 291 | lastListened.value = undefined;
|
278 | 292 |
|
279 | 293 | if (wasListened) emit("input-values", {}, true);
|
|
0 commit comments