feat(record): add generic record context APIs

This commit is contained in:
Maofeng
2026-09-28 17:23:59 +08:00
parent 93373adb9a
commit 3eb0246c40
11 changed files with 324 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
import { get } from "es-toolkit/compat"
import type { ExtractRecordPaths, RecordPathValue, RecordValue } from "./types"
import { useRecord } from "./use-record"
export type UseFieldValueOptions<
TRecord extends RecordValue = RecordValue,
TSource extends ExtractRecordPaths<TRecord> = ExtractRecordPaths<TRecord>,
> = {
defaultValue?: RecordPathValue<TRecord, TSource>
record?: TRecord | null
source: TSource
}
/** Reads a direct or nested field from a record override or context. */
export function useFieldValue<
TRecord extends RecordValue = RecordValue,
TSource extends ExtractRecordPaths<TRecord> = ExtractRecordPaths<TRecord>,
>({
defaultValue,
record: fallbackRecord,
source,
}: UseFieldValueOptions<TRecord, TSource>):
| RecordPathValue<TRecord, TSource>
| undefined {
const record = useRecord({ record: fallbackRecord })
return get(record, source, defaultValue) as
| RecordPathValue<TRecord, TSource>
| undefined
}