UNPKG

faithlife-react-popper

Version:

Fork of the react-popper project

37 lines (30 loc) 1.04 kB
// @flow import * as React from 'react'; import warning from 'warning'; import { ManagerReferenceNodeSetterContext } from './Manager'; import { safeInvoke, unwrapArray, setRef } from './utils'; import { type Ref } from './RefTypes'; export type ReferenceChildrenProps = { ref: Ref }; export type ReferenceProps = {| children: (ReferenceChildrenProps) => React.Node, innerRef?: Ref, |}; export function Reference({ children, innerRef }: ReferenceProps) { const setReferenceNode = React.useContext(ManagerReferenceNodeSetterContext); const refHandler = React.useCallback( (node: ?HTMLElement) => { setRef(innerRef, node); safeInvoke(setReferenceNode, node); }, [innerRef, setReferenceNode] ); // ran on unmount React.useEffect(() => () => setRef(innerRef, null)); React.useEffect(() => { warning( Boolean(setReferenceNode), '`Reference` should not be used outside of a `Manager` component.' ); }, [setReferenceNode]); return unwrapArray(children)({ ref: refHandler }); }