UNPKG

@project44-manifest/react

Version:

Manifest Design System react components

41 lines (36 loc) 1.06 kB
import * as React from 'react'; import { useOverlayPosition, useOverlayTrigger } from '@react-aria/overlays'; import { PopoverTriggerProps, PopoverTriggerState } from './Popover.types'; export function usePopoverTrigger(props: PopoverTriggerProps, state: PopoverTriggerState) { const { maxHeight, offset = 4, placement = 'bottom', scrollRef, shouldFlip = true, shouldUpdatePosition = true, type = 'dialog', } = props; const overlayRef = React.useRef<HTMLDivElement>(null); const triggerRef = React.useRef<HTMLButtonElement>(null); const { triggerProps, overlayProps } = useOverlayTrigger({ type }, state, triggerRef); const { overlayProps: positionProps } = useOverlayPosition({ isOpen: state.isOpen, maxHeight, offset, onClose: state.close, overlayRef, placement, scrollRef, shouldFlip, shouldUpdatePosition, targetRef: triggerRef, }); return { overlayRef, overlayProps: { ...overlayProps, ...positionProps }, state, triggerRef, triggerProps, }; }