UNPKG

@ua/react-native-airship

Version:
74 lines (70 loc) 2.03 kB
"use strict"; /* Copyright Airship and Contributors */ import { NativeEventEmitter, Platform, AppRegistry } from 'react-native'; /** * SDK event emitter. * * @hidden */ export class UAEventEmitter { listeners = new Map(); constructor(nativeModule) { this.nativeModule = nativeModule; this.eventEmitter = new NativeEventEmitter(nativeModule); if (Platform.OS === 'android') { AppRegistry.registerHeadlessTask('AirshipAndroidBackgroundEventTask', () => { return () => this.dispatchEvents(true); }); } this.eventEmitter.addListener('com.airship.pending_events', async () => { return this.dispatchEvents(false); }); } removeListener(eventType, listener) { var typedListeners = this.listeners.get(eventType); if (typedListeners) { typedListeners = typedListeners.filter(obj => obj !== listener); this.listeners.set(eventType, typedListeners); } } addListener(eventType, listener) { if (!this.listeners.get(eventType)) { this.listeners.set(eventType, new Array()); } this.listeners.get(eventType)?.push(listener); this.nativeModule.airshipListenerAdded(eventType); } removeAllListeners(eventType) { this.listeners.set(eventType, new Array()); } async dispatchEvents(isHeadlessJS) { let actions = Array.from(this.listeners.keys()).map(async key => { let typedListeners = this.listeners.get(key); if (typedListeners == null) { return Promise.resolve(); } let events = await this.nativeModule.takePendingEvents(key, isHeadlessJS); return Promise.all(typedListeners.map(async listener => { for (const event of events) { await listener(event); } })); }); return Promise.all(actions); } } /** * A listener subscription. */ export class Subscription { constructor(onRemove) { this.onRemove = onRemove; } /** * Removes the listener. */ remove() { this.onRemove(); } } //# sourceMappingURL=UAEventEmitter.js.map