Skip to content

Commit 2dd8d44

Browse files
author
Harry Whorlow
committed
feat(core): field meta API
1 parent cf165af commit 2dd8d44

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

packages/form-core/src/FieldApi.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import {
44
standardSchemaValidator,
55
} from './standardSchemaValidator'
66
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'
813
import type { StandardSchemaV1 } from './standardSchemaValidator'
914
import type {
1015
UpdateMetaOptions,
@@ -116,6 +121,13 @@ export type FieldListenerFn<
116121
fieldApi: FieldApi<TParentData, TName, TFieldValidator, TFormValidator, TData>
117122
}) => void
118123

124+
/**
125+
* @private
126+
*/
127+
export type FieldMetaFn<TFormData, TMetaExtension extends object> = (
128+
props: FormState<TFormData>,
129+
) => FieldMetaExtension<TMetaExtension>
130+
119131
export interface FieldValidators<
120132
TParentData,
121133
TName extends DeepKeys<TParentData>,
@@ -285,6 +297,7 @@ export interface FieldListeners<
285297
export interface FieldOptions<
286298
TParentData,
287299
TName extends DeepKeys<TParentData>,
300+
TMetaExtension extends object,
288301
TFieldValidator extends
289302
| Validator<DeepValue<TParentData, TName>, unknown>
290303
| undefined = undefined,
@@ -337,6 +350,7 @@ export interface FieldOptions<
337350
TFormValidator,
338351
TData
339352
>
353+
meta?: FieldMetaFn<FormData, TMetaExtension>
340354
}
341355

342356
/**
@@ -396,10 +410,15 @@ export type FieldMetaDerived = {
396410
isPristine: boolean
397411
}
398412

413+
export type FieldMetaExtension<TMetaExtension extends object = {}> =
414+
TMetaExtension
415+
399416
/**
400417
* An object type representing the metadata of a field in a form.
401418
*/
402-
export type FieldMeta = FieldMetaBase & FieldMetaDerived
419+
export type FieldMeta<TMetaExtension extends object = {}> = FieldMetaBase &
420+
FieldMetaDerived &
421+
FieldMetaExtension<TMetaExtension>
403422

404423
/**
405424
* An object type representing the state of a field.
@@ -597,6 +616,11 @@ export class FieldApi<
597616
fieldApi: this,
598617
})
599618

619+
this.setMeta((prev) => ({
620+
...prev,
621+
...this.options.meta?.(this.form.state),
622+
}))
623+
600624
return cleanup
601625
}
602626

@@ -661,6 +685,8 @@ export class FieldApi<
661685

662686
getMeta = () => this.store.state.meta
663687

688+
meta = this.store.state.meta
689+
664690
/**
665691
* Sets the field metadata.
666692
*/

0 commit comments

Comments
 (0)