38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var react_1 = require("react");
|
|
var util_1 = require("./misc/util");
|
|
var defaultTarget = util_1.isBrowser ? window : null;
|
|
var isListenerType1 = function (target) {
|
|
return !!target.addEventListener;
|
|
};
|
|
var isListenerType2 = function (target) {
|
|
return !!target.on;
|
|
};
|
|
var useEvent = function (name, handler, target, options) {
|
|
if (target === void 0) { target = defaultTarget; }
|
|
react_1.useEffect(function () {
|
|
if (!handler) {
|
|
return;
|
|
}
|
|
if (!target) {
|
|
return;
|
|
}
|
|
if (isListenerType1(target)) {
|
|
util_1.on(target, name, handler, options);
|
|
}
|
|
else if (isListenerType2(target)) {
|
|
target.on(name, handler, options);
|
|
}
|
|
return function () {
|
|
if (isListenerType1(target)) {
|
|
util_1.off(target, name, handler, options);
|
|
}
|
|
else if (isListenerType2(target)) {
|
|
target.off(name, handler, options);
|
|
}
|
|
};
|
|
}, [name, handler, target, JSON.stringify(options)]);
|
|
};
|
|
exports.default = useEvent;
|