UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

223 lines (196 loc) 6.63 kB
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _extends from "@babel/runtime/helpers/extends"; import _objectSpread from "@babel/runtime/helpers/objectSpread2"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _regeneratorRuntime from "@babel/runtime/regenerator"; import React, { createRef, forwardRef, useCallback, useContext, useImperativeHandle, useMemo, useState } from 'react'; import { render } from 'react-dom'; import defer from 'lodash/defer'; import { TooltipManager } from 'choerodon-ui/shared'; import ConfigContext from '../../../es/config-provider/ConfigContext'; import { getProPrefixCls } from '../../../es/configure/utils'; import { getGlobalPopupContainer } from '../../../es/trigger/Popup'; import Tooltip from './Tooltip'; import TaskRunner from '../_util/TaskRunner'; export var suffixCls = 'singleton-tooltip'; var TooltipContainer = /*#__PURE__*/forwardRef(function (_, ref) { var task = useMemo(function () { return new TaskRunner(); }, []); var _useState = useState(), _useState2 = _slicedToArray(_useState, 2), tooltipProps = _useState2[0], setTooltipProps = _useState2[1]; var _useContext = useContext(ConfigContext), getTooltipTheme = _useContext.getTooltipTheme, getTooltipPlacement = _useContext.getTooltipPlacement; var open = useCallback(function (target, args) { var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 100; task.cancel(); task.delay(duration, function () { setTooltipProps(_objectSpread(_objectSpread({ theme: getTooltipTheme(), placement: getTooltipPlacement() }, args), {}, { hidden: false, getRootDomNode: function getRootDomNode() { return target; } })); }); return task; }, [task, getTooltipTheme, getTooltipPlacement]); var close = useCallback(function () { var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100; task.cancel(); task.delay(duration, function () { setTooltipProps(function (preState) { return _objectSpread(_objectSpread({}, preState), {}, { hidden: true }); }); }); return task; }, [task]); var handlePopupMouseEnter = useCallback(function () { task.cancel(); }, [task]); var handlePopupMouseLeave = useCallback(function () { close(); }, [close]); useImperativeHandle(ref, function () { return { open: open, close: close }; }, [open, close]); return /*#__PURE__*/React.createElement(Tooltip, _extends({}, tooltipProps, { onPopupMouseEnter: function onPopupMouseEnter() { return defer(handlePopupMouseEnter); }, onPopupMouseLeave: handlePopupMouseLeave })); }); function getRoot() { var root = TooltipManager.root; if (typeof window !== 'undefined') { var popupContainer = getGlobalPopupContainer(); var doc = window.document; if (root) { if (!root.parentNode) { popupContainer.appendChild(root); } } else { root = doc.createElement('div'); root.className = "".concat(getProPrefixCls(suffixCls), "-container"); popupContainer.appendChild(root); TooltipManager.root = root; } } return root; } function getContainer() { return _getContainer.apply(this, arguments); } function _getContainer() { _getContainer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() { var container; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: container = TooltipManager.container; if (!container) { _context.next = 3; break; } return _context.abrupt("return", container); case 3: return _context.abrupt("return", new Promise(function (resolve) { var root = getRoot(); if (root) { var ref = /*#__PURE__*/createRef(); TooltipManager.container = ref; render( /*#__PURE__*/React.createElement(TooltipContainer, { ref: ref }), root, function () { return resolve(ref); }); } })); case 4: case "end": return _context.stop(); } } }, _callee); })); return _getContainer.apply(this, arguments); } export function show(_x, _x2) { return _show.apply(this, arguments); } function _show() { _show = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(target, props) { var duration, container, current, _args2 = arguments; return _regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: duration = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : 100; _context2.next = 3; return getContainer(); case 3: container = _context2.sent; current = container.current; if (!current) { _context2.next = 7; break; } return _context2.abrupt("return", current.open(target, props, duration)); case 7: case "end": return _context2.stop(); } } }, _callee2); })); return _show.apply(this, arguments); } export function hide() { return _hide.apply(this, arguments); } function _hide() { _hide = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() { var duration, container, current, _args3 = arguments; return _regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: duration = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : 100; _context3.next = 3; return getContainer(); case 3: container = _context3.sent; current = container.current; if (!current) { _context3.next = 7; break; } return _context3.abrupt("return", current.close(duration)); case 7: case "end": return _context3.stop(); } } }, _callee3); })); return _hide.apply(this, arguments); } //# sourceMappingURL=singleton.js.map