Skip to content

Commit a97f103

Browse files
authored
fix(VField): avoid duplicated emits on clear (#21865)
fixes #21417
1 parent 93f4218 commit a97f103

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

packages/vuetify/src/components/VFileInput/VFileInput.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,10 @@ export const VFileInput = genericComponent<VFileInputSlots>()({
194194
const hasDetails = !!(hasCounter || slots.details)
195195
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)
196196
const { modelValue: _, ...inputProps } = VInput.filterProps(props)
197-
const fieldProps = VField.filterProps(props)
197+
const fieldProps = {
198+
...VField.filterProps(props),
199+
'onClick:clear': onClear,
200+
}
198201

199202
return (
200203
<VInput
@@ -232,7 +235,6 @@ export const VFileInput = genericComponent<VFileInputSlots>()({
232235
prependIcon={ props.prependIcon }
233236
onMousedown={ onControlMousedown }
234237
onClick={ onControlClick }
235-
onClick:clear={ onClear }
236238
onClick:prependInner={ props['onClick:prependInner'] }
237239
onClick:appendInner={ props['onClick:appendInner'] }
238240
{ ...fieldProps }

packages/vuetify/src/components/VTextField/VTextField.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import vIntersect from '@/directives/intersect'
1717

1818
// Utilities
1919
import { cloneVNode, computed, nextTick, ref } from 'vue'
20-
import { callEvent, filterInputAttrs, genericComponent, propsFactory, useRender } from '@/util'
20+
import { callEvent, filterInputAttrs, genericComponent, omit, propsFactory, useRender } from '@/util'
2121

2222
// Types
2323
import type { PropType } from 'vue'
@@ -192,7 +192,7 @@ export const VTextField = genericComponent<VTextFieldSlots>()({
192192
onClick:prependInner={ props['onClick:prependInner'] }
193193
onClick:appendInner={ props['onClick:appendInner'] }
194194
role={ props.role }
195-
{ ...fieldProps }
195+
{ ...omit(fieldProps, ['onClick:clear']) }
196196
id={ id.value }
197197
active={ isActive.value || isDirty.value }
198198
dirty={ isDirty.value || props.dirty }

packages/vuetify/src/components/VTextarea/VTextarea.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,10 @@ export const VTextarea = genericComponent<VTextareaSlots>()({
203203
const hasDetails = !!(hasCounter || slots.details)
204204
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)
205205
const { modelValue: _, ...inputProps } = VInput.filterProps(props)
206-
const fieldProps = VField.filterProps(props)
206+
const fieldProps = {
207+
...VField.filterProps(props),
208+
'onClick:clear': onClear,
209+
}
207210

208211
return (
209212
<VInput
@@ -245,7 +248,6 @@ export const VTextarea = genericComponent<VTextareaSlots>()({
245248
}}
246249
onClick={ onControlClick }
247250
onMousedown={ onControlMousedown }
248-
onClick:clear={ onClear }
249251
onClick:prependInner={ props['onClick:prependInner'] }
250252
onClick:appendInner={ props['onClick:appendInner'] }
251253
{ ...fieldProps }

0 commit comments

Comments
 (0)