@tanstack/form-core 0.34.0 → 0.34.3
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 +5 -1
- package/dist/cjs/FieldApi.cjs.map +1 -1
- package/dist/cjs/FieldApi.d.cts +1 -0
- package/dist/cjs/FormApi.cjs +1 -0
- package/dist/cjs/FormApi.cjs.map +1 -1
- package/dist/cjs/mergeForm.cjs +1 -4
- package/dist/cjs/mergeForm.cjs.map +1 -1
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/esm/FieldApi.d.ts +1 -0
- package/dist/esm/FieldApi.js +5 -1
- package/dist/esm/FieldApi.js.map +1 -1
- package/dist/esm/FormApi.js +1 -0
- package/dist/esm/FormApi.js.map +1 -1
- package/dist/esm/mergeForm.js +1 -4
- package/dist/esm/mergeForm.js.map +1 -1
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/FieldApi.ts +7 -2
- package/src/FormApi.ts +1 -0
- package/src/mergeForm.ts +3 -4
package/src/FieldApi.ts
CHANGED
|
@@ -432,6 +432,7 @@ export class FieldApi<
|
|
|
432
432
|
* @private
|
|
433
433
|
*/
|
|
434
434
|
prevState!: FieldState<TData>
|
|
435
|
+
timeoutIds: Record<ValidationCause, ReturnType<typeof setTimeout> | null>
|
|
435
436
|
|
|
436
437
|
/**
|
|
437
438
|
* Initializes a new `FieldApi` instance.
|
|
@@ -447,7 +448,7 @@ export class FieldApi<
|
|
|
447
448
|
) {
|
|
448
449
|
this.form = opts.form as never
|
|
449
450
|
this.name = opts.name as never
|
|
450
|
-
|
|
451
|
+
this.timeoutIds = {} as Record<ValidationCause, never>
|
|
451
452
|
if (opts.defaultValue !== undefined) {
|
|
452
453
|
this.form.setFieldValue(this.name, opts.defaultValue as never, {
|
|
453
454
|
dontUpdateMeta: true,
|
|
@@ -891,7 +892,11 @@ export class FieldApi<
|
|
|
891
892
|
let rawError!: ValidationError | undefined
|
|
892
893
|
try {
|
|
893
894
|
rawError = await new Promise((rawResolve, rawReject) => {
|
|
894
|
-
|
|
895
|
+
if (this.timeoutIds[validateObj.cause]) {
|
|
896
|
+
clearTimeout(this.timeoutIds[validateObj.cause]!)
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
this.timeoutIds[validateObj.cause] = setTimeout(async () => {
|
|
895
900
|
if (controller.signal.aborted) return rawResolve(undefined)
|
|
896
901
|
try {
|
|
897
902
|
rawResolve(
|
package/src/FormApi.ts
CHANGED
|
@@ -584,6 +584,7 @@ export class FormApi<
|
|
|
584
584
|
const fieldInstance = field.instance
|
|
585
585
|
// Validate the field
|
|
586
586
|
fieldValidationPromises.push(
|
|
587
|
+
// Remember, `validate` is either a sync operation or a promise
|
|
587
588
|
Promise.resolve().then(() => fieldInstance.validate(cause)),
|
|
588
589
|
)
|
|
589
590
|
// If any fields are not touched
|
package/src/mergeForm.ts
CHANGED
|
@@ -12,11 +12,10 @@ export function mutateMergeDeep(target: object, source: object): object {
|
|
|
12
12
|
for (const key of keySet) {
|
|
13
13
|
const targetKey = key as never as keyof typeof target
|
|
14
14
|
const sourceKey = key as never as keyof typeof source
|
|
15
|
+
|
|
15
16
|
if (Array.isArray(target[targetKey]) && Array.isArray(source[sourceKey])) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
...(source[sourceKey] as []),
|
|
19
|
-
] as never
|
|
17
|
+
// always use the source array to prevent array fields from multiplying
|
|
18
|
+
target[targetKey] = source[sourceKey] as [] as never
|
|
20
19
|
} else if (
|
|
21
20
|
typeof target[targetKey] === 'object' &&
|
|
22
21
|
typeof source[sourceKey] === 'object'
|