import * as React from 'react'; import PositioningPortal, { Props as PositioningPortalProps, } from './PositioningPortal'; export interface RenderProps { close: () => void; open: () => void; isOpen: boolean; } export interface Props extends Omit, 'children' | 'isOpen'> { children: React.ReactNode | ((params: RenderProps) => React.ReactNode); } function renderProps( element: Props['children'], props: RenderProps ): React.ReactNode { return typeof element === 'function' ? element(props) : element; } type PositioningPortalWithState = React.FunctionComponent< Props >; function PositioningPortalWithState(props: Props) { const [isOpen, setIsOpen] = React.useState(false); const { children, ...restProps } = props; const open = () => { setIsOpen(true); }; const close = () => { setIsOpen(false); }; return ( {renderProps(children, { open, close, isOpen, })} ); } export default PositioningPortalWithState;