instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
60 lines (55 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _utilities = require('./utilities');
var hooks = {};
var boxes = {};
var box_callbacks = {};
var idGenerator = 0;
var event_system = {
register: function register(hook_name, callback) {
if (!hooks[hook_name]) {
hooks[hook_name] = {};
}
var id = idGenerator++;
hooks[hook_name][id] = callback;
return function () {
hooks[hook_name][id] = false;
};
},
trigger: function trigger(hook_name) {
var triggered_hooks = hooks[hook_name];
if (triggered_hooks) {
(0, _utilities.array_from_set)(triggered_hooks).forEach(function (id) {
return triggered_hooks[id]();
});
}
},
cancel_all: function cancel_all(hook_name) {
hooks[hook_name] = {};
},
post: function post(hook_name, content) {
boxes[hook_name] = content;
var triggered_hooks = box_callbacks[hook_name];
if (triggered_hooks) {
(0, _utilities.array_from_set)(triggered_hooks).forEach(function (id) {
return triggered_hooks[id](content);
});
}
},
retrieve: function retrieve(hook_name, callback) {
if (!box_callbacks[hook_name]) {
box_callbacks[hook_name] = {};
}
var id = idGenerator++;
box_callbacks[hook_name][id] = callback;
if (boxes[hook_name] != null) {
callback(boxes[hook_name]);
}
return function () {
box_callbacks[hook_name][id] = false;
};
}
};
exports.default = event_system;