UNPKG

@adyen/react-native

Version:

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

172 lines (168 loc) 8.58 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"); 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 (nativeComponent.events.includes(_constants.Event.onAdditionalDetails)) { subscriptions.current.push(eventEmitter.addListener(_constants.Event.onAdditionalDetails, data => onAdditionalDetails?.(data, nativeComponent))); } const onDisableStoredPaymentMethodCallback = configuration.dropin?.onDisableStoredPaymentMethod; if (onDisableStoredPaymentMethodCallback && nativeComponent.events.includes(_constants.Event.onDisableStoredPaymentMethod)) { const nativeModule = nativeComponent; subscriptions.current.push(eventEmitter.addListener(_constants.Event.onDisableStoredPaymentMethod, data => onDisableStoredPaymentMethodCallback(data, () => { nativeModule.removeStored(true); }, () => { nativeModule.removeStored(false); }))); } const onUpdateAddressCallback = configuration.card?.onUpdateAddress; const onConfirmAddressCallback = configuration.card?.onConfirmAddress; if (onUpdateAddressCallback && onConfirmAddressCallback && nativeComponent.events.includes(_constants.Event.onAddressUpdate) && nativeComponent.events.includes(_constants.Event.onAddressConfirm)) { const nativeModule = nativeComponent; subscriptions.current.push(eventEmitter.addListener(_constants.Event.onAddressUpdate, async prompt => { onUpdateAddressCallback(prompt, nativeModule); }), eventEmitter.addListener(_constants.Event.onAddressConfirm, address => { onConfirmAddressCallback(address, nativeModule); })); } const onBalanceCheckCallback = configuration.partialPayment?.onBalanceCheck; const onOrderRequestCallback = configuration.partialPayment?.onOrderRequest; const onOrderCancelCallback = configuration.partialPayment?.onOrderCancel; if (onBalanceCheckCallback && onOrderRequestCallback && onOrderCancelCallback && nativeComponent.events.includes(_constants.Event.onCheckBalance) && nativeComponent.events.includes(_constants.Event.onRequestOrder) && nativeComponent.events.includes(_constants.Event.onCancelOrder)) { const component = nativeComponent; subscriptions.current.push(eventEmitter.addListener(_constants.Event.onCheckBalance, async paymentData => { onBalanceCheckCallback(paymentData, balance => { component.provideBalance(true, balance, undefined); }, error => { component.provideBalance(false, undefined, error); }); }), eventEmitter.addListener(_constants.Event.onRequestOrder, () => { onOrderRequestCallback(order => { component.provideOrder(true, order, undefined); }, error => { component.provideOrder(false, undefined, error); }); }), eventEmitter.addListener(_constants.Event.onCancelOrder, ({ order, shouldUpdatePaymentMethods }) => { onOrderCancelCallback(order, shouldUpdatePaymentMethods, component); })); } const onBinLookupCallback = configuration.card?.onBinLookup; if (onBinLookupCallback && nativeComponent.events.includes(_constants.Event.onBinLookuop)) { subscriptions.current.push(eventEmitter.addListener(_constants.Event.onBinLookuop, onBinLookupCallback)); } const onBinValueCallback = configuration.card?.onBinValue; if (onBinValueCallback && nativeComponent.events.includes(_constants.Event.onBinValue)) { subscriptions.current.push(eventEmitter.addListener(_constants.Event.onBinValue, onBinValueCallback)); } }, [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