react-dom-event
Version:
React context for subscribing to all DOM user interaction events
94 lines • 3.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get EventContext () {
return EventContext;
},
get EventProvider () {
return EventProvider;
},
get useEvent () {
return useEvent;
}
});
var _react = require("react");
function _array_like_to_array(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
return arr2;
}
function _array_without_holes(arr) {
if (Array.isArray(arr)) return _array_like_to_array(arr);
}
function _iterable_to_array(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _non_iterable_spread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _to_consumable_array(arr) {
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
}
function _unsupported_iterable_to_array(o, minLen) {
if (!o) return;
if (typeof o === "string") return _array_like_to_array(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(n);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
}
var EventContext = (0, _react.createContext)(undefined);
function EventProvider(param) {
var _param_events = param.events, events = _param_events === void 0 ? [
'click'
] : _param_events, children = param.children;
var state = (0, _react.useState)([]);
var handlers = state[0]; // reduce transpiled array helpers
function onEvent(event) {
handlers.forEach(function(handler) {
return handler(event);
});
}
function subscribe(handler) {
handlers.push(handler);
return function() {
return handlers.splice(handlers.indexOf(handler), 1);
};
}
(0, _react.useEffect)(function() {
events.forEach(function(event) {
return window.document.addEventListener(event, onEvent, true);
});
return function() {
return events.forEach(function(event) {
return window.document.removeEventListener(event, onEvent, true);
});
};
});
return (0, _react.createElement)(EventContext.Provider, {
value: {
subscribe: subscribe
}
}, children);
}
function useEvent(handler, dependencies) {
var context = (0, _react.useContext)(EventContext);
if (!context) {
throw new Error('react-dom-event: subscribe not found on context. You might be missing the EventProvider or have multiple instances of react-dom-event');
}
(0, _react.useEffect)(function() {
return context.subscribe(handler);
}, [
context.subscribe,
handler
].concat(_to_consumable_array(dependencies)));
}
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }