feat(record): add generic record context APIs
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user