31 lines
962 B
TypeScript
31 lines
962 B
TypeScript
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
|
|
}
|