rsuite
Version:
A suite of react components
47 lines (46 loc) • 1.96 kB
JavaScript
'use client';
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _react = require("react");
var _on = _interopRequireDefault(require("dom-lib/on"));
var _hooks = require("../../internals/hooks");
var _ToastContext = _interopRequireDefault(require("../ToastContext"));
/**
* A hook that delays the closure of the message box.
*/
function useDelayedClosure(props) {
var onClose = props.onClose,
durationProp = props.duration,
targetRef = props.targetRef;
var _useContext = (0, _react.useContext)(_ToastContext.default),
usedToaster = _useContext.usedToaster,
_useContext$duration = _useContext.duration,
duration = _useContext$duration === void 0 ? durationProp : _useContext$duration,
mouseReset = _useContext.mouseReset;
var mouseEnterRef = (0, _react.useRef)();
var mouseLeaveRef = (0, _react.useRef)();
var _useTimeout = (0, _hooks.useTimeout)(onClose, duration, usedToaster && duration > 0),
clear = _useTimeout.clear,
reset = _useTimeout.reset;
(0, _hooks.useMount)(function () {
if (targetRef !== null && targetRef !== void 0 && targetRef.current && mouseReset) {
if (mouseEnterRef.current || mouseLeaveRef.current) {
return;
}
mouseEnterRef.current = (0, _on.default)(targetRef.current, 'mouseenter', clear);
mouseLeaveRef.current = (0, _on.default)(targetRef.current, 'mouseleave', reset);
return function () {
var _mouseEnterRef$curren, _mouseLeaveRef$curren;
(_mouseEnterRef$curren = mouseEnterRef.current) === null || _mouseEnterRef$curren === void 0 || _mouseEnterRef$curren.off();
(_mouseLeaveRef$curren = mouseLeaveRef.current) === null || _mouseLeaveRef$curren === void 0 || _mouseLeaveRef$curren.off();
};
}
});
return {
clear: clear,
reset: reset
};
}
var _default = exports.default = useDelayedClosure;