@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
81 lines (73 loc) • 3.18 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import * as React from "react";
import randomID from "../../utils/randomID";
import useStateWithTimeout from "../../hooks/useStateWithTimeout";
import Portal from "../../Portal";
import { StyledTooltipChildren } from "../TooltipPrimitive";
import DialogContent from "./components/DialogContent";
var MobileDialog = function MobileDialog(_ref) {
var children = _ref.children,
_ref$enabled = _ref.enabled,
enabled = _ref$enabled === void 0 ? true : _ref$enabled,
_ref$renderInPortal = _ref.renderInPortal,
renderInPortal = _ref$renderInPortal === void 0 ? true : _ref$renderInPortal,
_ref$tabIndex = _ref.tabIndex,
tabIndex = _ref$tabIndex === void 0 ? "0" : _ref$tabIndex,
dataTest = _ref.dataTest,
content = _ref.content,
_ref$stopPropagation = _ref.stopPropagation,
stopPropagation = _ref$stopPropagation === void 0 ? false : _ref$stopPropagation,
removeUnderlinedText = _ref.removeUnderlinedText,
_ref$block = _ref.block,
block = _ref$block === void 0 ? false : _ref$block,
lockScrolling = _ref.lockScrolling;
var _useStateWithTimeout = useStateWithTimeout(false, 200),
_useStateWithTimeout2 = _slicedToArray(_useStateWithTimeout, 4),
render = _useStateWithTimeout2[0],
setRender = _useStateWithTimeout2[1],
setRenderWithTimeout = _useStateWithTimeout2[2],
clearRenderTimeout = _useStateWithTimeout2[3];
var _useStateWithTimeout3 = useStateWithTimeout(false, 200),
_useStateWithTimeout4 = _slicedToArray(_useStateWithTimeout3, 3),
shown = _useStateWithTimeout4[0],
setshown = _useStateWithTimeout4[1],
setshownWithTimeout = _useStateWithTimeout4[2];
var mobileDialogID = React.useMemo(function () {
return randomID("mobileDialogID");
}, []);
var handleInMobile = React.useCallback(function (ev) {
ev.preventDefault();
if (stopPropagation) {
ev.stopPropagation();
}
setRender(true);
setshownWithTimeout(true);
clearRenderTimeout();
}, [clearRenderTimeout, setRender, setshownWithTimeout, stopPropagation]);
var handleOutMobile = React.useCallback(function (ev) {
if (stopPropagation) {
ev.stopPropagation();
}
setshown(false);
setRenderWithTimeout(false);
}, [setRenderWithTimeout, setshown, stopPropagation]);
if (!enabled) return children;
var dialog = /*#__PURE__*/React.createElement(DialogContent, {
dataTest: dataTest,
shown: shown,
lockScrolling: lockScrolling,
dialogId: mobileDialogID,
onClose: handleOutMobile
}, content);
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledTooltipChildren, {
onClick: handleInMobile,
"aria-describedby": enabled ? mobileDialogID : undefined,
tabIndex: enabled ? tabIndex : undefined,
enabled: enabled,
removeUnderlinedText: removeUnderlinedText,
block: block
}, children), enabled && render && (renderInPortal ? /*#__PURE__*/React.createElement(Portal, {
renderInto: "dialogs"
}, dialog) : dialog));
};
export default MobileDialog;