import { NativeModule } from 'react-native'; import { NativeEventEmitter, EmitterSubscription, Platform, DeviceEventEmitter, } from 'react-native'; import { Modules } from './Modules'; export default class Broadcaster { private emitter: NativeEventEmitter; constructor(module: NativeModule) { this.emitter = new NativeEventEmitter(module); } /** * Creates an event listener for the native function * @param key Key for the listener * @param callback Value returned for the listener callback * @returns Subscription */ async addListener( id: string, callback: (value: any) => void ): Promise { await Modules.Shared.attachEmitter(id); if (Platform.OS === 'android') { return DeviceEventEmitter.addListener(id, (event: any) => callback(event) ); } if (Platform.OS === 'ios') { return this.emitter.addListener(id, (event: any) => callback(event)); } return undefined; } }