1
1
import { nextTick , reactive , ref , unref } from 'vue'
2
+
3
+ import { VALIDATION_MODE } from '../shared/constant'
4
+ import type { FieldError , FieldErrors } from '../types/errors'
2
5
import type { Field , FieldElement , FieldValues , Fields } from '../types/filed'
3
6
import type {
4
7
FieldNamesMarkedBoolean ,
@@ -20,32 +23,19 @@ import type {
20
23
UseFormTriggerValidate ,
21
24
UseFormUnregister ,
22
25
} from '../types/form'
23
- import type { FieldError , FieldErrors } from '../types/errors'
24
- import {
25
- get ,
26
- isArray ,
27
- isEmptyObject ,
28
- isFunction ,
29
- isNullOrUndefined ,
30
- isString ,
31
- isUndefined ,
32
- set ,
33
- unset ,
34
- } from '../utils'
35
- import { isRadioOrCheckboxInput } from '../utils/fieldElement'
36
- import { isFieldElement } from '../utils/isFieldElement'
37
26
import type { DefaultValues , UnpackNestedValue } from '../types/utils'
38
- import { getValidationMode } from '../utils/getValidationMode '
27
+ import { get , isArray , isEmptyObject , isFunction , isNullOrUndefined , isString , isUndefined , set , unset } from '../utils'
39
28
40
29
import {
41
30
createErrorHandler as createErrorHandlerUtil ,
42
31
createSubmitHandler as createSubmitHandlerUtil ,
43
32
} from '../utils/createHandler'
44
33
45
- import { VALIDATION_MODE } from '../shared/constant'
46
- import { getFormEl } from '../utils/getFormEl'
47
-
48
34
import { deepEqual } from '../utils/deepEqual'
35
+ import { isRadioOrCheckboxInput } from '../utils/fieldElement'
36
+ import { getFormEl } from '../utils/getFormEl'
37
+ import { getValidationMode } from '../utils/getValidationMode'
38
+ import { isFieldElement } from '../utils/isFieldElement'
49
39
import { handleValidateError , validateField } from './validate'
50
40
51
41
export function creatFormControl < TFieldValues extends FieldValues = FieldValues > (
@@ -401,7 +391,7 @@ export function creatFormControl<TFieldValues extends FieldValues = FieldValues>
401
391
field = get ( _fields , fieldName )
402
392
}
403
393
404
- function addEventListenerToElement ( ) {
394
+ const addEventListenerToElement = ( ) => {
405
395
if ( isFieldElement ( field . el ) || _fields [ fieldName ] . isUnregistered ) {
406
396
return
407
397
}
@@ -427,8 +417,19 @@ export function creatFormControl<TFieldValues extends FieldValues = FieldValues>
427
417
}
428
418
}
429
419
420
+ const handleValueChange = async ( input : InputEvent | any ) => {
421
+ field . inputValue . value = ( input ?. target as any ) ?. value || input || ''
422
+
423
+ _handleAllDirtyFieldsOperate ( fieldName )
424
+ if ( validationModeBeforeSubmit . isOnChange ) {
425
+ await _onChange ( fieldName )
426
+ }
427
+ }
428
+
430
429
return {
430
+ // avoid rebinding ref
431
431
...( ! isFieldElement ( field . el ) && { ref : _fields [ fieldName ] . el } ) ,
432
+
432
433
value : field . inputValue . value ,
433
434
onInput : async ( e : InputEvent ) => {
434
435
if ( _fields [ fieldName ] . isUnregistered ) {
@@ -440,30 +441,20 @@ export function creatFormControl<TFieldValues extends FieldValues = FieldValues>
440
441
// make sure that only trigger onInput or onUpdate:modelValue
441
442
queueMicrotask ( async ( ) => {
442
443
if ( ! isModelValue ) {
443
- field . inputValue . value = ( e ?. target as any ) ?. value || ''
444
-
445
- _handleAllDirtyFieldsOperate ( fieldName )
446
- if ( validationModeBeforeSubmit . isOnChange ) {
447
- await _onChange ( fieldName )
448
- }
444
+ await handleValueChange ( e )
449
445
}
450
446
} )
451
447
} ,
448
+
452
449
'modelValue' : field . inputValue . value ,
453
450
'onUpdate:modelValue' : async ( input : any ) => {
454
451
if ( _fields [ fieldName ] . isUnregistered ) {
455
452
return
456
453
}
457
454
458
- addEventListenerToElement ( )
459
-
460
455
isModelValue = true
461
- field . inputValue . value = input
462
-
463
- _handleAllDirtyFieldsOperate ( fieldName )
464
- if ( validationModeBeforeSubmit . isOnChange ) {
465
- await _onChange ( fieldName )
466
- }
456
+ addEventListenerToElement ( )
457
+ await handleValueChange ( input )
467
458
} ,
468
459
}
469
460
}
0 commit comments