import { NativeModules, NativeEventEmitter, EventEmitter, EmitterSubscription } from 'react-native'; import { ComponentDidAppearEvent, ComponentDidDisappearEvent, NavigationButtonPressedEvent, SearchBarUpdatedEvent, SearchBarCancelPressedEvent, PreviewCompletedEvent, ModalDismissedEvent, ScreenPoppedEvent, ModalAttemptedToDismissEvent } from '../interfaces/ComponentEvents'; import { CommandCompletedEvent, BottomTabSelectedEvent } from '../interfaces/Events'; export class NativeEventsReceiver { private emitter: EventEmitter; constructor() { // NOTE: This try catch is workaround for integration tests // TODO: mock NativeEventEmitter in integration tests rather done adding try catch in source code try { this.emitter = new NativeEventEmitter(NativeModules.RNNEventEmitter); } catch (e) { this.emitter = { addListener: () => { return { remove: () => undefined }; } } as any as EventEmitter; } } public registerAppLaunchedListener(callback: () => void): EmitterSubscription { return this.emitter.addListener('RNN.AppLaunched', callback); } public registerComponentDidAppearListener(callback: (event: ComponentDidAppearEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.ComponentDidAppear', callback); } public registerComponentDidDisappearListener(callback: (event: ComponentDidDisappearEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.ComponentDidDisappear', callback); } public registerNavigationButtonPressedListener(callback: (event: NavigationButtonPressedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.NavigationButtonPressed', callback); } public registerModalDismissedListener(callback: (event: ModalDismissedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.ModalDismissed', callback); } public registerModalAttemptedToDismissListener(callback: (event: ModalAttemptedToDismissEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.ModalAttemptedToDismiss', callback); } public registerSearchBarUpdatedListener(callback: (event: SearchBarUpdatedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.SearchBarUpdated', callback); } public registerSearchBarCancelPressedListener(callback: (event: SearchBarCancelPressedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.SearchBarCancelPressed', callback); } public registerPreviewCompletedListener(callback: (event: PreviewCompletedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.PreviewCompleted', callback); } public registerCommandCompletedListener(callback: (data: CommandCompletedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.CommandCompleted', callback); } public registerBottomTabSelectedListener(callback: (data: BottomTabSelectedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.BottomTabSelected', callback); } public registerScreenPoppedListener(callback: (event: ScreenPoppedEvent) => void): EmitterSubscription { return this.emitter.addListener('RNN.ScreenPopped', callback); } }