@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
28 lines (23 loc) • 1.02 kB
text/typescript
import React from "react";
import { DeviceEventEmitter, NativeModules, Platform } from "react-native";
const { ReactNativeEventBusBridge } = NativeModules;
export const useListenEventBusEvent = (
subscriptionID: string, // subsciption ID to manage it, will be used as a event name for DeviceEventEmitter
source: string,
events: string[],
handler: (event) => void
) => {
React.useEffect(() => {
// TODO: remove after implementing ReactNativeEventBusBridge on iOS
if (Platform.OS === "android") {
// subscribe to DeviceEventEmitter using subsciption ID
const sub = DeviceEventEmitter.addListener(subscriptionID, handler);
// ask native to start routing these events to RN
ReactNativeEventBusBridge.subscribe(subscriptionID, { [source]: events });
return () => {
ReactNativeEventBusBridge.unsubscribe(subscriptionID); // ask EventBus to stop routing these events to RN
sub.remove(); // stop listening to DeviceEventEmitter
};
}
}, []);
};