in src/hooks/useAnchoredPosition.ts [22:55]
export function useAnchoredPosition(
settings?: AnchoredPositionHookSettings,
dependencies: React.DependencyList = []
): {
floatingElementRef: React.RefObject<Element>
anchorElementRef: React.RefObject<Element>
position: AnchorPosition | undefined
} {
const floatingElementRef = useProvidedRefOrCreate(settings?.floatingElementRef)
const anchorElementRef = useProvidedRefOrCreate(settings?.anchorElementRef)
const [position, setPosition] = React.useState<AnchorPosition | undefined>(undefined)
const updatePosition = React.useCallback(
() => {
if (floatingElementRef.current instanceof Element && anchorElementRef.current instanceof Element) {
setPosition(getAnchoredPosition(floatingElementRef.current, anchorElementRef.current, settings))
} else {
setPosition(undefined)
}
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[floatingElementRef, anchorElementRef, ...dependencies]
)
useLayoutEffect(updatePosition, [updatePosition])
useResizeObserver(updatePosition)
return {
floatingElementRef,
anchorElementRef,
position
}
}