@@ -4,7 +4,12 @@ import {
4
4
standardSchemaValidator ,
5
5
} from './standardSchemaValidator'
6
6
import { getAsyncValidatorArray , getBy , getSyncValidatorArray } from './utils'
7
- import type { FieldInfo , FieldsErrorMapFromValidator , FormApi } from './FormApi'
7
+ import type {
8
+ FieldInfo ,
9
+ FieldsErrorMapFromValidator ,
10
+ FormApi ,
11
+ FormState ,
12
+ } from './FormApi'
8
13
import type { StandardSchemaV1 } from './standardSchemaValidator'
9
14
import type {
10
15
UpdateMetaOptions ,
@@ -116,6 +121,13 @@ export type FieldListenerFn<
116
121
fieldApi : FieldApi < TParentData , TName , TFieldValidator , TFormValidator , TData >
117
122
} ) => void
118
123
124
+ /**
125
+ * @private
126
+ */
127
+ export type FieldMetaFn < TFormData , TMetaExtension extends object > = (
128
+ props : FormState < TFormData > ,
129
+ ) => FieldMetaExtension < TMetaExtension >
130
+
119
131
export interface FieldValidators <
120
132
TParentData ,
121
133
TName extends DeepKeys < TParentData > ,
@@ -285,6 +297,7 @@ export interface FieldListeners<
285
297
export interface FieldOptions <
286
298
TParentData ,
287
299
TName extends DeepKeys < TParentData > ,
300
+ TMetaExtension extends object ,
288
301
TFieldValidator extends
289
302
| Validator < DeepValue < TParentData , TName > , unknown >
290
303
| undefined = undefined ,
@@ -337,6 +350,7 @@ export interface FieldOptions<
337
350
TFormValidator ,
338
351
TData
339
352
>
353
+ meta ?: FieldMetaFn < FormData , TMetaExtension >
340
354
}
341
355
342
356
/**
@@ -396,10 +410,15 @@ export type FieldMetaDerived = {
396
410
isPristine : boolean
397
411
}
398
412
413
+ export type FieldMetaExtension < TMetaExtension extends object = { } > =
414
+ TMetaExtension
415
+
399
416
/**
400
417
* An object type representing the metadata of a field in a form.
401
418
*/
402
- export type FieldMeta = FieldMetaBase & FieldMetaDerived
419
+ export type FieldMeta < TMetaExtension extends object = { } > = FieldMetaBase &
420
+ FieldMetaDerived &
421
+ FieldMetaExtension < TMetaExtension >
403
422
404
423
/**
405
424
* An object type representing the state of a field.
@@ -597,6 +616,11 @@ export class FieldApi<
597
616
fieldApi : this ,
598
617
} )
599
618
619
+ this . setMeta ( ( prev ) => ( {
620
+ ...prev ,
621
+ ...this . options . meta ?.( this . form . state ) ,
622
+ } ) )
623
+
600
624
return cleanup
601
625
}
602
626
@@ -661,6 +685,8 @@ export class FieldApi<
661
685
662
686
getMeta = ( ) => this . store . state . meta
663
687
688
+ meta = this . store . state . meta
689
+
664
690
/**
665
691
* Sets the field metadata.
666
692
*/
0 commit comments