UNPKG

@adyen/react-native

Version:

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

140 lines (136 loc) 6.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useAdyenCheckout = exports.AdyenCheckout = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _constants = require("./core/constants"); var _SessionHelperModule = require("./modules/SessionHelperModule"); var _getWrapper = require("./wrappers/getWrapper"); var _utils = require("./core/utils"); var _AddressLookupComponentWrapper = require("./wrappers/AddressLookupComponentWrapper"); var _ActionHandlingComponentWrapper = require("./wrappers/ActionHandlingComponentWrapper"); var _RemoveStoredPaymentComponentWrapper = require("./wrappers/RemoveStoredPaymentComponentWrapper"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /** * Returns AdyenCheckout context. This context allows you to initiate payment with Drop-in or any payment method available in `paymentMethods` collection. */ const AdyenCheckoutContext = /*#__PURE__*/(0, _react.createContext)(null); /** * Returns AdyenCheckout context. This context allows you to initiate payment with Drop-in or any payment method available in `paymentMethods` collection. */ const useAdyenCheckout = () => { const context = (0, _react.useContext)(AdyenCheckoutContext); if (context != null) { return context; } throw new Error(_constants.MISSING_CONTEXT_ERROR); }; /** * Props for AdyenCheckout */ exports.useAdyenCheckout = useAdyenCheckout; const AdyenCheckout = ({ config, paymentMethods, session, onSubmit, onError, onAdditionalDetails, onComplete, children }) => { const subscriptions = (0, _react.useRef)([]); const [sessionStorage, setSession] = (0, _react.useState)(undefined); (0, _react.useEffect)(() => { return () => { removeEventListeners(); }; }, []); (0, _react.useEffect)(() => { if (session) { createSession(); } }, [session]); const submitPayment = (0, _react.useCallback)((configuration, data, nativeComponent, extra) => { const payload = { ...data, returnUrl: data.returnUrl ?? configuration.returnUrl }; onSubmit?.(payload, nativeComponent, extra); }, [onSubmit]); const removeEventListeners = (0, _react.useCallback)(() => { subscriptions.current.forEach(s => s.remove()); }, [subscriptions]); const startEventListeners = (0, _react.useCallback)((configuration, nativeComponent) => { const eventEmitter = new _reactNative.NativeEventEmitter(nativeComponent); subscriptions.current = [eventEmitter.addListener(_constants.Event.onSubmit, response => submitPayment(configuration, response.paymentData, nativeComponent, response.extra)), eventEmitter.addListener(_constants.Event.onError, error => onError?.(error, nativeComponent))]; if (nativeComponent.events.includes(_constants.Event.onComplete)) { subscriptions.current.push(eventEmitter.addListener(_constants.Event.onComplete, data => onComplete?.(data, nativeComponent))); } if ((0, _ActionHandlingComponentWrapper.isActionComponent)(nativeComponent)) { subscriptions.current.push(eventEmitter.addListener(_constants.Event.onAdditionalDetails, data => onAdditionalDetails?.(data, nativeComponent))); } if ((0, _RemoveStoredPaymentComponentWrapper.isRemovesStoredPaymentComponent)(nativeComponent)) { console.debug('Subcribing for onDisableStoredPaymentMethod'); subscriptions.current.push(eventEmitter.addListener(_constants.Event.onDisableStoredPaymentMethod, data => configuration.dropin?.onDisableStoredPaymentMethod?.(data, () => { nativeComponent.removeStored(true); }, () => { nativeComponent.removeStored(false); }))); } if ((0, _AddressLookupComponentWrapper.isAddressLooker)(nativeComponent)) { subscriptions.current.push(eventEmitter.addListener(_constants.Event.onAddressUpdate, async prompt => { configuration.card?.onUpdateAddress?.(prompt, nativeComponent); })); subscriptions.current.push(eventEmitter.addListener(_constants.Event.onAddressConfirm, address => { configuration.card?.onConfirmAddress?.(address, nativeComponent); })); } }, [submitPayment, onAdditionalDetails, onComplete, onError, subscriptions]); const start = (0, _react.useCallback)(typeName => { removeEventListeners(); const currentPaymentMethods = (0, _utils.checkPaymentMethodsResponse)(paymentMethods ?? sessionStorage?.paymentMethods); const { nativeComponent, paymentMethod } = (0, _getWrapper.getWrapper)(typeName, currentPaymentMethods); (0, _utils.checkConfiguration)(config); startEventListeners(config, nativeComponent); if (paymentMethod) { const singlePaymentMethods = { paymentMethods: [paymentMethod] }; const singlePaymentConfig = { ...config, dropin: { skipListWhenSinglePaymentMethod: true } }; nativeComponent.open(singlePaymentMethods, singlePaymentConfig); } else { nativeComponent.open(currentPaymentMethods, config); } }, [config, paymentMethods, sessionStorage, startEventListeners, removeEventListeners]); const createSession = (0, _react.useCallback)(() => { _SessionHelperModule.SessionHelper.createSession(session, config).then(sessionResponse => { setSession(sessionResponse); }).catch(e => { onError({ message: JSON.stringify(e), errorCode: 'sessionError' }, _SessionHelperModule.SessionHelper); }); }, [session, config, onError]); return /*#__PURE__*/_react.default.createElement(AdyenCheckoutContext.Provider, { value: { start, config, paymentMethods: paymentMethods ?? sessionStorage?.paymentMethods } }, children); }; exports.AdyenCheckout = AdyenCheckout; //# sourceMappingURL=AdyenCheckoutContext.js.map