@@ -95,6 +95,7 @@ export type Form<Values extends AnyRecord, ErrorMessage = string> = {
9595
9696 focusField : ( name : keyof Values ) => void ;
9797 resetField : ( name : keyof Values , options ?: { feedbackOnly ?: boolean } ) => void ;
98+ sanitizeField : ( name : keyof Values ) => void ;
9899 validateField : ( name : keyof Values ) => Promise < ErrorMessage | void > ;
99100
100101 listenFields : < N extends keyof Values > (
@@ -268,7 +269,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
268269 return debounced ;
269270 } ;
270271
271- const runCallbacks = ( name : Name ) : void => {
272+ const runRenderCallbacks = ( name : Name ) : void => {
272273 callbacks . current [ name ] . forEach ( ( callback ) => callback ( ) ) ;
273274 } ;
274275
@@ -335,14 +336,14 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
335336 }
336337
337338 setError ( name , error ) ;
338- runCallbacks ( name ) ;
339+ runRenderCallbacks ( name ) ;
339340
340341 return error ;
341342 }
342343
343344 if ( ! debounced ) {
344345 setValidating ( name ) ;
345- runCallbacks ( name ) ;
346+ runRenderCallbacks ( name ) ;
346347 }
347348
348349 return promiseOrError
@@ -358,7 +359,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
358359 }
359360
360361 setError ( name , error ) ;
361- runCallbacks ( name ) ;
362+ runRenderCallbacks ( name ) ;
362363
363364 return error ;
364365 } )
@@ -390,7 +391,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
390391 const setFieldError : Contract [ "setFieldError" ] = ( name , error ) => {
391392 setError ( name , error ) ;
392393 setTalkative ( name ) ;
393- runCallbacks ( name ) ;
394+ runRenderCallbacks ( name ) ;
394395 } ;
395396
396397 const focusField : Contract [ "focusField" ] = ( name ) => {
@@ -410,7 +411,19 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
410411 validity : { tag : "unknown" } ,
411412 } ) ) ;
412413
413- runCallbacks ( name ) ;
414+ runRenderCallbacks ( name ) ;
415+ } ;
416+
417+ const sanitizeField : Contract [ "sanitizeField" ] = ( name ) => {
418+ const sanitize = getSanitize ( name ) ;
419+
420+ setState ( name , ( { talkative, value, validity } ) => ( {
421+ value : sanitize ( value ) ,
422+ talkative,
423+ validity,
424+ } ) ) ;
425+
426+ runRenderCallbacks ( name ) ;
414427 } ;
415428
416429 const validateField : Contract [ "validateField" ] = ( name ) => {
@@ -468,7 +481,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
468481 }
469482
470483 setValidating ( name ) ;
471- runCallbacks ( name ) ;
484+ runRenderCallbacks ( name ) ;
472485
473486 timeouts . current [ name ] = setTimeout ( ( ) => {
474487 if ( isMounted ( name ) ) {
@@ -618,6 +631,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
618631 setFieldError,
619632 focusField,
620633 resetField,
634+ sanitizeField,
621635 validateField,
622636 listenFields,
623637
@@ -750,6 +764,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
750764 setFieldError : api . setFieldError ,
751765 focusField : api . focusField ,
752766 resetField : api . resetField ,
767+ sanitizeField : api . sanitizeField ,
753768 validateField : api . validateField ,
754769 listenFields : api . listenFields ,
755770
0 commit comments