@@ -21,16 +21,34 @@ const calculateArrayValidator = (props, validate, component, validatorMapper) =>
21
21
}
22
22
} ;
23
23
24
- const calculateValidate = ( props , validate , component , validatorMapper ) => {
24
+ const calculateValidate = ( props , validate , component , validatorMapper , setWarning , useWarnings ) => {
25
25
if ( ( validate || props . dataType ) && componentTypes . FIELD_ARRAY !== component ) {
26
- return composeValidators ( getValidate ( validate , props . dataType , validatorMapper ) ) ;
26
+ const validateFn = composeValidators ( getValidate ( validate , props . dataType , validatorMapper ) ) ;
27
+
28
+ if ( useWarnings ) {
29
+ return async ( ...args ) => {
30
+ setWarning ( undefined ) ;
31
+
32
+ const result = await validateFn ( ...args ) ;
33
+
34
+ if ( result ?. type === 'warning' ) {
35
+ setWarning ( result . error ) ;
36
+
37
+ return ;
38
+ }
39
+
40
+ return result ;
41
+ } ;
42
+ }
43
+
44
+ return validateFn ;
27
45
}
28
46
} ;
29
47
30
- const init = ( { props, validate, component, validatorMapper } ) => ( {
48
+ const init = ( { props, validate, component, validatorMapper, setWarning , useWarnings } ) => ( {
31
49
initialValue : calculateInitialValue ( props ) ,
32
50
arrayValidator : calculateArrayValidator ( props , validate , component , validatorMapper ) ,
33
- validate : calculateValidate ( props , validate , component , validatorMapper ) ,
51
+ validate : calculateValidate ( props , validate , component , validatorMapper , setWarning , useWarnings ) ,
34
52
type : assignSpecialType ( component )
35
53
} ) ;
36
54
@@ -68,9 +86,7 @@ const createFieldProps = (name, formOptions) => {
68
86
69
87
const useFieldApi = ( { name, initializeOnMount, component, render, validate, resolveProps, useWarnings, convertWarningToError, ...props } ) => {
70
88
const { validatorMapper, formOptions } = useContext ( RendererContext ) ;
71
-
72
- // eslint-disable-next-line react-hooks/rules-of-hooks
73
- const [ warning , setWarning ] = useWarnings ? useState ( ) : [ undefined , ( ) => undefined ] ;
89
+ const [ warning , setWarning ] = useState ( ) ;
74
90
75
91
const { validate : resolvePropsValidate , ...resolvedProps } = resolveProps
76
92
? resolveProps ( props , createFieldProps ( name , formOptions ) , formOptions ) || { }
@@ -80,7 +96,7 @@ const useFieldApi = ({ name, initializeOnMount, component, render, validate, res
80
96
81
97
const [ { type, initialValue, validate : stateValidate , arrayValidator } , dispatch ] = useReducer (
82
98
reducer ,
83
- { props : { ...props , ...resolvedProps } , validate : finalValidate , component, validatorMapper } ,
99
+ { props : { ...props , ...resolvedProps } , validate : finalValidate , component, validatorMapper, setWarning , useWarnings } ,
84
100
init
85
101
) ;
86
102
@@ -94,26 +110,7 @@ const useFieldApi = ({ name, initializeOnMount, component, render, validate, res
94
110
...( stateValidate ? { validate : stateValidate } : { } )
95
111
} ;
96
112
97
- const fieldProps = useField ( name , {
98
- ...enhancedProps ,
99
- ...( useWarnings && {
100
- validate : async ( ...args ) => {
101
- warning && setWarning ( undefined ) ;
102
-
103
- const result = await enhancedProps . validate ( ...args ) ;
104
-
105
- if ( result ?. type === 'warning' ) {
106
- if ( warning !== result . error ) {
107
- setWarning ( result . error ) ;
108
- }
109
-
110
- return ;
111
- }
112
-
113
- return result ;
114
- }
115
- } )
116
- } ) ;
113
+ const fieldProps = useField ( name , enhancedProps ) ;
117
114
118
115
/** Reinitilize type */
119
116
useEffect ( ( ) => {
@@ -130,7 +127,7 @@ const useFieldApi = ({ name, initializeOnMount, component, render, validate, res
130
127
if ( mounted . current ) {
131
128
dispatch ( {
132
129
type : 'setValidators' ,
133
- validate : calculateValidate ( enhancedProps , finalValidate , component , validatorMapper ) ,
130
+ validate : calculateValidate ( enhancedProps , finalValidate , component , validatorMapper , setWarning , useWarnings ) ,
134
131
arrayValidator : calculateArrayValidator ( enhancedProps , finalValidate , component , validatorMapper )
135
132
} ) ;
136
133
}
0 commit comments