@applicaster/zapp-react-dom-app
Version:
Zapp App Component for Applicaster's Quick Brick React Native App
61 lines (46 loc) • 1.38 kB
JavaScript
const _DeviceEventEmitter = {};
export const DeviceEventEmitter = (function () {
let listeners = {};
function getListeners(eventName) {
if (!eventName) {
return listeners;
}
return listeners[eventName] || [];
}
function addListener(eventName, listener) {
const currentListeners = getListeners(eventName);
listeners[eventName] = [listener, ...currentListeners];
return {
remove() {
const listenersForEvent = getListeners(eventName);
listeners[eventName] = listenersForEvent.filter(
(_listener) => _listener !== listener
);
},
};
}
function removeListener(eventName, listener) {
const listenersForEvent = getListeners(eventName);
listeners[eventName] = listenersForEvent.filter(
(_listener) => _listener !== listener
);
}
function emitEvent(eventName, payload) {
const eventListeners = getListeners(eventName);
eventListeners.forEach((eventListener) => {
eventListener(payload);
});
}
const deviceEventEmitterInstance = {
addListener,
removeListener,
emitEvent,
};
if (process.env.NODE_ENV === "test") {
deviceEventEmitterInstance.getListeners = getListeners;
deviceEventEmitterInstance.reset = function () {
listeners = {};
};
}
return deviceEventEmitterInstance;
})(_DeviceEventEmitter);