@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
26 lines (25 loc) • 943 B
JavaScript
"use client";
import { useCallback, useEffect, useRef } from "react";
//#region packages/@mantine/hooks/src/use-event-listener/use-event-listener.ts
function useEventListener(type, listener, options) {
const previousListener = useRef(null);
const previousNode = useRef(null);
const callbackRef = useCallback((node) => {
if (!node) return;
if (previousNode.current && previousListener.current) previousNode.current.removeEventListener(type, previousListener.current, options);
node.addEventListener(type, listener, options);
previousNode.current = node;
previousListener.current = listener;
}, [
type,
listener,
options
]);
useEffect(() => () => {
if (previousNode.current && previousListener.current) previousNode.current.removeEventListener(type, previousListener.current, options);
}, [type, options]);
return callbackRef;
}
//#endregion
export { useEventListener };
//# sourceMappingURL=use-event-listener.mjs.map