@storm-stack/hooks
Version:
A collection of React hooks used by Storm Software in various client libraries and applications.
30 lines (29 loc) • 1.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useHover = void 0;
var _react = require("react");
const useHover = () => {
const [hovering, setHovering] = (0, _react.useState)(false);
const previousNode = (0, _react.useRef)(null);
const handleMouseEnter = (0, _react.useCallback)(() => {
setHovering(true);
}, []);
const handleMouseLeave = (0, _react.useCallback)(() => {
setHovering(false);
}, []);
const customRef = (0, _react.useCallback)(node => {
if (previousNode.current?.nodeType === Node.ELEMENT_NODE) {
previousNode.current.removeEventListener("mouseenter", handleMouseEnter);
previousNode.current.removeEventListener("mouseleave", handleMouseLeave);
}
if (node?.nodeType === Node.ELEMENT_NODE) {
node.addEventListener("mouseenter", handleMouseEnter);
node.addEventListener("mouseleave", handleMouseLeave);
}
previousNode.current = node;
}, [handleMouseEnter, handleMouseLeave]);
return [customRef, hovering];
};
exports.useHover = useHover;