nice-ui
Version:
React design system, components, and utilities
27 lines (26 loc) • 1.27 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Popup = void 0;
const React = require("react");
const PopupControlled_1 = require("./PopupControlled");
const context_1 = require("./context");
const popup_1 = require("../../utils/popup");
const useLockScrolling_1 = require("../../hooks/useLockScrolling");
const Popup = (props) => {
const { anchor: anchorSpec, ...rest } = props;
const [open, setOpen] = React.useState(false);
const contextValue = React.useMemo(() => ({ close: () => setOpen(false) }), []);
const handle = (0, popup_1.useAnchorPointHandle)(anchorSpec);
// Lock page scrolling on open popup.
(0, useLockScrolling_1.useLockScrolling)(open);
const handleClick = () => {
setOpen((open) => !open);
};
const handleClickAway = () => {
setOpen(false);
};
return (React.createElement(context_1.context.Provider, { value: contextValue },
React.createElement(popup_1.anchorContext.Provider, { value: handle },
React.createElement(PopupControlled_1.PopupControlled, { ...rest, refToggle: handle.ref, onEsc: open ? () => setOpen(false) : undefined, onHeadClick: handleClick, onClickAway: handleClickAway, open: open }))));
};
exports.Popup = Popup;
;