@@ -21,16 +21,34 @@ const calculateArrayValidator = (props, validate, component, validatorMapper) =>
2121 }
2222} ;
2323
24- const calculateValidate = ( props , validate , component , validatorMapper ) => {
24+ const calculateValidate = ( props , validate , component , validatorMapper , setWarning , useWarnings ) => {
2525 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 ;
2745 }
2846} ;
2947
30- const init = ( { props, validate, component, validatorMapper } ) => ( {
48+ const init = ( { props, validate, component, validatorMapper, setWarning , useWarnings } ) => ( {
3149 initialValue : calculateInitialValue ( props ) ,
3250 arrayValidator : calculateArrayValidator ( props , validate , component , validatorMapper ) ,
33- validate : calculateValidate ( props , validate , component , validatorMapper ) ,
51+ validate : calculateValidate ( props , validate , component , validatorMapper , setWarning , useWarnings ) ,
3452 type : assignSpecialType ( component )
3553} ) ;
3654
@@ -68,9 +86,7 @@ const createFieldProps = (name, formOptions) => {
6886
6987const useFieldApi = ( { name, initializeOnMount, component, render, validate, resolveProps, useWarnings, convertWarningToError, ...props } ) => {
7088 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 ( ) ;
7490
7591 const { validate : resolvePropsValidate , ...resolvedProps } = resolveProps
7692 ? resolveProps ( props , createFieldProps ( name , formOptions ) , formOptions ) || { }
@@ -80,7 +96,7 @@ const useFieldApi = ({ name, initializeOnMount, component, render, validate, res
8096
8197 const [ { type, initialValue, validate : stateValidate , arrayValidator } , dispatch ] = useReducer (
8298 reducer ,
83- { props : { ...props , ...resolvedProps } , validate : finalValidate , component, validatorMapper } ,
99+ { props : { ...props , ...resolvedProps } , validate : finalValidate , component, validatorMapper, setWarning , useWarnings } ,
84100 init
85101 ) ;
86102
@@ -94,26 +110,7 @@ const useFieldApi = ({ name, initializeOnMount, component, render, validate, res
94110 ...( stateValidate ? { validate : stateValidate } : { } )
95111 } ;
96112
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 ) ;
117114
118115 /** Reinitilize type */
119116 useEffect ( ( ) => {
@@ -130,7 +127,7 @@ const useFieldApi = ({ name, initializeOnMount, component, render, validate, res
130127 if ( mounted . current ) {
131128 dispatch ( {
132129 type : 'setValidators' ,
133- validate : calculateValidate ( enhancedProps , finalValidate , component , validatorMapper ) ,
130+ validate : calculateValidate ( enhancedProps , finalValidate , component , validatorMapper , setWarning , useWarnings ) ,
134131 arrayValidator : calculateArrayValidator ( enhancedProps , finalValidate , component , validatorMapper )
135132 } ) ;
136133 }
0 commit comments