@orca-fe/hooks
Version:
React Hooks Collections
50 lines (49 loc) • 2.23 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.EventEmitterWithHook = void 0;
exports.default = useEventEmitter;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = require("react");
var _events = require("events");
/* eslint-disable @typescript-eslint/no-explicit-any,react-hooks/rules-of-hooks */
var EventEmitterWithHook = exports.EventEmitterWithHook = /*#__PURE__*/(0, _createClass2.default)(function EventEmitterWithHook() {
var _this = this;
(0, _classCallCheck2.default)(this, EventEmitterWithHook);
(0, _defineProperty2.default)(this, "eventEmitter", new _events.EventEmitter());
(0, _defineProperty2.default)(this, "emit", function (eventName) {
var _this$eventEmitter;
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
(_this$eventEmitter = _this.eventEmitter).emit.apply(_this$eventEmitter, [eventName].concat(args));
});
(0, _defineProperty2.default)(this, "useSubscription", function (eventName, callback) {
var callbackRef = (0, _react.useRef)(callback);
callbackRef.current = callback;
(0, _react.useEffect)(function () {
var callbackFn = function callbackFn() {
if (callbackRef.current) {
callbackRef.current.apply(callbackRef, arguments);
}
};
_this.eventEmitter.on(eventName, callbackFn);
return function () {
_this.eventEmitter.off(eventName, callbackFn);
};
}, []);
});
});
function useEventEmitter() {
var _useState = (0, _react.useState)(function () {
return new EventEmitterWithHook();
}),
_useState2 = (0, _slicedToArray2.default)(_useState, 1),
eventEmitter = _useState2[0];
return eventEmitter;
}