From 29420d8dd93200c897f7cb0426558a1efc7c3dee Mon Sep 17 00:00:00 2001 From: Mathieu Acthernoene Date: Wed, 3 Apr 2024 18:18:56 +0200 Subject: [PATCH] Add getFieldRef --- README.md | 9 +++++++++ src/types.ts | 1 + src/useForm.ts | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/README.md b/README.md index 94e8b0d..db69fe8 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ const { Field, FieldsListener, getFieldValue, + getFieldRef, setFieldValue, setFieldError, focusField, @@ -199,6 +200,14 @@ type getFieldValue = ( ) => Value; ``` +#### getFieldRef + +Return the field stable `ref`. + +```tsx +type getFieldRef = (name: FieldName) => MutableRefObject; +``` + #### setFieldValue By setting `validate: true`, you will enforce validation. It has no effect if the field is already _talkative_. diff --git a/src/types.ts b/src/types.ts index 2138bc1..4549b24 100644 --- a/src/types.ts +++ b/src/types.ts @@ -73,6 +73,7 @@ export type Form, ErrorMessage = string> = { }; getFieldValue: (name: N, options?: { sanitize?: boolean }) => Values[N]; + getFieldRef: (name: keyof Values) => MutableRefObject; setFieldValue: ( name: N, value: Values[N], diff --git a/src/useForm.ts b/src/useForm.ts index e832a57..f69d927 100644 --- a/src/useForm.ts +++ b/src/useForm.ts @@ -127,6 +127,11 @@ export const useForm = , ErrorMessage = string>( return sanitize ? getSanitize(name)(value) : value; }; + const getFieldRef = (name: Name) => { + const { ref } = fields.current[name]; + return ref as MutableRefObject; + }; + const focusField: Contract["focusField"] = (name) => { const { ref } = fields.current[name]; @@ -347,6 +352,7 @@ export const useForm = , ErrorMessage = string>( return { getFieldValue, + getFieldRef, setFieldValue, setFieldError, focusField, @@ -475,6 +481,7 @@ export const useForm = , ErrorMessage = string>( FieldsListener: fieldsListener.current, getFieldValue: api.getFieldValue, + getFieldRef: api.getFieldRef, setFieldValue: api.setFieldValue, setFieldError: api.setFieldError, focusField: api.focusField,