@stardust-ui/react-component-event-listener
Version:
React components for binding events on the global scope.
46 lines (39 loc) • 1.68 kB
JavaScript
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;
;