@mui/x-data-grid
Version:
The Community plan edition of the Data Grid components (MUI X).
27 lines • 1.2 kB
JavaScript
import * as React from 'react';
import { isFunction } from '../../utils/utils';
import { useGridLogger } from './useGridLogger';
export const useGridNativeEventListener = (apiRef, ref, eventName, handler, options) => {
const logger = useGridLogger(apiRef, 'useNativeEventListener');
const [added, setAdded] = React.useState(false);
const handlerRef = React.useRef(handler);
const targetElement = isFunction(ref) ? ref() : ref?.current ?? null;
const wrapHandler = React.useCallback(event => {
return handlerRef.current && handlerRef.current(event);
}, []);
React.useEffect(() => {
handlerRef.current = handler;
}, [handler]);
React.useEffect(() => {
if (targetElement && eventName && !added) {
logger.debug(`Binding native ${eventName} event`);
targetElement.addEventListener(eventName, wrapHandler, options);
setAdded(true);
const unsubscribe = () => {
logger.debug(`Clearing native ${eventName} event`);
targetElement.removeEventListener(eventName, wrapHandler, options);
};
apiRef.current.subscribeEvent('unmount', unsubscribe);
}
}, [targetElement, wrapHandler, eventName, added, logger, options, apiRef]);
};