From 92e736213b221d5ec8cfb8881fda4fc65ce7dfa0 Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Mon, 25 Mar 2024 15:36:36 +0100 Subject: [PATCH] fix(forms)!: normalize input emits (#1560) --- src/runtime/components/forms/Checkbox.vue | 2 +- src/runtime/components/forms/Input.vue | 3 ++- src/runtime/components/forms/InputMenu.vue | 13 +++++++------ src/runtime/components/forms/Radio.vue | 10 +++++++--- src/runtime/components/forms/Range.vue | 2 +- src/runtime/components/forms/Select.vue | 2 +- src/runtime/components/forms/SelectMenu.vue | 5 +++-- src/runtime/components/forms/Textarea.vue | 3 ++- src/runtime/components/forms/Toggle.vue | 2 ++ 9 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/runtime/components/forms/Checkbox.vue b/src/runtime/components/forms/Checkbox.vue index 7dc78d9935..98c44ccec6 100644 --- a/src/runtime/components/forms/Checkbox.vue +++ b/src/runtime/components/forms/Checkbox.vue @@ -119,7 +119,7 @@ export default defineComponent({ }) const onChange = (event: Event) => { - emit('change', event) + emit('change', (event.target as HTMLInputElement).value) emitFormChange() } diff --git a/src/runtime/components/forms/Input.vue b/src/runtime/components/forms/Input.vue index 50c0c3299b..150a8e0d7f 100644 --- a/src/runtime/components/forms/Input.vue +++ b/src/runtime/components/forms/Input.vue @@ -163,7 +163,7 @@ export default defineComponent({ default: () => ({}) } }, - emits: ['update:modelValue', 'blur'], + emits: ['update:modelValue', 'blur', 'change'], setup (props, { emit, slots }) { const { ui, attrs } = useUI('input', toRef(props, 'ui'), config, toRef(props, 'class')) @@ -206,6 +206,7 @@ export default defineComponent({ const onChange = (event: Event) => { const value = (event.target as HTMLInputElement).value + emit('change', value) if (modelModifiers.value.lazy) { updateInput(value) diff --git a/src/runtime/components/forms/InputMenu.vue b/src/runtime/components/forms/InputMenu.vue index e617958e38..67e5bc8b29 100644 --- a/src/runtime/components/forms/InputMenu.vue +++ b/src/runtime/components/forms/InputMenu.vue @@ -21,7 +21,7 @@ autocomplete="off" v-bind="attrs" :display-value="() => query ? query : label" - @change="onChange" + @change="onQueryChange" /> @@ -418,14 +418,15 @@ export default defineComponent({ } }) - function onUpdate (event: any) { + function onUpdate (value: any) { query.value = '' - emit('update:modelValue', event) - emit('change', event) + emit('update:modelValue', value) + emit('change', value) + emitFormChange() } - function onChange (event: any) { + function onQueryChange (event: any) { query.value = event.target.value } @@ -459,7 +460,7 @@ export default defineComponent({ // eslint-disable-next-line vue/no-dupe-keys query, onUpdate, - onChange + onQueryChange } } }) diff --git a/src/runtime/components/forms/Radio.vue b/src/runtime/components/forms/Radio.vue index 3dce38a161..b1bc9e1764 100644 --- a/src/runtime/components/forms/Radio.vue +++ b/src/runtime/components/forms/Radio.vue @@ -11,6 +11,7 @@ type="radio" :class="inputClass" v-bind="attrs" + @change="onChange" >
@@ -111,14 +112,16 @@ export default defineComponent({ }, set (value) { emit('update:modelValue', value) - emit('change', value) - if (!radioGroup) { emitFormChange() } } }) + function onChange (event: Event) { + emit('change', (event.target as HTMLInputElement).value) + } + const inputClass = computed(() => { return twMerge(twJoin( ui.value.base, @@ -139,7 +142,8 @@ export default defineComponent({ // eslint-disable-next-line vue/no-dupe-keys name, // eslint-disable-next-line vue/no-dupe-keys - inputClass + inputClass, + onChange } } }) diff --git a/src/runtime/components/forms/Range.vue b/src/runtime/components/forms/Range.vue index c7408efcbd..4c26ba30cc 100644 --- a/src/runtime/components/forms/Range.vue +++ b/src/runtime/components/forms/Range.vue @@ -107,7 +107,7 @@ export default defineComponent({ }) const onChange = (event: Event) => { - emit('change', event) + emit('change', (event.target as HTMLInputElement).value) emitFormChange() } diff --git a/src/runtime/components/forms/Select.vue b/src/runtime/components/forms/Select.vue index 8649552bea..03ebc8d3c7 100644 --- a/src/runtime/components/forms/Select.vue +++ b/src/runtime/components/forms/Select.vue @@ -194,8 +194,8 @@ export default defineComponent({ } const onChange = (event: Event) => { + emit('change', (event.target as HTMLInputElement).value) emitFormChange() - emit('change', event) } const guessOptionValue = (option: any) => { diff --git a/src/runtime/components/forms/SelectMenu.vue b/src/runtime/components/forms/SelectMenu.vue index 3743e63871..43e800a241 100644 --- a/src/runtime/components/forms/SelectMenu.vue +++ b/src/runtime/components/forms/SelectMenu.vue @@ -507,11 +507,12 @@ export default defineComponent({ function onUpdate (event: any) { emit('update:modelValue', event) - emit('change', event) - emitFormChange() } function onChange (event: any) { + emit('change', (event.target as HTMLInputElement).value) + emitFormChange() + query.value = event.target.value } diff --git a/src/runtime/components/forms/Textarea.vue b/src/runtime/components/forms/Textarea.vue index dfde6238de..4104600384 100644 --- a/src/runtime/components/forms/Textarea.vue +++ b/src/runtime/components/forms/Textarea.vue @@ -131,7 +131,7 @@ export default defineComponent({ default: () => ({}) } }, - emits: ['update:modelValue', 'blur'], + emits: ['update:modelValue', 'blur', 'change'], setup (props, { emit }) { const { ui, attrs } = useUI('textarea', toRef(props, 'ui'), config, toRef(props, 'class')) @@ -192,6 +192,7 @@ export default defineComponent({ const onChange = (event: Event) => { const value = (event.target as HTMLInputElement).value + emit('change', value) if (modelModifiers.value.lazy) { updateInput(value) diff --git a/src/runtime/components/forms/Toggle.vue b/src/runtime/components/forms/Toggle.vue index 9f61ceff51..917cd33a1f 100644 --- a/src/runtime/components/forms/Toggle.vue +++ b/src/runtime/components/forms/Toggle.vue @@ -120,6 +120,8 @@ export default defineComponent({ }, set (value) { emit('update:modelValue', value) + emit('change', value) + emitFormChange() } })