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