beautiful-react-hooks
Version:
A collection of beautiful (and hopefully useful) React hooks to speed-up your components and hooks development
36 lines (35 loc) • 1.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var createHandlerSetter_1 = __importDefault(require("./factory/createHandlerSetter"));
var safeHasOwnProperty_1 = __importDefault(require("./shared/safeHasOwnProperty"));
/**
* Accepts the reference to an HTML Element and an event name then performs the necessary operations to listen to the event
* when fired from that HTML Element.
*/
var useEvent = function (ref, eventName, options) {
var _a = (0, createHandlerSetter_1.default)(), handler = _a[0], setHandler = _a[1];
if (!!ref && !(0, safeHasOwnProperty_1.default)(ref, 'current')) {
throw new Error('Unable to assign any scroll event to the given ref');
}
(0, react_1.useEffect)(function () {
var cb = function (event) {
if (handler.current) {
handler.current(event);
}
};
if (ref.current && ref.current.addEventListener && handler.current) {
ref.current.addEventListener(eventName, cb, options);
}
return function () {
if (ref.current && ref.current.addEventListener && handler.current) {
ref.current.removeEventListener(eventName, cb, options);
}
};
}, [eventName, ref.current, options]);
return setHandler;
};
exports.default = useEvent;