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