@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
JavaScript
;
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