UNPKG

@adyen/react-native

Version:

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

49 lines (48 loc) 2.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSubscriptionManager = useSubscriptionManager; var _react = require("react"); var _EmbeddedComponentBus = require("../modules/embedded/EmbeddedComponentBus"); var _EmbeddedComponentProxy = require("../modules/embedded/EmbeddedComponentProxy"); var _startEventListeners = require("../components/utils/startEventListeners"); function useSubscriptionManager(eventHandlerRefs) { const subscriptions = (0, _react.useRef)(new Map()); const removeEventListeners = (0, _react.useCallback)(nativeComponent => { const listeners = subscriptions.current.get(nativeComponent.name) ?? []; listeners.forEach(s => s.remove()); subscriptions.current.delete(nativeComponent.name); }, []); const storeEventListeners = (0, _react.useCallback)((nativeComponent, listeners) => { subscriptions.current.set(nativeComponent.name, listeners); }, []); const subscribe = (0, _react.useCallback)(viewId => { if (subscriptions.current.has(viewId)) return; _EmbeddedComponentBus.EmbeddedComponentBus.subscribe(viewId); const proxy = new _EmbeddedComponentProxy.EmbeddedComponentProxy(_EmbeddedComponentBus.EmbeddedComponentBus, viewId); const bag = (0, _startEventListeners.startEventListeners)(proxy, eventHandlerRefs, viewId); subscriptions.current.set(viewId, bag); }, [eventHandlerRefs]); const unsubscribe = (0, _react.useCallback)(viewId => { const bag = subscriptions.current.get(viewId); bag?.forEach(s => s.remove()); subscriptions.current.delete(viewId); _EmbeddedComponentBus.EmbeddedComponentBus.unsubscribe(viewId); }, []); function cleanup() { subscriptions.current.forEach((listeners, viewId) => { listeners.forEach(s => s.remove()); _EmbeddedComponentBus.EmbeddedComponentBus.unsubscribe(viewId); }); subscriptions.current.clear(); } (0, _react.useEffect)(() => cleanup, []); return { subscribe, unsubscribe, removeEventListeners, storeEventListeners }; } //# sourceMappingURL=useSubscriptionManager.js.map