UNPKG

@stardust-ui/react-component-event-listener

Version:
46 lines (39 loc) 1.68 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var isActionSupported = function isActionSupported(targetRef, method) { return targetRef && !!targetRef.current && !!targetRef.current[method]; }; var useEventListener = function useEventListener(options) { var capture = options.capture, listener = options.listener, type = options.type, targetRef = options.targetRef; var latestListener = React.useRef(listener); latestListener.current = listener; var eventHandler = React.useCallback(function (event) { return latestListener.current(event); }, []); React.useEffect(function () { if (isActionSupported(targetRef, 'addEventListener')) { ; targetRef.current.addEventListener(type, eventHandler, capture); } else if (process.env.NODE_ENV !== 'production') { throw new Error('@stardust-ui/react-component-event-listener: Passed `targetRef` is not valid or does not support `addEventListener()` method.'); } return function () { if (isActionSupported(targetRef, 'removeEventListener')) { ; targetRef.current.removeEventListener(type, eventHandler, capture); } else if (process.env.NODE_ENV !== 'production') { throw new Error('@stardust-ui/react-component-event-listener: Passed `targetRef` is not valid or does not support `removeEventListener()` method.'); } }; }, [capture, targetRef, type]); }; var _default = useEventListener; exports.default = _default;