From afbfed2ff6da727e14ac888e2d80480f1dcf36ce Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Tue, 21 Jan 2025 10:25:43 -0800 Subject: [PATCH 1/2] fix: useStore without a selector should no longer crash in React --- packages/form-core/src/FormApi.ts | 49 ++++++++++++++++++---- packages/form-core/src/utils.ts | 46 ++++++++++++++++++++ packages/react-form/tests/useForm.test.tsx | 29 +++++++++++++ 3 files changed, 116 insertions(+), 8 deletions(-) diff --git a/packages/form-core/src/FormApi.ts b/packages/form-core/src/FormApi.ts index 0065ad22a..b95db5ef4 100644 --- a/packages/form-core/src/FormApi.ts +++ b/packages/form-core/src/FormApi.ts @@ -7,6 +7,7 @@ import { getSyncValidatorArray, isNonEmptyArray, setBy, + shallow, } from './utils' import { isStandardSchemaValidator, @@ -404,6 +405,8 @@ export class FormApi< const prevBaseStore = prevDepVals?.[0] const currBaseStore = currDepVals[0] + let originalMetaCount = 0 + const fieldMeta = {} as FormState['fieldMeta'] for (const fieldName of Object.keys( currBaseStore.fieldMetaBase, @@ -437,6 +440,7 @@ export class FormApi< currBaseVal === prevBaseVal ) { fieldMeta[fieldName] = prevFieldInfo + originalMetaCount++ continue } @@ -447,6 +451,13 @@ export class FormApi< } as FieldMeta } + if ( + prevVal && + originalMetaCount === Object.keys(currBaseStore.fieldMetaBase).length + ) { + return prevVal + } + return fieldMeta }, }) @@ -532,6 +543,26 @@ export class FormApi< errorMap = Object.assign(errorMap, { onMount: undefined }) } + if ( + prevVal && + prevBaseStore && + prevVal.errorMap === errorMap && + prevVal.fieldMeta === this.fieldMetaDerived.state && + prevVal.errors === errors && + prevVal.isFieldsValidating === isFieldsValidating && + prevVal.isFieldsValid === isFieldsValid && + prevVal.isFormValid === isFormValid && + prevVal.isValid === isValid && + prevVal.canSubmit === canSubmit && + prevVal.isTouched === isTouched && + prevVal.isBlurred === isBlurred && + prevVal.isPristine === isPristine && + prevVal.isDirty === isDirty && + shallow(prevBaseStore, currBaseStore) + ) { + return prevVal + } + let state = { ...currBaseStore, errorMap, @@ -629,16 +660,18 @@ export class FormApi< // Options need to be updated first so that when the store is updated, the state is correct for the derived state this.options = options - batch(() => { - const shouldUpdateValues = - options.defaultValues && - options.defaultValues !== oldOptions.defaultValues && - !this.state.isTouched + const shouldUpdateValues = + options.defaultValues && + !shallow(options.defaultValues, oldOptions.defaultValues) && + !this.state.isTouched + + const shouldUpdateState = + !shallow(options.defaultState, oldOptions.defaultState) && + !this.state.isTouched - const shouldUpdateState = - options.defaultState !== oldOptions.defaultState && - !this.state.isTouched + if (!shouldUpdateValues && !shouldUpdateState) return + batch(() => { this.baseStore.setState(() => getDefaultFormState( Object.assign( diff --git a/packages/form-core/src/utils.ts b/packages/form-core/src/utils.ts index dd0aef3b1..b2a52d496 100644 --- a/packages/form-core/src/utils.ts +++ b/packages/form-core/src/utils.ts @@ -324,3 +324,49 @@ export function getSyncValidatorArray( return [changeValidator, serverValidator] as never } } + +export function shallow(objA: T, objB: T) { + if (Object.is(objA, objB)) { + return true + } + + if ( + typeof objA !== 'object' || + objA === null || + typeof objB !== 'object' || + objB === null + ) { + return false + } + + if (objA instanceof Map && objB instanceof Map) { + if (objA.size !== objB.size) return false + for (const [k, v] of objA) { + if (!objB.has(k) || !Object.is(v, objB.get(k))) return false + } + return true + } + + if (objA instanceof Set && objB instanceof Set) { + if (objA.size !== objB.size) return false + for (const v of objA) { + if (!objB.has(v)) return false + } + return true + } + + const keysA = Object.keys(objA) + if (keysA.length !== Object.keys(objB).length) { + return false + } + + for (let i = 0; i < keysA.length; i++) { + if ( + !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) || + !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T]) + ) { + return false + } + } + return true +} diff --git a/packages/react-form/tests/useForm.test.tsx b/packages/react-form/tests/useForm.test.tsx index 096760f66..21eff0896 100644 --- a/packages/react-form/tests/useForm.test.tsx +++ b/packages/react-form/tests/useForm.test.tsx @@ -763,4 +763,33 @@ describe('useForm', () => { expect(fn).toHaveBeenCalledTimes(1) }) + + it('should not cause infinite re-renders when listening to state', () => { + const fn = vi.fn() + + function Comp() { + const form = useForm({ + defaultValues: { + firstName: '', + lastName: '', + }, + onSubmit: async ({ value }) => { + // Do something with form data + console.log(value) + }, + }) + + const { values } = useStore(form.store) + + useEffect(() => { + fn(values) + }, [values]) + + return null + } + + render() + + expect(fn).toHaveBeenCalledTimes(1) + }) }) From bdf952ac81bafdbce6b001c09f8b2b617b7b3959 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:26:57 +0000 Subject: [PATCH 2/2] ci: apply automated fixes and generate docs --- docs/reference/classes/formapi.md | 58 +++++++++---------- docs/reference/functions/shallow.md | 30 ++++++++++ docs/reference/index.md | 1 + docs/reference/interfaces/formoptions.md | 20 +++---- docs/reference/interfaces/formvalidators.md | 20 +++---- docs/reference/type-aliases/baseformstate.md | 2 +- .../type-aliases/derivedformstate.md | 2 +- docs/reference/type-aliases/fieldinfo.md | 2 +- .../fieldserrormapfromvalidator.md | 2 +- docs/reference/type-aliases/formstate.md | 2 +- docs/reference/type-aliases/formvalidatefn.md | 2 +- docs/reference/type-aliases/formvalidator.md | 2 +- docs/reference/type-aliases/validationmeta.md | 2 +- 13 files changed, 88 insertions(+), 57 deletions(-) create mode 100644 docs/reference/functions/shallow.md diff --git a/docs/reference/classes/formapi.md b/docs/reference/classes/formapi.md index e242bf9df..5ec82b4d3 100644 --- a/docs/reference/classes/formapi.md +++ b/docs/reference/classes/formapi.md @@ -5,7 +5,7 @@ title: FormApi # Class: FormApi\ -Defined in: [packages/form-core/src/FormApi.ts:360](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L360) +Defined in: [packages/form-core/src/FormApi.ts:361](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L361) A class representing the Form API. It handles the logic and interactions with the form state. @@ -27,7 +27,7 @@ However, if you need to create a new instance manually, you can do so by calling new FormApi(opts?): FormApi ``` -Defined in: [packages/form-core/src/FormApi.ts:389](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L389) +Defined in: [packages/form-core/src/FormApi.ts:390](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L390) Constructs a new `FormApi` instance with the given form options. @@ -49,7 +49,7 @@ Constructs a new `FormApi` instance with the given form options. baseStore: Store, (cb) => BaseFormState>; ``` -Defined in: [packages/form-core/src/FormApi.ts:368](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L368) +Defined in: [packages/form-core/src/FormApi.ts:369](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L369) *** @@ -59,7 +59,7 @@ Defined in: [packages/form-core/src/FormApi.ts:368](https://github.com/TanStack/ fieldInfo: Record ? PrefixTupleAccessor, AllowedIndexes, never>, []> : TFormData extends any[] ? PrefixArrayAccessor, [any]> : TFormData extends Date ? never : TFormData extends object ? PrefixObjectAccessor, []> : TFormData extends string | number | bigint | boolean ? "" : never, FieldInfo>; ``` -Defined in: [packages/form-core/src/FormApi.ts:374](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L374) +Defined in: [packages/form-core/src/FormApi.ts:375](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L375) A record of field information for each field in the form. @@ -71,7 +71,7 @@ A record of field information for each field in the form. fieldMetaDerived: Derived ? PrefixTupleAccessor, AllowedIndexes, never>, []> : TFormData extends any[] ? PrefixArrayAccessor, [any]> : TFormData extends Date ? never : TFormData extends object ? PrefixObjectAccessor, []> : TFormData extends string | number | bigint | boolean ? "" : never, FieldMeta>>; ``` -Defined in: [packages/form-core/src/FormApi.ts:369](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L369) +Defined in: [packages/form-core/src/FormApi.ts:370](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L370) *** @@ -81,7 +81,7 @@ Defined in: [packages/form-core/src/FormApi.ts:369](https://github.com/TanStack/ options: FormOptions = {}; ``` -Defined in: [packages/form-core/src/FormApi.ts:367](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L367) +Defined in: [packages/form-core/src/FormApi.ts:368](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L368) The options for the form. @@ -93,7 +93,7 @@ The options for the form. store: Derived>; ``` -Defined in: [packages/form-core/src/FormApi.ts:370](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L370) +Defined in: [packages/form-core/src/FormApi.ts:371](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L371) ## Accessors @@ -105,7 +105,7 @@ Defined in: [packages/form-core/src/FormApi.ts:370](https://github.com/TanStack/ get state(): FormState ``` -Defined in: [packages/form-core/src/FormApi.ts:377](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L377) +Defined in: [packages/form-core/src/FormApi.ts:378](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L378) ##### Returns @@ -119,7 +119,7 @@ Defined in: [packages/form-core/src/FormApi.ts:377](https://github.com/TanStack/ deleteField(field): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1194](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1194) +Defined in: [packages/form-core/src/FormApi.ts:1227](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1227) #### Type Parameters @@ -143,7 +143,7 @@ Defined in: [packages/form-core/src/FormApi.ts:1194](https://github.com/TanStack getFieldInfo(field): FieldInfo ``` -Defined in: [packages/form-core/src/FormApi.ts:1103](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1103) +Defined in: [packages/form-core/src/FormApi.ts:1136](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1136) Gets the field info of the specified field. @@ -169,7 +169,7 @@ Gets the field info of the specified field. getFieldMeta(field): undefined | FieldMeta ``` -Defined in: [packages/form-core/src/FormApi.ts:1094](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1094) +Defined in: [packages/form-core/src/FormApi.ts:1127](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1127) Gets the metadata of the specified field. @@ -195,7 +195,7 @@ Gets the metadata of the specified field. getFieldValue(field): DeepValue> ``` -Defined in: [packages/form-core/src/FormApi.ts:1087](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1087) +Defined in: [packages/form-core/src/FormApi.ts:1120](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1120) Gets the value of the specified field. @@ -221,7 +221,7 @@ Gets the value of the specified field. handleSubmit(): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1028](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1028) +Defined in: [packages/form-core/src/FormApi.ts:1061](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1061) Handles the form submission, performs validation, and calls the appropriate onSubmit or onInvalidSubmit callbacks. @@ -241,7 +241,7 @@ insertFieldValue( opts?): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1226](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1226) +Defined in: [packages/form-core/src/FormApi.ts:1259](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1259) Inserts a value into an array field at the specified index, shifting the subsequent values to the right. @@ -279,7 +279,7 @@ Inserts a value into an array field at the specified index, shifting the subsequ mount(): () => void ``` -Defined in: [packages/form-core/src/FormApi.ts:607](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L607) +Defined in: [packages/form-core/src/FormApi.ts:638](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L638) #### Returns @@ -301,7 +301,7 @@ moveFieldValues( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1344](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1344) +Defined in: [packages/form-core/src/FormApi.ts:1377](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1377) Moves the value at the first specified index to the second specified index within an array field. @@ -342,7 +342,7 @@ pushFieldValue( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1208](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1208) +Defined in: [packages/form-core/src/FormApi.ts:1241](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1241) Pushes a value into an array field. @@ -379,7 +379,7 @@ removeFieldValue( opts?): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1279](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1279) +Defined in: [packages/form-core/src/FormApi.ts:1312](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1312) Removes a value from an array field at the specified index. @@ -417,7 +417,7 @@ replaceFieldValue( opts?): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1253](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1253) +Defined in: [packages/form-core/src/FormApi.ts:1286](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1286) Replaces a value into an array field at the specified index. @@ -455,7 +455,7 @@ Replaces a value into an array field at the specified index. reset(values?, opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:668](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L668) +Defined in: [packages/form-core/src/FormApi.ts:701](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L701) Resets the form state to the default values. If values are provided, the form will be reset to those values instead and the default values will be updated. @@ -488,7 +488,7 @@ Optional options to control the reset behavior. resetFieldMeta(fieldMeta): Record ``` -Defined in: [packages/form-core/src/FormApi.ts:1140](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1140) +Defined in: [packages/form-core/src/FormApi.ts:1173](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1173) #### Type Parameters @@ -512,7 +512,7 @@ Defined in: [packages/form-core/src/FormApi.ts:1140](https://github.com/TanStack setErrorMap(errorMap): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1368](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1368) +Defined in: [packages/form-core/src/FormApi.ts:1401](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1401) Updates the form's errorMap @@ -534,7 +534,7 @@ Updates the form's errorMap setFieldMeta(field, updater): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1122](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1122) +Defined in: [packages/form-core/src/FormApi.ts:1155](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1155) Updates the metadata of the specified field. @@ -567,7 +567,7 @@ setFieldValue( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1164](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1164) +Defined in: [packages/form-core/src/FormApi.ts:1197](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1197) Sets the value of the specified field and optionally updates the touched state. @@ -605,7 +605,7 @@ swapFieldValues( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1318](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1318) +Defined in: [packages/form-core/src/FormApi.ts:1351](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1351) Swaps the values at the specified indices within an array field. @@ -643,7 +643,7 @@ Swaps the values at the specified indices within an array field. update(options?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:624](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L624) +Defined in: [packages/form-core/src/FormApi.ts:655](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L655) Updates the form options and form state. @@ -665,7 +665,7 @@ Updates the form options and form state. validateAllFields(cause): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:694](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L694) +Defined in: [packages/form-core/src/FormApi.ts:727](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L727) Validates form and all fields in using the correct handlers for a given validation cause. @@ -690,7 +690,7 @@ validateArrayFieldsStartingFrom( cause): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:722](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L722) +Defined in: [packages/form-core/src/FormApi.ts:755](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L755) Validates the children of a specified array in the form starting from a given index until the end using the correct handlers for a given validation type. @@ -726,7 +726,7 @@ validateField(field, cause): | Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:761](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L761) +Defined in: [packages/form-core/src/FormApi.ts:794](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L794) Validates a specified field in the form using the correct handlers for a given validation type. diff --git a/docs/reference/functions/shallow.md b/docs/reference/functions/shallow.md new file mode 100644 index 000000000..344e80850 --- /dev/null +++ b/docs/reference/functions/shallow.md @@ -0,0 +1,30 @@ +--- +id: shallow +title: shallow +--- + +# Function: shallow() + +```ts +function shallow(objA, objB): boolean +``` + +Defined in: [packages/form-core/src/utils.ts:328](https://github.com/TanStack/form/blob/main/packages/form-core/src/utils.ts#L328) + +## Type Parameters + +• **T** + +## Parameters + +### objA + +`T` + +### objB + +`T` + +## Returns + +`boolean` diff --git a/docs/reference/index.md b/docs/reference/index.md index 6221bdca0..5f9cb9ddf 100644 --- a/docs/reference/index.md +++ b/docs/reference/index.md @@ -46,4 +46,5 @@ title: "@tanstack/form-core" - [formOptions](functions/formoptions.md) - [isStandardSchemaValidator](functions/isstandardschemavalidator.md) - [mergeForm](functions/mergeform.md) +- [shallow](functions/shallow.md) - [standardSchemaValidator](functions/standardschemavalidator.md) diff --git a/docs/reference/interfaces/formoptions.md b/docs/reference/interfaces/formoptions.md index c218321cf..f9069e928 100644 --- a/docs/reference/interfaces/formoptions.md +++ b/docs/reference/interfaces/formoptions.md @@ -5,7 +5,7 @@ title: FormOptions # Interface: FormOptions\ -Defined in: [packages/form-core/src/FormApi.ts:148](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L148) +Defined in: [packages/form-core/src/FormApi.ts:149](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L149) An object representing the options for a form. @@ -23,7 +23,7 @@ An object representing the options for a form. optional asyncAlways: boolean; ``` -Defined in: [packages/form-core/src/FormApi.ts:163](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L163) +Defined in: [packages/form-core/src/FormApi.ts:164](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L164) If true, always run async validation, even when sync validation has produced an error. Defaults to undefined. @@ -35,7 +35,7 @@ If true, always run async validation, even when sync validation has produced an optional asyncDebounceMs: number; ``` -Defined in: [packages/form-core/src/FormApi.ts:167](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L167) +Defined in: [packages/form-core/src/FormApi.ts:168](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L168) Optional time in milliseconds if you want to introduce a delay before firing off an async action. @@ -47,7 +47,7 @@ Optional time in milliseconds if you want to introduce a delay before firing off optional defaultState: Partial>; ``` -Defined in: [packages/form-core/src/FormApi.ts:159](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L159) +Defined in: [packages/form-core/src/FormApi.ts:160](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L160) The default state for the form. @@ -59,7 +59,7 @@ The default state for the form. optional defaultValues: TFormData; ``` -Defined in: [packages/form-core/src/FormApi.ts:155](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L155) +Defined in: [packages/form-core/src/FormApi.ts:156](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L156) Set initial values for your form. @@ -71,7 +71,7 @@ Set initial values for your form. optional onSubmit: (props) => any; ``` -Defined in: [packages/form-core/src/FormApi.ts:179](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L179) +Defined in: [packages/form-core/src/FormApi.ts:180](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L180) A function to be called when the form is submitted, what should happen once the user submits a valid form returns `any` or a promise `Promise` @@ -99,7 +99,7 @@ A function to be called when the form is submitted, what should happen once the optional onSubmitInvalid: (props) => void; ``` -Defined in: [packages/form-core/src/FormApi.ts:186](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L186) +Defined in: [packages/form-core/src/FormApi.ts:187](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L187) Specify an action for scenarios where the user tries to submit an invalid form. @@ -127,7 +127,7 @@ Specify an action for scenarios where the user tries to submit an invalid form. optional transform: FormTransform; ``` -Defined in: [packages/form-core/src/FormApi.ts:190](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L190) +Defined in: [packages/form-core/src/FormApi.ts:191](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L191) *** @@ -137,7 +137,7 @@ Defined in: [packages/form-core/src/FormApi.ts:190](https://github.com/TanStack/ optional validatorAdapter: TFormValidator; ``` -Defined in: [packages/form-core/src/FormApi.ts:171](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L171) +Defined in: [packages/form-core/src/FormApi.ts:172](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L172) A validator adapter to support usage of extra validation types (IE: Zod, Yup, or Valibot usage) @@ -149,6 +149,6 @@ A validator adapter to support usage of extra validation types (IE: Zod, Yup, or optional validators: FormValidators; ``` -Defined in: [packages/form-core/src/FormApi.ts:175](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L175) +Defined in: [packages/form-core/src/FormApi.ts:176](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L176) A list of validators to pass to the form diff --git a/docs/reference/interfaces/formvalidators.md b/docs/reference/interfaces/formvalidators.md index fef4ad759..68f93bfbb 100644 --- a/docs/reference/interfaces/formvalidators.md +++ b/docs/reference/interfaces/formvalidators.md @@ -5,7 +5,7 @@ title: FormValidators # Interface: FormValidators\ -Defined in: [packages/form-core/src/FormApi.ts:96](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L96) +Defined in: [packages/form-core/src/FormApi.ts:97](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L97) ## Type Parameters @@ -21,7 +21,7 @@ Defined in: [packages/form-core/src/FormApi.ts:96](https://github.com/TanStack/f optional onBlur: FormValidateOrFn; ``` -Defined in: [packages/form-core/src/FormApi.ts:119](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L119) +Defined in: [packages/form-core/src/FormApi.ts:120](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L120) Optional function that validates the form data when a field loses focus, returns a `FormValidationError` @@ -33,7 +33,7 @@ Optional function that validates the form data when a field loses focus, returns optional onBlurAsync: FormAsyncValidateOrFn; ``` -Defined in: [packages/form-core/src/FormApi.ts:123](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L123) +Defined in: [packages/form-core/src/FormApi.ts:124](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L124) Optional onBlur asynchronous validation method for when a field loses focus returns a ` FormValidationError` or a promise of `Promise` @@ -45,7 +45,7 @@ Optional onBlur asynchronous validation method for when a field loses focus retu optional onBlurAsyncDebounceMs: number; ``` -Defined in: [packages/form-core/src/FormApi.ts:127](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L127) +Defined in: [packages/form-core/src/FormApi.ts:128](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L128) The default time in milliseconds that if set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds. @@ -57,7 +57,7 @@ The default time in milliseconds that if set to a number larger than 0, will deb optional onChange: FormValidateOrFn; ``` -Defined in: [packages/form-core/src/FormApi.ts:107](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L107) +Defined in: [packages/form-core/src/FormApi.ts:108](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L108) Optional function that checks the validity of your data whenever a value changes @@ -69,7 +69,7 @@ Optional function that checks the validity of your data whenever a value changes optional onChangeAsync: FormAsyncValidateOrFn; ``` -Defined in: [packages/form-core/src/FormApi.ts:111](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L111) +Defined in: [packages/form-core/src/FormApi.ts:112](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L112) Optional onChange asynchronous counterpart to onChange. Useful for more complex validation logic that might involve server requests. @@ -81,7 +81,7 @@ Optional onChange asynchronous counterpart to onChange. Useful for more complex optional onChangeAsyncDebounceMs: number; ``` -Defined in: [packages/form-core/src/FormApi.ts:115](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L115) +Defined in: [packages/form-core/src/FormApi.ts:116](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L116) The default time in milliseconds that if set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds. @@ -93,7 +93,7 @@ The default time in milliseconds that if set to a number larger than 0, will deb optional onMount: FormValidateOrFn; ``` -Defined in: [packages/form-core/src/FormApi.ts:103](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L103) +Defined in: [packages/form-core/src/FormApi.ts:104](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L104) Optional function that fires as soon as the component mounts. @@ -105,7 +105,7 @@ Optional function that fires as soon as the component mounts. optional onSubmit: FormValidateOrFn; ``` -Defined in: [packages/form-core/src/FormApi.ts:128](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L128) +Defined in: [packages/form-core/src/FormApi.ts:129](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L129) *** @@ -115,4 +115,4 @@ Defined in: [packages/form-core/src/FormApi.ts:128](https://github.com/TanStack/ optional onSubmitAsync: FormAsyncValidateOrFn; ``` -Defined in: [packages/form-core/src/FormApi.ts:129](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L129) +Defined in: [packages/form-core/src/FormApi.ts:130](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L130) diff --git a/docs/reference/type-aliases/baseformstate.md b/docs/reference/type-aliases/baseformstate.md index 151fd0048..b34b491c0 100644 --- a/docs/reference/type-aliases/baseformstate.md +++ b/docs/reference/type-aliases/baseformstate.md @@ -9,7 +9,7 @@ title: BaseFormState type BaseFormState = object; ``` -Defined in: [packages/form-core/src/FormApi.ts:228](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L228) +Defined in: [packages/form-core/src/FormApi.ts:229](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L229) An object representing the current state of the form. diff --git a/docs/reference/type-aliases/derivedformstate.md b/docs/reference/type-aliases/derivedformstate.md index fc52afa2f..ac8d4803d 100644 --- a/docs/reference/type-aliases/derivedformstate.md +++ b/docs/reference/type-aliases/derivedformstate.md @@ -9,7 +9,7 @@ title: DerivedFormState type DerivedFormState = object; ``` -Defined in: [packages/form-core/src/FormApi.ts:272](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L272) +Defined in: [packages/form-core/src/FormApi.ts:273](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L273) ## Type Parameters diff --git a/docs/reference/type-aliases/fieldinfo.md b/docs/reference/type-aliases/fieldinfo.md index 2b3a375ba..6cc6ebab2 100644 --- a/docs/reference/type-aliases/fieldinfo.md +++ b/docs/reference/type-aliases/fieldinfo.md @@ -9,7 +9,7 @@ title: FieldInfo type FieldInfo = object; ``` -Defined in: [packages/form-core/src/FormApi.ts:206](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L206) +Defined in: [packages/form-core/src/FormApi.ts:207](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L207) An object representing the field information for a specific field within the form. diff --git a/docs/reference/type-aliases/fieldserrormapfromvalidator.md b/docs/reference/type-aliases/fieldserrormapfromvalidator.md index a6e543c07..98a27222b 100644 --- a/docs/reference/type-aliases/fieldserrormapfromvalidator.md +++ b/docs/reference/type-aliases/fieldserrormapfromvalidator.md @@ -9,7 +9,7 @@ title: FieldsErrorMapFromValidator type FieldsErrorMapFromValidator = Partial, ValidationErrorMap>>; ``` -Defined in: [packages/form-core/src/FormApi.ts:31](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L31) +Defined in: [packages/form-core/src/FormApi.ts:32](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L32) ## Type Parameters diff --git a/docs/reference/type-aliases/formstate.md b/docs/reference/type-aliases/formstate.md index 42e0e392c..85858015d 100644 --- a/docs/reference/type-aliases/formstate.md +++ b/docs/reference/type-aliases/formstate.md @@ -9,7 +9,7 @@ title: FormState type FormState = BaseFormState & DerivedFormState; ``` -Defined in: [packages/form-core/src/FormApi.ts:323](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L323) +Defined in: [packages/form-core/src/FormApi.ts:324](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L324) ## Type Parameters diff --git a/docs/reference/type-aliases/formvalidatefn.md b/docs/reference/type-aliases/formvalidatefn.md index 6c7b87224..16a31e848 100644 --- a/docs/reference/type-aliases/formvalidatefn.md +++ b/docs/reference/type-aliases/formvalidatefn.md @@ -9,7 +9,7 @@ title: FormValidateFn type FormValidateFn = (props) => FormValidationError; ``` -Defined in: [packages/form-core/src/FormApi.ts:35](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L35) +Defined in: [packages/form-core/src/FormApi.ts:36](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L36) ## Type Parameters diff --git a/docs/reference/type-aliases/formvalidator.md b/docs/reference/type-aliases/formvalidator.md index 8b5a07b19..1aa49177e 100644 --- a/docs/reference/type-aliases/formvalidator.md +++ b/docs/reference/type-aliases/formvalidator.md @@ -9,7 +9,7 @@ title: FormValidator type FormValidator = object; ``` -Defined in: [packages/form-core/src/FormApi.ts:68](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L68) +Defined in: [packages/form-core/src/FormApi.ts:69](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L69) ## Type Parameters diff --git a/docs/reference/type-aliases/validationmeta.md b/docs/reference/type-aliases/validationmeta.md index 3b882abf6..fdba89873 100644 --- a/docs/reference/type-aliases/validationmeta.md +++ b/docs/reference/type-aliases/validationmeta.md @@ -9,7 +9,7 @@ title: ValidationMeta type ValidationMeta = object; ``` -Defined in: [packages/form-core/src/FormApi.ts:196](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L196) +Defined in: [packages/form-core/src/FormApi.ts:197](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L197) An object representing the validation metadata for a field. Not intended for public usage.