1- import * as React from "react" ;
1+ import {
2+ MutableRefObject ,
3+ ReactElement ,
4+ SetStateAction ,
5+ useEffect ,
6+ useLayoutEffect ,
7+ useMemo ,
8+ useReducer ,
9+ useRef ,
10+ } from "react" ;
211import { useSyncExternalStore } from "use-sync-external-store/shim" ;
312
413// For server-side rendering / react-native
5- const useIsoLayoutEffect = typeof window === "undefined" ? React . useEffect : React . useLayoutEffect ;
14+ const useIsoLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect ;
615
716type AnyRecord = Record < string , unknown > ;
817
@@ -54,22 +63,22 @@ export type Form<Values extends AnyRecord, ErrorMessage = string> = {
5463 name : N ;
5564 children : (
5665 props : FieldState < Values [ N ] , ErrorMessage > & {
57- ref : React . MutableRefObject < any > ;
66+ ref : MutableRefObject < any > ;
5867 onChange : ( value : Values [ N ] ) => void ;
5968 onBlur : ( ) => void ;
6069 focusNextField : ( ) => void ;
6170 } ,
62- ) => React . ReactElement | null ;
63- } ) => React . ReactElement | null ) & {
71+ ) => ReactElement | null ;
72+ } ) => ReactElement | null ) & {
6473 displayName ?: string ;
6574 } ;
6675
6776 FieldsListener : ( < N extends keyof Values > ( props : {
6877 names : N [ ] ;
6978 children : ( states : {
7079 [ N1 in N ] : FieldState < Values [ N1 ] , ErrorMessage > ;
71- } ) => React . ReactElement | null ;
72- } ) => React . ReactElement | null ) & {
80+ } ) => ReactElement | null ;
81+ } ) => ReactElement | null ) & {
7382 displayName ?: string ;
7483 } ;
7584
@@ -156,16 +165,16 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
156165 type Contract = Form < Values , ErrorMessage > ;
157166 type Name = keyof Values ;
158167
159- const [ , forceUpdate ] = React . useReducer ( ( ) => [ ] , [ ] ) ;
160- const mounted = React . useRef ( false ) ;
161- const config = React . useRef ( fields ) ;
162- const formStatus = React . useRef < FormStatus > ( "untouched" ) ;
168+ const [ , forceUpdate ] = useReducer ( ( ) => [ ] , [ ] ) ;
169+ const mounted = useRef ( false ) ;
170+ const config = useRef ( fields ) ;
171+ const formStatus = useRef < FormStatus > ( "untouched" ) ;
163172
164173 useIsoLayoutEffect ( ( ) => {
165174 config . current = fields ;
166175 } ) ;
167176
168- React . useEffect ( ( ) => {
177+ useEffect ( ( ) => {
169178 mounted . current = true ;
170179
171180 return ( ) => {
@@ -185,22 +194,22 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
185194 } > ;
186195 } ;
187196
188- const states = React . useRef ( ) as React . MutableRefObject < StateMap > ;
197+ const states = useRef ( ) as MutableRefObject < StateMap > ;
189198
190199 type CallbackMap = Record < Name , Set < ( ) => void > > ;
191200 type MountedMap = Record < Name , boolean > ;
192- type RefMap = Record < Name , React . MutableRefObject < any > > ;
201+ type RefMap = Record < Name , MutableRefObject < any > > ;
193202 type TimeoutMap = Record < Name , number | undefined > ;
194203
195- const callbacks = React . useRef ( ) as React . MutableRefObject < CallbackMap > ;
196- const mounteds = React . useRef ( ) as React . MutableRefObject < MountedMap > ;
197- const refs = React . useRef ( ) as React . MutableRefObject < RefMap > ;
198- const timeouts = React . useRef ( ) as React . MutableRefObject < TimeoutMap > ;
204+ const callbacks = useRef ( ) as MutableRefObject < CallbackMap > ;
205+ const mounteds = useRef ( ) as MutableRefObject < MountedMap > ;
206+ const refs = useRef ( ) as MutableRefObject < RefMap > ;
207+ const timeouts = useRef ( ) as MutableRefObject < TimeoutMap > ;
199208
200- const field = React . useRef ( ) as React . MutableRefObject < Contract [ "Field" ] > ;
201- const fieldsListener = React . useRef ( ) as React . MutableRefObject < Contract [ "FieldsListener" ] > ;
209+ const field = useRef ( ) as MutableRefObject < Contract [ "Field" ] > ;
210+ const fieldsListener = useRef ( ) as MutableRefObject < Contract [ "FieldsListener" ] > ;
202211
203- const api = React . useMemo ( ( ) => {
212+ const api = useMemo ( ( ) => {
204213 const getDebounceInterval = ( name : Name ) => config . current [ name ] . debounceInterval ?? 0 ;
205214 const getEqualityFn = ( name : Name ) => config . current [ name ] . equalityFn ?? Object . is ;
206215 const getInitialValue = ( name : Name ) => extractInitialValue ( config . current [ name ] . initialValue ) ;
@@ -213,9 +222,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
213222
214223 const setState = < N extends Name > (
215224 name : N ,
216- state : React . SetStateAction <
217- { value : Values [ N ] } & Pick < StateMap [ N ] , "talkative" | "validity" >
218- > ,
225+ state : SetStateAction < { value : Values [ N ] } & Pick < StateMap [ N ] , "talkative" | "validity" > > ,
219226 ) => {
220227 const currentState = states . current [ name ] ;
221228
@@ -649,7 +656,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
649656 }
650657
651658 const Field : Contract [ "Field" ] = ( { name, children } ) => {
652- const { subscribe, getSnapshot } = React . useMemo (
659+ const { subscribe, getSnapshot } = useMemo (
653660 ( ) => ( {
654661 getSnapshot : ( ) => states . current [ name ] ,
655662 subscribe : ( callback : ( ) => void ) : ( ( ) => void ) => {
@@ -665,7 +672,7 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
665672
666673 useSyncExternalStore ( subscribe , getSnapshot , getSnapshot ) ;
667674
668- React . useEffect ( ( ) => {
675+ useEffect ( ( ) => {
669676 const isFirstMounting = ! mounteds . current [ name ] ;
670677
671678 if ( isFirstMounting ) {
@@ -688,17 +695,17 @@ export const useForm = <Values extends AnyRecord, ErrorMessage = string>(
688695 return children ( {
689696 ...api . getFieldState ( name ) ,
690697 ref : refs . current [ name ] ,
691- focusNextField : React . useMemo ( ( ) => api . getFocusNextField ( name ) , [ name ] ) ,
692- onBlur : React . useMemo ( ( ) => api . getOnBlur ( name ) , [ name ] ) ,
693- onChange : React . useMemo ( ( ) => api . getOnChange ( name ) , [ name ] ) ,
698+ focusNextField : useMemo ( ( ) => api . getFocusNextField ( name ) , [ name ] ) ,
699+ onBlur : useMemo ( ( ) => api . getOnBlur ( name ) , [ name ] ) ,
700+ onChange : useMemo ( ( ) => api . getOnChange ( name ) , [ name ] ) ,
694701 } ) ;
695702 } ;
696703
697704 Field . displayName = "Field" ;
698705 field . current = Field ;
699706
700707 const FieldsListener : Contract [ "FieldsListener" ] = ( { names, children } ) => {
701- const { subscribe, getSnapshot } = React . useMemo (
708+ const { subscribe, getSnapshot } = useMemo (
702709 ( ) => ( {
703710 getSnapshot : ( ) => JSON . stringify ( names . map ( ( name ) => states . current [ name ] ) ) ,
704711 subscribe : ( callback : ( ) => void ) : ( ( ) => void ) => {
0 commit comments