instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
51 lines (47 loc) • 1.2 kB
JSX
import {array_from_set} from './utilities'
let hooks = {}
let boxes = {}
let box_callbacks = {}
let idGenerator = 0
const event_system = {
register(hook_name, callback) {
if (!hooks[hook_name]) {
hooks[hook_name] = {}
}
let id = idGenerator++
hooks[hook_name][id] = callback
return () => {
hooks[hook_name][id] = false
}
},
trigger(hook_name) {
let triggered_hooks = hooks[hook_name]
if (triggered_hooks) {
array_from_set(triggered_hooks).forEach((id) => triggered_hooks[id]())
}
},
cancel_all(hook_name) {
hooks[hook_name] = {}
},
post(hook_name, content) {
boxes[hook_name] = content
let triggered_hooks = box_callbacks[hook_name]
if (triggered_hooks) {
array_from_set(triggered_hooks).forEach((id) => triggered_hooks[id](content))
}
},
retrieve(hook_name, callback) {
if (!box_callbacks[hook_name]) {
box_callbacks[hook_name] = {}
}
let id = idGenerator++
box_callbacks[hook_name][id] = callback
if (boxes[hook_name] != null) {
callback(boxes[hook_name])
}
return () => {
box_callbacks[hook_name][id] = false
}
},
}
export default event_system