UNPKG

@adyen/react-native

Version:

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

134 lines (132 loc) 5.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AdyenCheckout = void 0; var _react = _interopRequireWildcard(require("react")); var _core = require("../core"); var _useAdyenCheckout = require("../hooks/useAdyenCheckout"); var _getWrapper = require("../modules/base/getWrapper"); var _SessionHelperModule = require("../modules/session/SessionHelperModule"); var _checkConfiguration = require("./utils/checkConfiguration"); var _checkPaymentMethodsResponse = require("./utils/checkPaymentMethodsResponse"); var _startEventListeners = require("./utils/startEventListeners"); var _useComponent = require("../hooks/useComponent"); var _useSubscriptionManager = require("../hooks/useSubscriptionManager"); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } /** * Props for AdyenCheckout */ const AdyenCheckout = ({ config, paymentMethods, session, onSubmit, onError, onAdditionalDetails, onComplete, children }) => { const onCompleteRef = (0, _react.useRef)(onComplete); const onErrorRef = (0, _react.useRef)(onError); const onSubmitRef = (0, _react.useRef)(onSubmit); const onAdditionalDetailsRef = (0, _react.useRef)(onAdditionalDetails); const configRef = (0, _react.useRef)(config); const eventHandlerRefs = (0, _react.useMemo)(() => ({ onSubmit: onSubmitRef, onError: onErrorRef, onComplete: onCompleteRef, onAdditionalDetails: onAdditionalDetailsRef, config: configRef }), []); const { subscribe, unsubscribe, removeEventListeners, storeEventListeners } = (0, _useSubscriptionManager.useSubscriptionManager)(eventHandlerRefs); const [sessionContext, setSessionContext] = (0, _react.useState)(undefined); const currentPaymentMethods = (0, _react.useMemo)(() => { return paymentMethods ?? sessionContext?.paymentMethods; }, [paymentMethods, sessionContext]); (0, _react.useEffect)(() => { (0, _checkConfiguration.checkConfiguration)(config); configRef.current = config; }, [config]); (0, _react.useEffect)(() => { onCompleteRef.current = onComplete; }, [onComplete]); (0, _react.useEffect)(() => { onErrorRef.current = onError; }, [onError]); (0, _react.useEffect)(() => { onSubmitRef.current = onSubmit; }, [onSubmit]); (0, _react.useEffect)(() => { onAdditionalDetailsRef.current = onAdditionalDetails; }, [onAdditionalDetails]); (0, _react.useEffect)(() => { const completeHandler = result => onCompleteRef.current?.(result, _SessionHelperModule.SessionHelper); const errorHandler = error => onErrorRef.current?.(error, _SessionHelperModule.SessionHelper); _SessionHelperModule.SessionHelper.assignCompletionHandler(completeHandler); _SessionHelperModule.SessionHelper.assignErrorHandler(errorHandler); return () => { _SessionHelperModule.SessionHelper.removeAllListeners(); _SessionHelperModule.SessionHelper.hide(true); }; }, []); (0, _react.useEffect)(() => { if (session && !sessionContext) { _SessionHelperModule.SessionHelper.createSession(session, configRef.current).then(sessionResponse => setSessionContext(sessionResponse)).catch(error => { const errorDTO = { message: String(error), errorCode: _core.ErrorCode.sessionError }; onErrorRef.current?.(errorDTO, _SessionHelperModule.SessionHelper); }); } }, [session, sessionContext]); const start = (0, _react.useCallback)(typeName => { const validPaymentMethods = (0, _checkPaymentMethodsResponse.checkPaymentMethodsResponse)(currentPaymentMethods); const { nativeComponent, paymentMethod } = (0, _getWrapper.getWrapper)(typeName, validPaymentMethods); removeEventListeners(nativeComponent); const listeners = (0, _startEventListeners.startEventListeners)(nativeComponent, eventHandlerRefs); storeEventListeners(nativeComponent, listeners); if (paymentMethod) { const singlePaymentMethods = { paymentMethods: [paymentMethod] }; const singlePaymentConfig = { ...configRef.current, dropin: { skipListWhenSinglePaymentMethod: true } }; nativeComponent.open(singlePaymentMethods, singlePaymentConfig); } else { nativeComponent.open(validPaymentMethods, configRef.current); } }, [eventHandlerRefs, currentPaymentMethods, removeEventListeners, storeEventListeners]); const checkoutContextValue = (0, _react.useMemo)(() => ({ start, config, paymentMethods: currentPaymentMethods, isReady: currentPaymentMethods !== undefined }), [currentPaymentMethods, start, config]); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_useAdyenCheckout.AdyenCheckoutContext.Provider, { value: checkoutContextValue, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_useComponent.AdyenComponentContext.Provider, { value: (0, _react.useMemo)(() => ({ subscribe, unsubscribe }), [subscribe, unsubscribe]), children: children }) }); }; exports.AdyenCheckout = AdyenCheckout; //# sourceMappingURL=AdyenCheckout.js.map