UNPKG

@mui/x-data-grid

Version:

The community edition of the data grid component (MUI X).

33 lines 1.31 kB
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 wrapHandler = React.useCallback(event => { return handlerRef.current && handlerRef.current(event); }, []); React.useEffect(() => { handlerRef.current = handler; }, [handler]); React.useEffect(() => { let targetElement; if (isFunction(ref)) { targetElement = ref(); } else { targetElement = ref && ref.current ? ref.current : null; } if (targetElement && eventName && !added) { logger.debug(`Binding native ${eventName} event`); targetElement.addEventListener(eventName, wrapHandler, options); const boundElem = targetElement; setAdded(true); const unsubscribe = () => { logger.debug(`Clearing native ${eventName} event`); boundElem.removeEventListener(eventName, wrapHandler, options); }; apiRef.current.subscribeEvent('unmount', unsubscribe); } }, [ref, wrapHandler, eventName, added, logger, options, apiRef]); };