Skip to content

Commit 5a8fbec

Browse files
committed
fix: array type inputs not always emitting
1 parent d263f5c commit 5a8fbec

File tree

3 files changed

+30
-19
lines changed

3 files changed

+30
-19
lines changed

packages/components-vue/src/components/form/Input.vue

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,7 @@
109109
:invalid="invalid"
110110
:model-value="[model]"
111111
:disabled="readonly"
112-
@update:model-value="
113-
models[i].value = models[i].value.toSpliced(index, 1, $event[0])
114-
"
112+
@update:model-value="updateArrModel(i, index, $event[0])"
115113
/>
116114
</div>
117115
<FormInputNValues
@@ -120,24 +118,26 @@
120118
:values="[2]"
121119
>
122120
<InputText
123-
v-model="models[i].value[0]"
121+
:model-value="models[i].value[0]"
124122
v-bind="inputProps"
125123
:invalid="isInvalidByValidation"
126124
:theme="theme"
127125
:disabled="readonly"
128126
:placeholder="getInputPlaceholder()"
129127
type="password"
130128
class="--width-180:md --flx"
129+
@update:model-value="updateArrModel(i, 0, $event)"
131130
/>
132131
<InputText
133-
v-model="models[i].value[1]"
132+
:model-value="models[i].value[1]"
134133
v-bind="inputProps"
135134
:invalid="isInvalidByValidation"
136135
:theme="theme"
137136
:disabled="readonly"
138137
:placeholder="getInputPlaceholder(1)"
139138
type="password"
140139
class="--width-180:md --flx"
140+
@update:model-value="updateArrModel(i, 1, $event)"
141141
/>
142142
</FormInputNValues>
143143
<FormInputNValues
@@ -168,21 +168,23 @@
168168
:values="[2]"
169169
>
170170
<SelectSimple
171-
v-model="models[i].value[0]"
171+
:model-value="models[i].value[0]"
172172
:theme="theme"
173173
:disabled="readonly"
174174
:options="indicativesArr"
175175
class="--width-180:md --flx"
176+
@update:model-value="updateArrModel(i, 0, $event)"
176177
/>
177178
<InputText
178-
v-model="models[i].value[1]"
179+
:model-value="models[i].value[1]"
179180
v-bind="inputProps"
180181
:invalid="isInvalidByValidation"
181182
:theme="theme"
182183
:disabled="readonly"
183184
:placeholder="getInputPlaceholder()"
184185
type="tel"
185186
class="--width-180:md --flx"
187+
@update:model-value="updateArrModel(i, 1, $event)"
186188
/>
187189
</FormInputNValues>
188190
<FormInputCountriesAPI
@@ -191,11 +193,10 @@
191193
:states="states"
192194
:theme="theme"
193195
:model="models[i].value"
194-
:values="[1, 3]"
195196
>
196197
<SelectFilter
197198
v-if="!defaultCountry || models[i].value.length === 1"
198-
v-model="models[i].value[0]"
199+
:model-value="models[i].value[0]"
199200
:options="countriesArr"
200201
name="country"
201202
:value="defaultCountry"
@@ -204,30 +205,33 @@
204205
:disabled="readonly"
205206
:placeholder="getInputPlaceholder()"
206207
class="--width-180:md --flx"
208+
@update:model-value="updateArrModel(i, 0, $event)"
207209
/>
208210
<div
209211
v-if="models[i].value.length === 3"
210212
class="flx --flxColumn --flxRow-wrap:md --flx-start-stretch --gap-5 --flx"
211213
>
212214
<SelectFilter
213-
v-model="models[i].value[1]"
215+
:model-value="models[i].value[1]"
214216
:options="statesArr || statesReq?.content?.map(stateToOption)"
215217
name="state"
216218
icon="mountain-sun"
217219
:theme="theme"
218220
:disabled="readonly || !(models[i].value[0] || defaultCountry)"
219221
:placeholder="getInputPlaceholder(1)"
220222
class="--width-180:md --flx"
223+
@update:model-value="updateArrModel(i, 1, $event)"
221224
/>
222225
<SelectFilter
223-
v-model="models[i].value[2]"
226+
:model-value="models[i].value[2]"
224227
:options="citiesReq.content.map(cityToOption)"
225228
name="city"
226229
icon="city"
227230
:theme="theme"
228231
:disabled="readonly || !models[i].value[1]"
229232
:placeholder="getInputPlaceholder(2)"
230233
class="--width-180:md --flx"
234+
@update:model-value="updateArrModel(i, 2, $event)"
231235
/>
232236
</div>
233237
</FormInputCountriesAPI>
@@ -432,6 +436,12 @@
432436
);
433437
});
434438
439+
function updateArrModel(modelIndex: number, valuePosition: number, newValue: any) {
440+
const model: any[] = models.value[modelIndex].value;
441+
442+
models.value[modelIndex].value = model.toSpliced(valuePosition, 1, newValue);
443+
}
444+
435445
function choose(value: string | number) {
436446
if (props.input.multiple) {
437447
if (props.modelValue.includes(value)) {

packages/components-vue/src/components/form/Stages.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
:aria-label="t('clear')"
122122
:theme="theme"
123123
:disabled="!canSubmit"
124-
@click="fullReset"
124+
@click="resetStages"
125125
>
126126
<IconFa name="broom" :size="20" />
127127
</ActionLink>
@@ -232,7 +232,7 @@
232232
emit("submited", successOrInvalid);
233233
234234
if (successOrInvalid) {
235-
resetStages(props.stages); // reset form
235+
resetStages(); // reset form
236236
props.successFn?.();
237237
}
238238
}
@@ -244,7 +244,7 @@
244244
function getValues(inputs: FormInputClass[]): Record<string, unknown[]> {
245245
return inputs.reduce((acc, input) => ({ ...acc, [input.name]: input.values }), {});
246246
}
247-
function resetStages(newStages: iForm[][]) {
247+
function setStages(newStages: iForm[][]) {
248248
loading.value = true;
249249
250250
// reset
@@ -284,15 +284,15 @@
284284
loading.value = false;
285285
}
286286
287-
function fullReset() {
287+
function resetStages() {
288288
const wasListened = lastListened.value;
289289
290290
loading.value = true;
291291
lastListened.value = undefined;
292292
293293
if (wasListened) emit("input-values", {}, true);
294294
295-
resetStages(props.stages);
295+
setStages(props.stages);
296296
canSubmit.value = !!props.optional;
297297
activeStage.value = 0;
298298
}
@@ -317,9 +317,9 @@
317317
318318
watch(
319319
() => props.stages,
320-
(newStages) => resetStages(newStages),
320+
(newStages) => setStages(newStages),
321321
{ immediate: true }
322322
);
323323
324-
onBeforeUnmount(fullReset);
324+
onBeforeUnmount(resetStages);
325325
</script>

packages/components-vue/src/components/select/Filter.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@
3535
<InputText
3636
v-model="aliasModel"
3737
:list="selectFilterName"
38+
autocomplete="off"
3839
v-bind="{
39-
..._.omit(props, 'modelValue'),
40+
..._.omit(props, ['modelValue', 'autocomplete']),
4041
type: 'text',
4142
placeholder: t('select_filter_options'),
4243
disabled: (!!modelValue && !isInvalid) || disabled,

0 commit comments

Comments
 (0)