UNPKG

boxpay-checkout-reactnative-sdk

Version:
268 lines (267 loc) 8.36 kB
"use strict"; import { APIStatus, TransactionStatus } from "../interface.js"; import { transformAndFilterList } from "../utility.js"; import Toast from 'react-native-toast-message'; import fetchPaymentMethods from "../postRequest/fetchPaymentMethods.js"; import fetchRecommendedInstruments from "../postRequest/fetchRecommendedInstruments.js"; export function handlePaymentResponse({ response, upiId, checkoutDetailsErrorMessage, onSetStatus, onSetTransactionId, onSetPaymentUrl, onSetPaymentHtml, onSetFailedMessage, onShowFailedModal, onShowSuccessModal, onShowSessionExpiredModal, onNavigateToTimer, onOpenQr, onOpenUpiIntent, setLoading }) { switch (response.apiStatus) { case APIStatus.Success: { const apidata = response.data; const { status, reason, reasonCode } = apidata.status; const actionsArray = apidata.actions || []; const txnStatus = status.toUpperCase(); onSetStatus(status); onSetTransactionId(apidata.transactionId); switch (txnStatus) { case TransactionStatus.RequiresAction: { if (actionsArray.length > 0) { const action = actionsArray[0]; switch (action.type) { case 'html': if (action.htmlPageString && onSetPaymentHtml) { onSetPaymentHtml(action.htmlPageString); } break; case 'redirect': if (action.url && onSetPaymentUrl) { onSetPaymentUrl(action.url); } break; case 'appRedirect': if (action.url && onOpenUpiIntent) { onOpenUpiIntent(action.url); // 👈 launch UPI intent } break; case 'qrCode': if (action.content && onOpenQr) { onOpenQr(action.content); setLoading(false); } break; default: break; } } else { setLoading(false); if (upiId && onNavigateToTimer) { onNavigateToTimer(upiId); } } break; } case TransactionStatus.Failed: case TransactionStatus.Rejected: { const fallback = checkoutDetailsErrorMessage; const errorMessage = reasonCode?.startsWith('UF') ? reason?.includes(':') ? reason.split(':')[1]?.trim() ?? fallback : reason ?? fallback : fallback; if (onSetFailedMessage && onShowFailedModal) { onSetFailedMessage(errorMessage); onSetFailedMessage(errorMessage); onSetStatus(TransactionStatus.Failed); onSetFailedMessage(errorMessage); onSetStatus(TransactionStatus.Failed); onShowFailedModal(); } setLoading(false); break; } case TransactionStatus.Approved: case TransactionStatus.Success: case TransactionStatus.Paid: { if (onShowSuccessModal) { onShowSuccessModal(apidata.transactionTimestampLocale ?? ''); } setLoading(false); break; } case TransactionStatus.Expired: { if (onShowSessionExpiredModal) { onShowSessionExpiredModal(); } setLoading(false); break; } default: { break; } } } break; case APIStatus.Failed: { if (onSetFailedMessage && onShowFailedModal) { onSetFailedMessage(response.data.status.reason); onShowFailedModal(); } onSetStatus(TransactionStatus.Failed); setLoading(false); } } } export function handleFetchStatusResponseHandler({ response, checkoutDetailsErrorMessage, onSetStatus, onSetTransactionId, onSetFailedMessage, onShowFailedModal, onShowSuccessModal, onShowSessionExpiredModal, setLoading, stopBackgroundApiTask }) { switch (response.apiStatus) { case APIStatus.Success: { const apidata = response.data; const status = apidata.status; const reasonCode = apidata.reasonCode; const reason = apidata.reason; const txnStatus = status.toUpperCase(); onSetStatus(status); onSetTransactionId(apidata.transactionId); switch (txnStatus) { case TransactionStatus.Failed: case TransactionStatus.Rejected: { const fallback = checkoutDetailsErrorMessage; const errorMessage = reasonCode?.startsWith('UF') ? reason?.includes(':') ? reason.split(':')[1]?.trim() ?? fallback : reason ?? fallback : fallback; onSetFailedMessage(errorMessage); onSetStatus(TransactionStatus.Failed); onShowFailedModal(); stopBackgroundApiTask?.(); setLoading?.(false); break; } case TransactionStatus.Approved: case TransactionStatus.Success: case TransactionStatus.Paid: { onSetStatus(TransactionStatus.Success); onShowSuccessModal(apidata.transactionTimestampLocale ?? ''); stopBackgroundApiTask?.(); setLoading?.(false); break; } case TransactionStatus.Expired: { onSetStatus(TransactionStatus.Expired); onShowSessionExpiredModal(); stopBackgroundApiTask?.(); setLoading?.(false); break; } default: { break; } } } break; case APIStatus.Failed: { onSetFailedMessage(response.data.status.reason); onSetStatus(TransactionStatus.Failed); onShowFailedModal(); setLoading?.(false); } } } export async function fetchPaymentMethodHandler({ paymentType, setList }) { const response = await fetchPaymentMethods(); switch (response.apiStatus) { case APIStatus.Success: { const paymentMethodList = transformAndFilterList(response.data, paymentType); setList(paymentMethodList); break; } case APIStatus.Failed: { Toast.show({ type: 'error', text1: 'Oops!', text2: 'Something went wrong. Please try again.' }); break; } default: break; } } export async function fetchSavedInstrumentsHandler({ setRecommendedList, setUpiInstrumentList, setCardInstrumentList }) { const response = await fetchRecommendedInstruments(); switch (response.apiStatus) { case APIStatus.Success: { const instrumentList = response.data; const upiList = []; const cardList = []; instrumentList.forEach(instrument => { const item = { type: instrument.type, id: instrument.instrumentRef, displayName: instrument.cardNickName ? instrument.cardNickName : '', displayValue: instrument.displayValue, iconUrl: instrument.logoUrl ? instrument.logoUrl : '///', instrumentTypeValue: instrument.instrumentRef, isSelected: false }; if (instrument.type.toLowerCase() === 'upi') { upiList.push(item); } else if (instrument.type.toLowerCase() === 'card') { cardList.push(item); } }); setRecommendedList(upiList.slice(0, 2)); setUpiInstrumentList(upiList); setCardInstrumentList(cardList); break; } case APIStatus.Failed: { Toast.show({ type: 'error', text1: 'Oops!', text2: 'Something went wrong. Please try again.' }); break; } default: break; } } //# sourceMappingURL=handlePaymentResponseHandler.js.map