Files
simple-react-app-kit/packages/record/src/use-field-value.ts
T

31 lines
962 B
TypeScript
Raw Normal View History

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
}