monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
26 lines (24 loc) • 946 B
text/typescript
import { MutableRefObject, useEffect, useRef, useState } from "react";
// Standard hook implementation https://usehooks.com/useHover/
export default function useHover<T extends HTMLElement = HTMLElement>(): [MutableRefObject<T>, boolean] {
const [value, setValue] = useState<boolean>(false);
const ref = useRef<T>(null);
const handleMouseOver = (): void => setValue(true);
const handleMouseOut = (): void => setValue(false);
useEffect(
() => {
const node = ref.current;
if (node) {
node.addEventListener("mouseover", handleMouseOver);
node.addEventListener("mouseout", handleMouseOut);
return () => {
node.removeEventListener("mouseover", handleMouseOver);
node.removeEventListener("mouseout", handleMouseOut);
};
}
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[ref.current] // Recall only if ref changes
);
return [ref, value];
}