32 lines
No EOL
1,007 B
TypeScript
32 lines
No EOL
1,007 B
TypeScript
import { useEffect } from "react";
|
|
|
|
/**
|
|
* @param {object} params
|
|
* @param {Function} params.onMouseDown
|
|
* @param {Function} params.onMouseUp
|
|
* @param {Function} params.onClick
|
|
* @param {Function} params.onContextMenu
|
|
*/
|
|
export function useMouseListener({ onMouseDown, onMouseUp, onClick, onContextMenu }) {
|
|
useEffect(() => {
|
|
if (onMouseDown)
|
|
document.addEventListener("mousedown", onMouseDown);
|
|
if (onMouseUp)
|
|
document.addEventListener("mouseup", onMouseUp);
|
|
if (onClick)
|
|
document.addEventListener("click", onClick);
|
|
if (onContextMenu)
|
|
document.addEventListener("contextmenu", onContextMenu);
|
|
|
|
return () => {
|
|
if (onMouseDown)
|
|
document.removeEventListener("mousedown", onMouseDown);
|
|
if (onMouseUp)
|
|
document.removeEventListener("mouseup", onMouseUp);
|
|
if (onClick)
|
|
document.removeEventListener("click", onClick);
|
|
if (onContextMenu)
|
|
document.removeEventListener("contextmenu", onContextMenu);
|
|
};
|
|
}, [onMouseDown, onMouseUp, onClick, onContextMenu]);
|
|
} |