UNPKG

@adyen/react-native

Version:

Wraps Adyen Checkout Drop-In and Components for iOS and Android for convenient use with React Native

45 lines (44 loc) 1.8 kB
"use strict"; import { useCallback, useEffect, useRef } from 'react'; import { EmbeddedComponentBus } from '../modules/embedded/EmbeddedComponentBus'; import { EmbeddedComponentProxy } from '../modules/embedded/EmbeddedComponentProxy'; import { startEventListeners } from '../components/utils/startEventListeners'; export function useSubscriptionManager(eventHandlerRefs) { const subscriptions = useRef(new Map()); const removeEventListeners = useCallback(nativeComponent => { const listeners = subscriptions.current.get(nativeComponent.name) ?? []; listeners.forEach(s => s.remove()); subscriptions.current.delete(nativeComponent.name); }, []); const storeEventListeners = useCallback((nativeComponent, listeners) => { subscriptions.current.set(nativeComponent.name, listeners); }, []); const subscribe = useCallback(viewId => { if (subscriptions.current.has(viewId)) return; EmbeddedComponentBus.subscribe(viewId); const proxy = new EmbeddedComponentProxy(EmbeddedComponentBus, viewId); const bag = startEventListeners(proxy, eventHandlerRefs, viewId); subscriptions.current.set(viewId, bag); }, [eventHandlerRefs]); const unsubscribe = useCallback(viewId => { const bag = subscriptions.current.get(viewId); bag?.forEach(s => s.remove()); subscriptions.current.delete(viewId); EmbeddedComponentBus.unsubscribe(viewId); }, []); function cleanup() { subscriptions.current.forEach((listeners, viewId) => { listeners.forEach(s => s.remove()); EmbeddedComponentBus.unsubscribe(viewId); }); subscriptions.current.clear(); } useEffect(() => cleanup, []); return { subscribe, unsubscribe, removeEventListeners, storeEventListeners }; } //# sourceMappingURL=useSubscriptionManager.js.map