@turbox3d/reactivity
Version:
Large-scale reactive state management library
60 lines (59 loc) • 2.08 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.emitter = exports.EEventName = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _shared = require("@turbox3d/shared");
var _config = require("../const/config");
var EEventName;
(function (EEventName) {
EEventName["storeOnActive"] = "storeOnActive";
EEventName["beforeStoreChange"] = "beforeStoreChange";
EEventName["afterStoreChange"] = "afterStoreChange";
EEventName["asyncAfterStoreChange"] = "asyncAfterStoreChange";
EEventName["setProperty"] = "setProperty";
EEventName["materialCallStackChange"] = "materialCallStackChange";
})(EEventName || (exports.EEventName = EEventName = {}));
var Emitter = /*#__PURE__*/function () {
function Emitter() {
(0, _classCallCheck2["default"])(this, Emitter);
this.listeners = {};
}
return (0, _createClass2["default"])(Emitter, [{
key: "on",
value: function on(eventName, callback) {
var listeners = this.listeners[eventName] || [];
listeners.push(callback);
this.listeners[eventName] = listeners;
}
}, {
key: "emit",
value: function emit(eventName, args) {
var _this = this;
if (_config.ctx.devTool && window && window.__TURBOX_DEVTOOL_GLOBAL_HOOKS__) {
window.__TURBOX_DEVTOOL_GLOBAL_HOOKS__.emit(eventName, args);
}
var listeners = this.listeners[eventName];
if (!Array.isArray(listeners)) return;
listeners.forEach(function (callback) {
try {
callback.apply(_this, [args]);
} catch (e) {
(0, _shared.fail)(e);
}
});
}
}, {
key: "off",
value: function off(eventName) {
if (!this.listeners[eventName]) {
return;
}
this.listeners[eventName] = [];
}
}]);
}();
var emitter = exports.emitter = new Emitter();