UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

51 lines (47 loc) 1.52 kB
import { useContext } from 'react'; import { RecordContext } from './RecordContext'; import { RaRecord } from '../../types'; /** * Hook to read the record from a RecordContext. * * Must be used within a <RecordContext> such as provided by the <EditContextProvider> * (e.g. as a descendent of <Edit> or <EditBase>) or within a <ShowContextProvider> * (e.g. as a descendent of <Show> or <ShowBase>) * * @example // basic usage * * import { useRecordContext } from 'ra-core'; * * const TitleField = () => { * const record = useRecordContext(); * return <span>{record && record.title}</span>; * }; * * @example // allow record override via props * * import { useRecordContext } from 'ra-core'; * * const TitleField = (props) => { * const record = useRecordContext(props); * return <span>{record && record.title}</span>; * }; * render(<TextField record={record} />); * * @returns {RaRecord} A record object */ export const useRecordContext = < RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord, >( props?: UseRecordContextParams<RecordType> ): RecordType | undefined => { // Can't find a way to specify the RecordType when CreateContext is declared // @ts-ignore const context = useContext<RecordType | undefined>(RecordContext); return (props && props.record) || context; }; export interface UseRecordContextParams< RecordType extends RaRecord | Omit<RaRecord, 'id'> = RaRecord, > { record?: RecordType; [key: string]: any; }