Files
outline/app/hooks/useMousePosition.ts
dependabot[bot] fbd16d4b9a chore(deps-dev): bump prettier from 2.1.2 to 2.8.8 (#5372)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tom Moor <tom.moor@gmail.com>
2023-05-22 19:14:56 -07:00

36 lines
821 B
TypeScript

import { throttle } from "lodash";
import * as React from "react";
import useEventListener from "./useEventListener";
import useIsMounted from "./useIsMounted";
/**
* Mouse position as a tuple of [x, y]
*/
type MousePosition = [number, number];
/**
* Hook to get the current mouse position
*
* @returns Mouse position as a tuple of [x, y]
*/
export const useMousePosition = () => {
const isMounted = useIsMounted();
const [mousePosition, setMousePosition] = React.useState<MousePosition>([
0, 0,
]);
const updateMousePosition = React.useMemo(
() =>
throttle((ev: MouseEvent) => {
if (isMounted()) {
setMousePosition([ev.clientX, ev.clientY]);
}
}, 200),
[isMounted]
);
useEventListener("mousemove", updateMousePosition);
return mousePosition;
};