@zohodesk/hooks
Version:
Unified Component Library - Hooks
31 lines (28 loc) • 1.15 kB
JavaScript
import useEvent from "../utils/useEvent";
import { betterView } from "./viewport/index";
import findScrollElementWithHidden from "../utils/scroll/findScrollElementWithHidden";
import getScrollableParent from "../utils/scroll/getScrollableParent";
export default function useFloating(getContainerElement, getFloatingElement) {
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
const {
defaultPosition = 'bottomCenter',
isAbsolute = true,
needArrow,
preferredPositions
} = options;
const getFloatingData = useEvent(() => {
const cElem = getContainerElement();
const fElem = getFloatingElement();
if (!fElem) {
return {};
}
const scrollEl = getScrollableParent(cElem, findScrollElementWithHidden); // const { popupOffset, relativePosition, targetOffset, views, viewsOffset, ...floatingData } = betterView(fElem, cElem, defaultPosition, scrollEl, {
const floatingData = betterView(fElem, cElem, defaultPosition, scrollEl, {
isAbsolute,
customOrder: preferredPositions,
needArrow
});
return floatingData;
});
return getFloatingData;
}