UNPKG

@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.

146 lines (120 loc) 6.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _mediaQuery = require("../utils/mediaQuery"); var _consts = require("./consts"); var _Text = require("../Text"); var _Portal = _interopRequireDefault(require("../Portal")); var _randomID = _interopRequireDefault(require("../utils/randomID")); var _consts2 = require("../utils/mediaQuery/consts"); var _useTheme = _interopRequireDefault(require("../hooks/useTheme")); var _TooltipContent = _interopRequireDefault(require("./components/TooltipContent")); var _useStateWithTimeout5 = _interopRequireDefault(require("../hooks/useStateWithTimeout")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var StyledTooltipChildren = _styledComponents.default.span.withConfig({ displayName: "Tooltip__StyledTooltipChildren", componentId: "sc-1l15bi-0" })(["display:inline-flex;&:focus:active{outline:none;}", ";"], function (_ref) { var enabled = _ref.enabled, removeUnderlinedText = _ref.removeUnderlinedText; return enabled && !removeUnderlinedText && (0, _styledComponents.css)(["", "{display:inline-block;text-decoration:underline;text-decoration:underline currentColor dotted;}"], _Text.StyledText); }); var Tooltip = function Tooltip(_ref2) { var children = _ref2.children, _ref2$enabled = _ref2.enabled, enabled = _ref2$enabled === void 0 ? true : _ref2$enabled, _ref2$tabIndex = _ref2.tabIndex, tabIndex = _ref2$tabIndex === void 0 ? "0" : _ref2$tabIndex, dataTest = _ref2.dataTest, _ref2$size = _ref2.size, size = _ref2$size === void 0 ? _consts.SIZE_OPTIONS.SMALL : _ref2$size, content = _ref2.content, preferredPosition = _ref2.preferredPosition, _ref2$stopPropagation = _ref2.stopPropagation, stopPropagation = _ref2$stopPropagation === void 0 ? false : _ref2$stopPropagation, removeUnderlinedText = _ref2.removeUnderlinedText; var theme = (0, _useTheme.default)(); var _useState = (0, _react.useState)(false), _useState2 = _slicedToArray(_useState, 2), shown = _useState2[0], setShown = _useState2[1]; var _useStateWithTimeout = (0, _useStateWithTimeout5.default)(false, 200), _useStateWithTimeout2 = _slicedToArray(_useStateWithTimeout, 4), render = _useStateWithTimeout2[0], setRender = _useStateWithTimeout2[1], setRenderWithTimeout = _useStateWithTimeout2[2], clearRenderTimeout = _useStateWithTimeout2[3]; var _useStateWithTimeout3 = (0, _useStateWithTimeout5.default)(false, 200), _useStateWithTimeout4 = _slicedToArray(_useStateWithTimeout3, 3), shownMobile = _useStateWithTimeout4[0], setShownMobile = _useStateWithTimeout4[1], setShownMobileWithTimeout = _useStateWithTimeout4[2]; var tooltipId = (0, _react.useMemo)(function () { return (0, _randomID.default)("tooltip"); }, []); var container = (0, _react.useRef)(null); var handleIn = (0, _react.useCallback)(function () { if (window.innerWidth > +(0, _mediaQuery.getBreakpointWidth)(_consts2.QUERIES.LARGEMOBILE, theme, true)) { setRender(true); setShown(true); clearRenderTimeout(); } }, [clearRenderTimeout, setRender, theme]); var handleOut = (0, _react.useCallback)(function () { if (window.innerWidth > +(0, _mediaQuery.getBreakpointWidth)(_consts2.QUERIES.LARGEMOBILE, theme, true)) { setShown(false); setRenderWithTimeout(false); } }, [setRenderWithTimeout, theme]); var handleInMobile = (0, _react.useCallback)(function (ev) { if (stopPropagation) { ev.stopPropagation(); } if (window.innerWidth <= +(0, _mediaQuery.getBreakpointWidth)(_consts2.QUERIES.LARGEMOBILE, theme, true)) { ev.preventDefault(); setRender(true); setShownMobileWithTimeout(true); clearRenderTimeout(); } }, [clearRenderTimeout, setRender, setShownMobileWithTimeout, stopPropagation, theme]); var handleOutMobile = (0, _react.useCallback)(function () { setShownMobile(false); setRenderWithTimeout(false); }, [setRenderWithTimeout, setShownMobile]); return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(StyledTooltipChildren, { onMouseEnter: handleIn, onMouseLeave: handleOut, onClick: handleInMobile, onFocus: handleIn, onBlur: handleOut, ref: container, "aria-describedby": enabled ? tooltipId : undefined, tabIndex: enabled ? tabIndex : undefined, enabled: enabled, removeUnderlinedText: removeUnderlinedText }, children), enabled && render && _react.default.createElement(_Portal.default, { renderInto: "tooltips" }, _react.default.createElement(_TooltipContent.default, { dataTest: dataTest, shownMobile: shownMobile, shown: shown, size: size, tooltipId: tooltipId, onClose: handleOut, onCloseMobile: handleOutMobile, onEnter: handleIn, preferredPosition: preferredPosition, containerRef: container }, content))); }; var _default = Tooltip; exports.default = _default;