@tanstack/form-core 0.42.1 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/FieldApi.cjs +17 -28
- package/dist/cjs/FieldApi.cjs.map +1 -1
- package/dist/cjs/FieldApi.d.cts +91 -79
- package/dist/cjs/FormApi.cjs +50 -53
- package/dist/cjs/FormApi.cjs.map +1 -1
- package/dist/cjs/FormApi.d.cts +74 -67
- package/dist/cjs/formOptions.cjs.map +1 -1
- package/dist/cjs/formOptions.d.cts +2 -3
- package/dist/cjs/index.cjs +2 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/mergeForm.cjs.map +1 -1
- package/dist/cjs/mergeForm.d.cts +1 -2
- package/dist/cjs/metaHelper.cjs.map +1 -1
- package/dist/cjs/metaHelper.d.cts +2 -3
- package/dist/cjs/standardSchemaValidator.cjs +24 -31
- package/dist/cjs/standardSchemaValidator.cjs.map +1 -1
- package/dist/cjs/standardSchemaValidator.d.cts +24 -4
- package/dist/cjs/types.d.cts +15 -27
- package/dist/cjs/util-types.d.cts +1 -0
- package/dist/cjs/utils.cjs +4 -0
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/cjs/utils.d.cts +4 -3
- package/dist/esm/FieldApi.d.ts +91 -79
- package/dist/esm/FieldApi.js +18 -29
- package/dist/esm/FieldApi.js.map +1 -1
- package/dist/esm/FormApi.d.ts +74 -67
- package/dist/esm/FormApi.js +52 -55
- package/dist/esm/FormApi.js.map +1 -1
- package/dist/esm/formOptions.d.ts +2 -3
- package/dist/esm/formOptions.js.map +1 -1
- package/dist/esm/index.js +4 -3
- package/dist/esm/mergeForm.d.ts +1 -2
- package/dist/esm/mergeForm.js.map +1 -1
- package/dist/esm/metaHelper.d.ts +2 -3
- package/dist/esm/metaHelper.js.map +1 -1
- package/dist/esm/standardSchemaValidator.d.ts +24 -4
- package/dist/esm/standardSchemaValidator.js +24 -31
- package/dist/esm/standardSchemaValidator.js.map +1 -1
- package/dist/esm/types.d.ts +15 -27
- package/dist/esm/util-types.d.ts +1 -0
- package/dist/esm/utils.d.ts +4 -3
- package/dist/esm/utils.js +4 -0
- package/dist/esm/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/FieldApi.ts +803 -273
- package/src/FormApi.ts +613 -183
- package/src/formOptions.ts +26 -4
- package/src/mergeForm.ts +5 -7
- package/src/metaHelper.ts +28 -6
- package/src/standardSchemaValidator.ts +47 -58
- package/src/types.ts +39 -34
- package/src/util-types.ts +2 -0
- package/src/utils.ts +15 -9
package/dist/cjs/FieldApi.d.cts
CHANGED
|
@@ -1,58 +1,66 @@
|
|
|
1
1
|
import { Derived } from '@tanstack/store';
|
|
2
|
-
import {
|
|
3
|
-
import { StandardSchemaV1 } from './standardSchemaValidator.cjs';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { DeepKeys, DeepValue, NoInfer, UnwrapOneLevelOfArray } from './util-types.cjs';
|
|
3
|
+
import { StandardSchemaV1, StandardSchemaV1Issue, TStandardSchemaValidatorValue } from './standardSchemaValidator.cjs';
|
|
4
|
+
import { FieldInfo, FormApi, FormAsyncValidateOrFn, FormValidateOrFn, UnwrapFormAsyncValidateOrFn, UnwrapFormValidateOrFn } from './FormApi.cjs';
|
|
5
|
+
import { UpdateMetaOptions, ValidationCause, ValidationError, ValidationErrorMap } from './types.cjs';
|
|
6
6
|
import { Updater } from './utils.cjs';
|
|
7
7
|
/**
|
|
8
8
|
* @private
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
type FieldErrorMapFromValidator<TFormData, TName extends DeepKeys<TFormData>, TData extends DeepValue<TFormData, TName>, TOnMount extends undefined | FieldValidateOrFn<TFormData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TFormData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TFormData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TFormData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TFormData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TFormData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TFormData, TName, TData>> = Partial<Record<DeepKeys<TFormData>, ValidationErrorMap<TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync>>>;
|
|
11
|
+
/**
|
|
12
|
+
* @private
|
|
13
|
+
*/
|
|
14
|
+
export type FieldValidateFn<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = (props: {
|
|
11
15
|
value: TData;
|
|
12
|
-
fieldApi: FieldApi<TParentData, TName,
|
|
13
|
-
}) =>
|
|
16
|
+
fieldApi: FieldApi<TParentData, TName, TData, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
17
|
+
}) => unknown;
|
|
14
18
|
/**
|
|
15
19
|
* @private
|
|
16
20
|
*/
|
|
17
|
-
export type FieldValidateOrFn<TParentData, TName extends DeepKeys<TParentData>,
|
|
21
|
+
export type FieldValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = FieldValidateFn<TParentData, TName, TData> | StandardSchemaV1<TData, unknown>;
|
|
22
|
+
export type UnwrapFieldValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, TValidateOrFn extends undefined | FieldValidateOrFn<any, any, any>, TFormValidateOrFn extends undefined | FormValidateOrFn<any>> = ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>] ? TName extends keyof TStandardOut ? StandardSchemaV1Issue[] : undefined : undefined) | (UnwrapFormValidateOrFn<TFormValidateOrFn> extends infer TFormValidateVal ? TFormValidateVal extends {
|
|
23
|
+
fields: any;
|
|
24
|
+
} ? TName extends keyof TFormValidateVal['fields'] ? TFormValidateVal['fields'][TName] : undefined : undefined : never) | ([TValidateOrFn] extends [FieldValidateFn<any, any, any>] ? ReturnType<TValidateOrFn> : [TValidateOrFn] extends [StandardSchemaV1<any, any>] ? StandardSchemaV1Issue[] : undefined);
|
|
18
25
|
/**
|
|
19
26
|
* @private
|
|
20
27
|
*/
|
|
21
|
-
export type FieldValidateAsyncFn<TParentData, TName extends DeepKeys<TParentData>,
|
|
28
|
+
export type FieldValidateAsyncFn<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = (options: {
|
|
22
29
|
value: TData;
|
|
23
|
-
fieldApi: FieldApi<TParentData, TName,
|
|
30
|
+
fieldApi: FieldApi<TParentData, TName, TData, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
24
31
|
signal: AbortSignal;
|
|
25
|
-
}) =>
|
|
32
|
+
}) => unknown | Promise<unknown>;
|
|
26
33
|
/**
|
|
27
34
|
* @private
|
|
28
35
|
*/
|
|
29
|
-
export type FieldAsyncValidateOrFn<TParentData, TName extends DeepKeys<TParentData>,
|
|
36
|
+
export type FieldAsyncValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = FieldValidateAsyncFn<TParentData, TName, TData> | StandardSchemaV1<TData, unknown>;
|
|
37
|
+
export type UnwrapFieldAsyncValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, TValidateOrFn extends undefined | FieldAsyncValidateOrFn<any, any, any>, TFormValidateOrFn extends undefined | FormAsyncValidateOrFn<any>> = ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>] ? TName extends keyof TStandardOut ? StandardSchemaV1Issue[] : undefined : undefined) | (UnwrapFormAsyncValidateOrFn<TFormValidateOrFn> extends infer TFormValidateVal ? TFormValidateVal extends {
|
|
38
|
+
fields: any;
|
|
39
|
+
} ? TName extends keyof TFormValidateVal['fields'] ? TFormValidateVal['fields'][TName] : undefined : undefined : never) | ([TValidateOrFn] extends [FieldValidateAsyncFn<any, any, any>] ? Awaited<ReturnType<TValidateOrFn>> : [TValidateOrFn] extends [StandardSchemaV1<any, any>] ? StandardSchemaV1Issue[] : undefined);
|
|
30
40
|
/**
|
|
31
41
|
* @private
|
|
32
42
|
*/
|
|
33
|
-
export type FieldListenerFn<TParentData, TName extends DeepKeys<TParentData>,
|
|
43
|
+
export type FieldListenerFn<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = (props: {
|
|
34
44
|
value: TData;
|
|
35
|
-
fieldApi: FieldApi<TParentData, TName,
|
|
45
|
+
fieldApi: FieldApi<TParentData, TName, TData, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
36
46
|
}) => void;
|
|
37
|
-
export interface FieldValidators<TParentData, TName extends DeepKeys<TParentData>,
|
|
47
|
+
export interface FieldValidators<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>> {
|
|
38
48
|
/**
|
|
39
|
-
* An optional function that
|
|
49
|
+
* An optional function, that runs on the mount event of input.
|
|
40
50
|
*/
|
|
41
|
-
onMount?:
|
|
51
|
+
onMount?: TOnMount;
|
|
42
52
|
/**
|
|
43
|
-
* An optional
|
|
44
|
-
* If `validatorAdapter` is passed, this may also accept a property from the respective adapter
|
|
53
|
+
* An optional function, that runs on the change event of input.
|
|
45
54
|
*
|
|
46
|
-
* @example z.string().min(1)
|
|
55
|
+
* @example z.string().min(1)
|
|
47
56
|
*/
|
|
48
|
-
onChange?:
|
|
57
|
+
onChange?: TOnChange;
|
|
49
58
|
/**
|
|
50
|
-
* An optional property similar to `onChange` but async validation
|
|
51
|
-
* is passed, this may also accept a property from the respective adapter
|
|
59
|
+
* An optional property similar to `onChange` but async validation
|
|
52
60
|
*
|
|
53
|
-
* @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })
|
|
61
|
+
* @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })
|
|
54
62
|
*/
|
|
55
|
-
onChangeAsync?:
|
|
63
|
+
onChangeAsync?: TOnChangeAsync;
|
|
56
64
|
/**
|
|
57
65
|
* An optional number to represent how long the `onChangeAsync` should wait before running
|
|
58
66
|
*
|
|
@@ -65,18 +73,16 @@ export interface FieldValidators<TParentData, TName extends DeepKeys<TParentData
|
|
|
65
73
|
onChangeListenTo?: DeepKeys<TParentData>[];
|
|
66
74
|
/**
|
|
67
75
|
* An optional function, that runs on the blur event of input.
|
|
68
|
-
* If `validatorAdapter` is passed, this may also accept a property from the respective adapter
|
|
69
76
|
*
|
|
70
|
-
* @example z.string().min(1)
|
|
77
|
+
* @example z.string().min(1)
|
|
71
78
|
*/
|
|
72
|
-
onBlur?:
|
|
79
|
+
onBlur?: TOnBlur;
|
|
73
80
|
/**
|
|
74
|
-
* An optional property similar to `onBlur` but async validation.
|
|
75
|
-
* is passed, this may also accept a property from the respective adapter
|
|
81
|
+
* An optional property similar to `onBlur` but async validation.
|
|
76
82
|
*
|
|
77
|
-
* @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })
|
|
83
|
+
* @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })
|
|
78
84
|
*/
|
|
79
|
-
onBlurAsync?:
|
|
85
|
+
onBlurAsync?: TOnBlurAsync;
|
|
80
86
|
/**
|
|
81
87
|
* An optional number to represent how long the `onBlurAsync` should wait before running
|
|
82
88
|
*
|
|
@@ -89,29 +95,27 @@ export interface FieldValidators<TParentData, TName extends DeepKeys<TParentData
|
|
|
89
95
|
onBlurListenTo?: DeepKeys<TParentData>[];
|
|
90
96
|
/**
|
|
91
97
|
* An optional function, that runs on the submit event of form.
|
|
92
|
-
* If `validatorAdapter` is passed, this may also accept a property from the respective adapter
|
|
93
98
|
*
|
|
94
|
-
* @example z.string().min(1)
|
|
99
|
+
* @example z.string().min(1)
|
|
95
100
|
*/
|
|
96
|
-
onSubmit?:
|
|
101
|
+
onSubmit?: TOnSubmit;
|
|
97
102
|
/**
|
|
98
|
-
* An optional property similar to `onSubmit` but async validation.
|
|
99
|
-
* is passed, this may also accept a property from the respective adapter
|
|
103
|
+
* An optional property similar to `onSubmit` but async validation.
|
|
100
104
|
*
|
|
101
|
-
* @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })
|
|
105
|
+
* @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })
|
|
102
106
|
*/
|
|
103
|
-
onSubmitAsync?:
|
|
107
|
+
onSubmitAsync?: TOnSubmitAsync;
|
|
104
108
|
}
|
|
105
|
-
export interface FieldListeners<TParentData, TName extends DeepKeys<TParentData>,
|
|
106
|
-
onChange?: FieldListenerFn<TParentData, TName,
|
|
107
|
-
onBlur?: FieldListenerFn<TParentData, TName,
|
|
108
|
-
onMount?: FieldListenerFn<TParentData, TName,
|
|
109
|
-
onSubmit?: FieldListenerFn<TParentData, TName,
|
|
109
|
+
export interface FieldListeners<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> {
|
|
110
|
+
onChange?: FieldListenerFn<TParentData, TName, TData>;
|
|
111
|
+
onBlur?: FieldListenerFn<TParentData, TName, TData>;
|
|
112
|
+
onMount?: FieldListenerFn<TParentData, TName, TData>;
|
|
113
|
+
onSubmit?: FieldListenerFn<TParentData, TName, TData>;
|
|
110
114
|
}
|
|
111
115
|
/**
|
|
112
116
|
* An object type representing the options for a field in a form.
|
|
113
117
|
*/
|
|
114
|
-
export interface FieldOptions<TParentData, TName extends DeepKeys<TParentData>,
|
|
118
|
+
export interface FieldOptions<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>> {
|
|
115
119
|
/**
|
|
116
120
|
* The field name. The type will be `DeepKeys<TParentData>` to ensure your name is a deep key of the parent dataset.
|
|
117
121
|
*/
|
|
@@ -128,30 +132,30 @@ export interface FieldOptions<TParentData, TName extends DeepKeys<TParentData>,
|
|
|
128
132
|
* If `true`, always run async validation, even if there are errors emitted during synchronous validation.
|
|
129
133
|
*/
|
|
130
134
|
asyncAlways?: boolean;
|
|
131
|
-
/**
|
|
132
|
-
* A validator provided by an extension, like `yupValidator` from `@tanstack/yup-form-adapter`
|
|
133
|
-
*/
|
|
134
|
-
validatorAdapter?: TFieldValidator;
|
|
135
135
|
/**
|
|
136
136
|
* A list of validators to pass to the field
|
|
137
137
|
*/
|
|
138
|
-
validators?: FieldValidators<TParentData, TName,
|
|
138
|
+
validators?: FieldValidators<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync>;
|
|
139
139
|
/**
|
|
140
140
|
* An optional object with default metadata for the field.
|
|
141
141
|
*/
|
|
142
|
-
defaultMeta?: Partial<FieldMeta
|
|
142
|
+
defaultMeta?: Partial<FieldMeta<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, any, any, any, any, any, any, any>>;
|
|
143
143
|
/**
|
|
144
144
|
* A list of listeners which attach to the corresponding events
|
|
145
145
|
*/
|
|
146
|
-
listeners?: FieldListeners<TParentData, TName,
|
|
146
|
+
listeners?: FieldListeners<TParentData, TName, TData>;
|
|
147
|
+
/**
|
|
148
|
+
* Disable the `flat(1)` operation on `field.errors`. This is useful if you want to keep the error structure as is. Not suggested for most use-cases.
|
|
149
|
+
*/
|
|
150
|
+
disableErrorFlat?: boolean;
|
|
147
151
|
}
|
|
148
152
|
/**
|
|
149
153
|
* An object type representing the required options for the FieldApi class.
|
|
150
154
|
*/
|
|
151
|
-
export interface FieldApiOptions<TParentData, TName extends DeepKeys<TParentData>,
|
|
152
|
-
form: FormApi<TParentData,
|
|
155
|
+
export interface FieldApiOptions<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>> extends FieldOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync> {
|
|
156
|
+
form: FormApi<TParentData, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer>;
|
|
153
157
|
}
|
|
154
|
-
export type FieldMetaBase = {
|
|
158
|
+
export type FieldMetaBase<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>> = {
|
|
155
159
|
/**
|
|
156
160
|
* A flag indicating whether the field has been touched.
|
|
157
161
|
*/
|
|
@@ -167,30 +171,33 @@ export type FieldMetaBase = {
|
|
|
167
171
|
/**
|
|
168
172
|
* A map of errors related to the field value.
|
|
169
173
|
*/
|
|
170
|
-
errorMap: ValidationErrorMap
|
|
174
|
+
errorMap: ValidationErrorMap<UnwrapFieldValidateOrFn<TParentData, TName, TOnMount, TFormOnMount>, UnwrapFieldValidateOrFn<TParentData, TName, TOnChange, TFormOnChange>, UnwrapFieldAsyncValidateOrFn<TParentData, TName, TOnChangeAsync, TFormOnChangeAsync>, UnwrapFieldValidateOrFn<TParentData, TName, TOnBlur, TFormOnBlur>, UnwrapFieldAsyncValidateOrFn<TParentData, TName, TOnBlurAsync, TFormOnBlurAsync>, UnwrapFieldValidateOrFn<TParentData, TName, TOnSubmit, TFormOnSubmit>, UnwrapFieldAsyncValidateOrFn<TParentData, TName, TOnSubmitAsync, TFormOnSubmitAsync>>;
|
|
171
175
|
/**
|
|
172
176
|
* A flag indicating whether the field is currently being validated.
|
|
173
177
|
*/
|
|
174
178
|
isValidating: boolean;
|
|
175
179
|
};
|
|
176
|
-
export type
|
|
180
|
+
export type AnyFieldMetaBase = FieldMetaBase<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
181
|
+
export type FieldMetaDerived<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>> = {
|
|
177
182
|
/**
|
|
178
183
|
* An array of errors related to the field value.
|
|
179
184
|
*/
|
|
180
|
-
errors:
|
|
185
|
+
errors: Array<UnwrapOneLevelOfArray<UnwrapFieldValidateOrFn<TParentData, TName, TOnMount, TFormOnMount>> | UnwrapOneLevelOfArray<UnwrapFieldValidateOrFn<TParentData, TName, TOnChange, TFormOnChange>> | UnwrapOneLevelOfArray<UnwrapFieldAsyncValidateOrFn<TParentData, TName, TOnChangeAsync, TFormOnChangeAsync>> | UnwrapOneLevelOfArray<UnwrapFieldValidateOrFn<TParentData, TName, TOnBlur, TFormOnBlur>> | UnwrapOneLevelOfArray<UnwrapFieldAsyncValidateOrFn<TParentData, TName, TOnBlurAsync, TFormOnBlurAsync>> | UnwrapOneLevelOfArray<UnwrapFieldValidateOrFn<TParentData, TName, TOnSubmit, TFormOnSubmit>> | UnwrapOneLevelOfArray<UnwrapFieldAsyncValidateOrFn<TParentData, TName, TOnSubmitAsync, TFormOnSubmitAsync>>>;
|
|
181
186
|
/**
|
|
182
187
|
* A flag that is `true` if the field's value has not been modified by the user. Opposite of `isDirty`.
|
|
183
188
|
*/
|
|
184
189
|
isPristine: boolean;
|
|
185
190
|
};
|
|
191
|
+
export type AnyFieldMetaDerived = FieldMetaDerived<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
186
192
|
/**
|
|
187
193
|
* An object type representing the metadata of a field in a form.
|
|
188
194
|
*/
|
|
189
|
-
export type FieldMeta = FieldMetaBase & FieldMetaDerived
|
|
195
|
+
export type FieldMeta<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>> = FieldMetaBase<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync> & FieldMetaDerived<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>;
|
|
196
|
+
export type AnyFieldMeta = FieldMeta<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
190
197
|
/**
|
|
191
198
|
* An object type representing the state of a field.
|
|
192
199
|
*/
|
|
193
|
-
export type FieldState<TData
|
|
200
|
+
export type FieldState<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>> = {
|
|
194
201
|
/**
|
|
195
202
|
* The current value of the field.
|
|
196
203
|
*/
|
|
@@ -198,8 +205,14 @@ export type FieldState<TData> = {
|
|
|
198
205
|
/**
|
|
199
206
|
* The current metadata of the field.
|
|
200
207
|
*/
|
|
201
|
-
meta: FieldMeta
|
|
208
|
+
meta: FieldMeta<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>;
|
|
202
209
|
};
|
|
210
|
+
/**
|
|
211
|
+
* @public
|
|
212
|
+
*
|
|
213
|
+
* A type representing the Field API with all generics set to `any` for convenience.
|
|
214
|
+
*/
|
|
215
|
+
export type AnyFieldApi = FieldApi<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
|
|
203
216
|
/**
|
|
204
217
|
* A class representing the API for managing a form field.
|
|
205
218
|
*
|
|
@@ -209,11 +222,11 @@ export type FieldState<TData> = {
|
|
|
209
222
|
* However, if you need to create a new instance manually, you can do so by calling
|
|
210
223
|
* the `new FieldApi` constructor.
|
|
211
224
|
*/
|
|
212
|
-
export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>,
|
|
225
|
+
export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>> {
|
|
213
226
|
/**
|
|
214
227
|
* A reference to the form API instance.
|
|
215
228
|
*/
|
|
216
|
-
form: FieldApiOptions<TParentData, TName,
|
|
229
|
+
form: FieldApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer>['form'];
|
|
217
230
|
/**
|
|
218
231
|
* The field name.
|
|
219
232
|
*/
|
|
@@ -221,32 +234,30 @@ export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>,
|
|
|
221
234
|
/**
|
|
222
235
|
* The field options.
|
|
223
236
|
*/
|
|
224
|
-
options: FieldApiOptions<TParentData, TName,
|
|
237
|
+
options: FieldApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer>;
|
|
225
238
|
/**
|
|
226
239
|
* The field state store.
|
|
227
240
|
*/
|
|
228
|
-
store: Derived<FieldState<TData>>;
|
|
241
|
+
store: Derived<FieldState<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>>;
|
|
229
242
|
/**
|
|
230
243
|
* The current field state.
|
|
231
244
|
*/
|
|
232
|
-
get state(): FieldState<TData>;
|
|
245
|
+
get state(): FieldState<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>;
|
|
233
246
|
timeoutIds: Record<ValidationCause, ReturnType<typeof setTimeout> | null>;
|
|
234
247
|
/**
|
|
235
248
|
* Initializes a new `FieldApi` instance.
|
|
236
249
|
*/
|
|
237
|
-
constructor(opts: FieldApiOptions<TParentData, TName,
|
|
250
|
+
constructor(opts: FieldApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer>);
|
|
238
251
|
/**
|
|
239
252
|
* @private
|
|
240
253
|
*/
|
|
241
|
-
runValidator<TValue extends {
|
|
242
|
-
|
|
243
|
-
fieldApi: FieldApi<any, any, any, any>;
|
|
244
|
-
validationSource: ValidationSource;
|
|
254
|
+
runValidator<TValue extends TStandardSchemaValidatorValue<TData> & {
|
|
255
|
+
fieldApi: AnyFieldApi;
|
|
245
256
|
}, TType extends 'validate' | 'validateAsync'>(props: {
|
|
246
|
-
validate: TType extends 'validate' ? FieldValidateOrFn<any, any, any
|
|
257
|
+
validate: TType extends 'validate' ? FieldValidateOrFn<any, any, any> : FieldAsyncValidateOrFn<any, any, any>;
|
|
247
258
|
value: TValue;
|
|
248
259
|
type: TType;
|
|
249
|
-
}):
|
|
260
|
+
}): unknown;
|
|
250
261
|
/**
|
|
251
262
|
* Mounts the field instance to the form.
|
|
252
263
|
*/
|
|
@@ -254,7 +265,7 @@ export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>,
|
|
|
254
265
|
/**
|
|
255
266
|
* Updates the field instance with new options.
|
|
256
267
|
*/
|
|
257
|
-
update: (opts: FieldApiOptions<TParentData, TName,
|
|
268
|
+
update: (opts: FieldApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer>) => void;
|
|
258
269
|
/**
|
|
259
270
|
* Gets the current field value.
|
|
260
271
|
* @deprecated Use `field.state.value` instead.
|
|
@@ -264,15 +275,15 @@ export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>,
|
|
|
264
275
|
* Sets the field value and run the `change` validator.
|
|
265
276
|
*/
|
|
266
277
|
setValue: (updater: Updater<TData>, options?: UpdateMetaOptions) => void;
|
|
267
|
-
getMeta: () => FieldMeta
|
|
278
|
+
getMeta: () => FieldMeta<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>;
|
|
268
279
|
/**
|
|
269
280
|
* Sets the field metadata.
|
|
270
281
|
*/
|
|
271
|
-
setMeta: (updater: Updater<FieldMeta
|
|
282
|
+
setMeta: (updater: Updater<FieldMeta<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync>>) => void;
|
|
272
283
|
/**
|
|
273
284
|
* Gets the field information object.
|
|
274
285
|
*/
|
|
275
|
-
getInfo: () => FieldInfo<TParentData
|
|
286
|
+
getInfo: () => FieldInfo<TParentData>;
|
|
276
287
|
/**
|
|
277
288
|
* Pushes a new value to the field.
|
|
278
289
|
*/
|
|
@@ -300,7 +311,7 @@ export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>,
|
|
|
300
311
|
/**
|
|
301
312
|
* @private
|
|
302
313
|
*/
|
|
303
|
-
getLinkedFields: (cause: ValidationCause) =>
|
|
314
|
+
getLinkedFields: (cause: ValidationCause) => AnyFieldApi[];
|
|
304
315
|
/**
|
|
305
316
|
* @private
|
|
306
317
|
*/
|
|
@@ -310,7 +321,7 @@ export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>,
|
|
|
310
321
|
/**
|
|
311
322
|
* @private
|
|
312
323
|
*/
|
|
313
|
-
validateAsync: (cause: ValidationCause, formValidationResultPromise: Promise<
|
|
324
|
+
validateAsync: (cause: ValidationCause, formValidationResultPromise: Promise<FieldErrorMapFromValidator<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync>>) => Promise<unknown[]>;
|
|
314
325
|
/**
|
|
315
326
|
* Validates the field value.
|
|
316
327
|
*/
|
|
@@ -330,3 +341,4 @@ export declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>,
|
|
|
330
341
|
*/
|
|
331
342
|
setErrorMap(errorMap: ValidationErrorMap): void;
|
|
332
343
|
}
|
|
344
|
+
export {};
|
package/dist/cjs/FormApi.cjs
CHANGED
|
@@ -22,9 +22,6 @@ function getDefaultFormState(defaultState) {
|
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
const isFormValidationError = (error) => {
|
|
26
|
-
return typeof error === "object";
|
|
27
|
-
};
|
|
28
25
|
class FormApi {
|
|
29
26
|
/**
|
|
30
27
|
* Constructs a new `FormApi` instance with the given form options.
|
|
@@ -91,19 +88,21 @@ class FormApi {
|
|
|
91
88
|
this.validateAllFields = async (cause) => {
|
|
92
89
|
const fieldValidationPromises = [];
|
|
93
90
|
store.batch(() => {
|
|
94
|
-
void Object.values(this.fieldInfo).forEach(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
()
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
field.instance.
|
|
91
|
+
void Object.values(this.fieldInfo).forEach(
|
|
92
|
+
(field) => {
|
|
93
|
+
if (!field.instance) return;
|
|
94
|
+
const fieldInstance = field.instance;
|
|
95
|
+
fieldValidationPromises.push(
|
|
96
|
+
// Remember, `validate` is either a sync operation or a promise
|
|
97
|
+
Promise.resolve().then(
|
|
98
|
+
() => fieldInstance.validate(cause, { skipFormValidation: true })
|
|
99
|
+
)
|
|
100
|
+
);
|
|
101
|
+
if (!field.instance.state.meta.isTouched) {
|
|
102
|
+
field.instance.setMeta((prev) => ({ ...prev, isTouched: true }));
|
|
103
|
+
}
|
|
105
104
|
}
|
|
106
|
-
|
|
105
|
+
);
|
|
107
106
|
});
|
|
108
107
|
const fieldErrorMapMap = await Promise.all(fieldValidationPromises);
|
|
109
108
|
return fieldErrorMapMap.flat();
|
|
@@ -342,13 +341,15 @@ class FormApi {
|
|
|
342
341
|
return;
|
|
343
342
|
}
|
|
344
343
|
store.batch(() => {
|
|
345
|
-
void Object.values(this.fieldInfo).forEach(
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
344
|
+
void Object.values(this.fieldInfo).forEach(
|
|
345
|
+
(field) => {
|
|
346
|
+
var _a3, _b2, _c2;
|
|
347
|
+
(_c2 = (_b2 = (_a3 = field.instance) == null ? void 0 : _a3.options.listeners) == null ? void 0 : _b2.onSubmit) == null ? void 0 : _c2.call(_b2, {
|
|
348
|
+
value: field.instance.state.value,
|
|
349
|
+
fieldApi: field.instance
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
);
|
|
352
353
|
});
|
|
353
354
|
try {
|
|
354
355
|
await ((_f = (_e = this.options).onSubmit) == null ? void 0 : _f.call(_e, { value: this.state.values, formApi: this }));
|
|
@@ -534,13 +535,13 @@ class FormApi {
|
|
|
534
535
|
this.baseStore = new store.Store(
|
|
535
536
|
getDefaultFormState({
|
|
536
537
|
...opts == null ? void 0 : opts.defaultState,
|
|
537
|
-
values: (opts == null ? void 0 : opts.defaultValues) ?? ((_a = opts == null ? void 0 : opts.defaultState) == null ? void 0 : _a.values)
|
|
538
|
-
isFormValid: true
|
|
538
|
+
values: (opts == null ? void 0 : opts.defaultValues) ?? ((_a = opts == null ? void 0 : opts.defaultState) == null ? void 0 : _a.values)
|
|
539
539
|
})
|
|
540
540
|
);
|
|
541
541
|
this.fieldMetaDerived = new store.Derived({
|
|
542
542
|
deps: [this.baseStore],
|
|
543
543
|
fn: ({ prevDepVals, currDepVals, prevVal: _prevVal }) => {
|
|
544
|
+
var _a2;
|
|
544
545
|
const prevVal = _prevVal;
|
|
545
546
|
const prevBaseStore = prevDepVals == null ? void 0 : prevDepVals[0];
|
|
546
547
|
const currBaseStore = currDepVals[0];
|
|
@@ -557,6 +558,12 @@ class FormApi {
|
|
|
557
558
|
fieldErrors = Object.values(currBaseVal.errorMap ?? {}).filter(
|
|
558
559
|
(val) => val !== void 0
|
|
559
560
|
);
|
|
561
|
+
const fieldInstance = (_a2 = this.getFieldInfo(fieldName)) == null ? void 0 : _a2.instance;
|
|
562
|
+
if (fieldInstance && !fieldInstance.options.disableErrorFlat) {
|
|
563
|
+
fieldErrors = fieldErrors == null ? void 0 : fieldErrors.flat(
|
|
564
|
+
1
|
|
565
|
+
);
|
|
566
|
+
}
|
|
560
567
|
}
|
|
561
568
|
const isFieldPristine = !currBaseVal.isDirty;
|
|
562
569
|
if (prevFieldInfo && prevFieldInfo.isPristine === isFieldPristine && prevFieldInfo.errors === fieldErrors && currBaseVal === prevBaseVal) {
|
|
@@ -609,20 +616,15 @@ class FormApi {
|
|
|
609
616
|
const isValidating = !!isFieldsValidating;
|
|
610
617
|
let errors = (prevVal == null ? void 0 : prevVal.errors) ?? [];
|
|
611
618
|
if (!prevBaseStore || currBaseStore.errorMap !== prevBaseStore.errorMap) {
|
|
612
|
-
errors = Object.values(currBaseStore.errorMap).reduce(
|
|
613
|
-
(
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
prev.push(curr);
|
|
617
|
-
return prev;
|
|
618
|
-
} else if (curr && isFormValidationError(curr)) {
|
|
619
|
-
prev.push(curr.form);
|
|
620
|
-
return prev;
|
|
621
|
-
}
|
|
619
|
+
errors = Object.values(currBaseStore.errorMap).reduce((prev, curr) => {
|
|
620
|
+
if (curr === void 0) return prev;
|
|
621
|
+
if (curr && utils.isGlobalFormValidationError(curr)) {
|
|
622
|
+
prev.push(curr.form);
|
|
622
623
|
return prev;
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
|
|
624
|
+
}
|
|
625
|
+
prev.push(curr);
|
|
626
|
+
return prev;
|
|
627
|
+
}, []);
|
|
626
628
|
}
|
|
627
629
|
const isFormValid = errors.length === 0;
|
|
628
630
|
const isValid = isFieldsValid && isFormValid;
|
|
@@ -672,12 +674,8 @@ class FormApi {
|
|
|
672
674
|
* @private
|
|
673
675
|
*/
|
|
674
676
|
runValidator(props) {
|
|
675
|
-
const adapter = this.options.validatorAdapter;
|
|
676
|
-
if (adapter && (typeof props.validate !== "function" || "~standard" in props.validate)) {
|
|
677
|
-
return adapter()[props.type](props.value, props.validate);
|
|
678
|
-
}
|
|
679
677
|
if (standardSchemaValidator.isStandardSchemaValidator(props.validate)) {
|
|
680
|
-
return standardSchemaValidator.
|
|
678
|
+
return standardSchemaValidator.standardSchemaValidators[props.type](
|
|
681
679
|
props.value,
|
|
682
680
|
props.validate
|
|
683
681
|
);
|
|
@@ -688,25 +686,24 @@ class FormApi {
|
|
|
688
686
|
* Updates the form's errorMap
|
|
689
687
|
*/
|
|
690
688
|
setErrorMap(errorMap) {
|
|
691
|
-
this.baseStore.setState(
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
689
|
+
this.baseStore.setState(
|
|
690
|
+
(prev) => ({
|
|
691
|
+
...prev,
|
|
692
|
+
errorMap: {
|
|
693
|
+
...prev.errorMap,
|
|
694
|
+
...errorMap
|
|
695
|
+
}
|
|
696
|
+
})
|
|
697
|
+
);
|
|
698
698
|
}
|
|
699
699
|
}
|
|
700
700
|
function normalizeError(rawError) {
|
|
701
701
|
if (rawError) {
|
|
702
|
-
if (
|
|
702
|
+
if (utils.isGlobalFormValidationError(rawError)) {
|
|
703
703
|
const formError = normalizeError(rawError.form).formError;
|
|
704
704
|
const fieldErrors = rawError.fields;
|
|
705
705
|
return { formError, fieldErrors };
|
|
706
706
|
}
|
|
707
|
-
if (typeof rawError !== "string") {
|
|
708
|
-
return { formError: "Invalid Form Values" };
|
|
709
|
-
}
|
|
710
707
|
return { formError: rawError };
|
|
711
708
|
}
|
|
712
709
|
return { formError: void 0 };
|