Files
awx/awx/ui/client/features/output/message.service.js
2018-05-07 02:23:39 -04:00

42 lines
915 B
JavaScript

function MessageService () {
const listeners = {};
const registry = {};
this.subscribe = (key, listener) => {
registry[key] = registry[key] || 0;
listeners[key] = listeners[key] || {};
listeners[key][registry[key]] = listener;
const unsubscribe = this.createCallback(key, registry[key]);
registry[key]++;
return unsubscribe;
};
this.dispatch = (key, data) => {
if (!listeners[key]) {
return;
}
const indices = Object.keys(listeners[key]);
for (let i = 0; i < indices.length; i++) {
listeners[key][indices[i]](data);
}
};
this.createCallback = (key, index) => {
const callback = () => {
if (listeners[key]) {
delete listeners[key][index];
}
};
return callback;
};
}
export default MessageService;