UNPKG

@coreui/react-pro

Version:

UI Components Library for React.js

128 lines (124 loc) 6.18 kB
'use strict'; var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js'); var React = require('react'); var index = require('../../node_modules/classnames/index.js'); var PropTypes = require('prop-types'); var CConditionalPortal = require('../conditional-portal/CConditionalPortal.js'); var useForkedRef = require('../../hooks/useForkedRef.js'); var usePopper = require('../../hooks/usePopper.js'); var props = require('../../props.js'); var executeAfterTransition = require('../../utils/executeAfterTransition.js'); var getRTLPlacement = require('../../utils/getRTLPlacement.js'); var CTooltip = React.forwardRef(function (_a, ref) { var children = _a.children, _b = _a.animation, animation = _b === void 0 ? true : _b, className = _a.className, container = _a.container, content = _a.content, _c = _a.delay, delay = _c === void 0 ? 0 : _c, _d = _a.fallbackPlacements, fallbackPlacements = _d === void 0 ? ['top', 'right', 'bottom', 'left'] : _d, _e = _a.offset, offset = _e === void 0 ? [0, 6] : _e, onHide = _a.onHide, onShow = _a.onShow, _f = _a.placement, placement = _f === void 0 ? 'top' : _f, _g = _a.trigger, trigger = _g === void 0 ? ['hover', 'focus'] : _g, visible = _a.visible, rest = tslib_es6.__rest(_a, ["children", "animation", "className", "container", "content", "delay", "fallbackPlacements", "offset", "onHide", "onShow", "placement", "trigger", "visible"]); var tooltipRef = React.useRef(null); var togglerRef = React.useRef(null); var forkedRef = useForkedRef.useForkedRef(ref, tooltipRef); var uID = React.useRef("tooltip".concat(Math.floor(Math.random() * 1000000))); var _h = usePopper.usePopper(), initPopper = _h.initPopper, destroyPopper = _h.destroyPopper, updatePopper = _h.updatePopper; var _j = React.useState(false), mounted = _j[0], setMounted = _j[1]; var _k = React.useState(visible), _visible = _k[0], setVisible = _k[1]; var _delay = typeof delay === 'number' ? { show: delay, hide: delay } : delay; var popperConfig = { modifiers: [ { name: 'arrow', options: { element: '.tooltip-arrow', }, }, { name: 'flip', options: { fallbackPlacements: fallbackPlacements, }, }, { name: 'offset', options: { offset: offset, }, }, ], placement: getRTLPlacement.default(placement, togglerRef.current), }; React.useEffect(function () { setVisible(visible); }, [visible]); React.useEffect(function () { if (_visible) { setMounted(true); if (tooltipRef.current) { tooltipRef.current.classList.remove('fade', 'show'); destroyPopper(); } setTimeout(function () { if (togglerRef.current && tooltipRef.current) { if (animation) { tooltipRef.current.classList.add('fade'); } initPopper(togglerRef.current, tooltipRef.current, popperConfig); tooltipRef.current.style.removeProperty('display'); tooltipRef.current.classList.add('show'); onShow && onShow(); } }, _delay.show); } return function () { if (tooltipRef.current) { tooltipRef.current.classList.remove('show'); onHide && onHide(); executeAfterTransition.default(function () { if (tooltipRef.current) { tooltipRef.current.style.display = 'none'; } destroyPopper(); setMounted(false); }, tooltipRef.current); } }; }, [_visible]); React.useEffect(function () { updatePopper(); }, [content]); return (React.createElement(React.Fragment, null, React.cloneElement(children, tslib_es6.__assign(tslib_es6.__assign(tslib_es6.__assign(tslib_es6.__assign(tslib_es6.__assign({}, (_visible && { 'aria-describedby': uID.current, })), { ref: togglerRef }), ((trigger === 'click' || trigger.includes('click')) && { onClick: function () { return setVisible(!_visible); }, })), ((trigger === 'focus' || trigger.includes('focus')) && { onFocus: function () { return setVisible(true); }, onBlur: function () { return setVisible(false); }, })), ((trigger === 'hover' || trigger.includes('hover')) && { onMouseEnter: function () { return setVisible(true); }, onMouseLeave: function () { return setVisible(false); }, }))), React.createElement(CConditionalPortal.CConditionalPortal, { container: container, portal: true }, mounted && (React.createElement("div", tslib_es6.__assign({ className: index.default('tooltip', 'bs-tooltip-auto', className), id: uID.current, ref: forkedRef, role: "tooltip", style: { display: 'none', } }, rest), React.createElement("div", { className: "tooltip-arrow" }), React.createElement("div", { className: "tooltip-inner" }, content)))))); }); CTooltip.propTypes = { animation: PropTypes.bool, children: PropTypes.node, container: PropTypes.any, content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), delay: PropTypes.oneOfType([ PropTypes.number, PropTypes.shape({ show: PropTypes.number.isRequired, hide: PropTypes.number.isRequired, }), ]), fallbackPlacements: props.fallbackPlacementsPropType, offset: PropTypes.any, // TODO: find good proptype onHide: PropTypes.func, onShow: PropTypes.func, placement: PropTypes.oneOf(['auto', 'top', 'right', 'bottom', 'left']), trigger: props.triggerPropType, visible: PropTypes.bool, }; CTooltip.displayName = 'CTooltip'; exports.CTooltip = CTooltip; //# sourceMappingURL=CTooltip.js.map