import { ReactElement } from 'react'; import type { CreditCardFormData } from '../utils/validation-schemas'; import { CardType, Installment, RewardItem } from './payment.types'; export type PaymentMethodSelectorProps = { cards: any[]; selectedMethod: 'stored_card' | 'new_card'; onMethodChange: (method: 'stored_card' | 'new_card') => void; texts: MasterpassRestOptionTexts; }; export type CardListProps = { cards: any[]; onCardSelect: (card: any) => void; selectedCard?: any | null; onRemove?: (card: any) => void; removingCardId?: string | null; cvc?: string; onCvcChange?: (cvc: string) => void; cvcRequired?: boolean; availableRewards?: RewardItem[]; selectedRewards?: RewardItem[]; isLoadingRewards?: boolean; isConfirmingRewards?: boolean; onOpenRewardModal?: () => void; onConfirmRewards?: (selected: RewardItem[]) => Promise | void; rewardCurrency?: string; rewardPayableAmount?: string | number | null; texts: MasterpassRestOptionTexts; }; export type CreditCardFormProps = { onSaveCard?: (data: CreditCardFormData) => void; isLoading?: boolean; showSaveOption?: boolean; initialValues?: Partial; onBinChange?: (bin: string) => Promise; texts: MasterpassRestOptionTexts; }; export type InstallmentListProps = { installments: Installment[]; cardType: CardType | null; onInstallmentSelect: (installment: Installment) => void; selectedInstallment?: Installment | null; isLoading?: boolean; onProceedToPayment?: () => void; paymentLoading?: boolean; texts: MasterpassRestOptionTexts; }; export type LinkModalProps = { open: boolean; onClose: () => void; onConfirm: () => void; texts: MasterpassRestOptionTexts; }; export type OTPModalProps = { open: boolean; onClose: () => void; onSubmit: (otp: string) => Promise<{ success: boolean; requiresOTP?: boolean; message?: string }>; type: 'RTA' | 'OTP' | 'CVV'; responseCode?: string; description?: string; texts: MasterpassRestOptionTexts; }; export type RewardSelectionModalProps = { open: boolean; onClose: () => void; onConfirm: (selected: RewardItem[]) => Promise | void; rewards: RewardItem[]; selectedRewards: RewardItem[]; isLoading?: boolean; currency?: string; payableAmount?: string | number | null; texts: MasterpassRestOptionTexts; }; export type ConfirmationModalProps = { open: boolean; onClose: () => void; onConfirm: () => void; title: React.ReactNode | string; message: string; confirmText?: string; cancelText?: string; isLoading?: boolean; loadingText?: string; texts: MasterpassRestOptionTexts; }; export type ErrorDisplayProps = { error: any; onDismiss: () => void; getErrorInfo: (error: any) => { message: string; type: string } | null; }; export type LoadingStateProps = { message: string; }; export type EmptyStateProps = { paymentMethod: 'stored_card' | 'new_card'; cardNumberLength: number; isCheckoutLoading: boolean; }; export type MasterpassRestOptionRenderProps = { paymentMethod: 'stored_card' | 'new_card'; hasStoredCards: boolean; shouldShowDirectForm: boolean; cvc: string; error: any; /** True while a Masterpass transaction started on this tab has not settled. */ isPaymentPending: boolean; dismissPaymentPending: () => void; accountData: any; accountStatus: any; modalState: any; paymentState: any; handlePaymentMethodChange: (method: 'stored_card' | 'new_card') => void; handleCardSelect: (card: any) => Promise; updateModalState: (updates: Partial) => void; handleRemoveCard: (card: any) => void; confirmRemoveCard: () => Promise; handleCvcChange: (cvc: string) => void; handleSaveCard: (cardData: any) => Promise; handleBinChange: (bin: string) => Promise; handleInstallmentSelect: (installment: any) => Promise; handleProceedToPayment: () => Promise; handleLinkConfirm: () => Promise; handleOTPSubmit: ( otp: string ) => Promise<{ success: boolean; message?: string }>; onCloseError: () => void; isCheckoutLoading: boolean; isInstallmentLoading: boolean; isPrepareLoading: boolean; isFinalizeLoading: boolean; isProcessingPayment: boolean; isRewardsQueryLoading: boolean; isRewardsSelectLoading: boolean; openRewardModal: () => void; closeRewardModal: () => void; handleConfirmRewards: (selected: RewardItem[]) => Promise; payableAmount: string | null; texts: MasterpassRestOptionTexts; components: { PaymentMethodSelector: React.ComponentType; CardList: React.ComponentType; CreditCardForm: React.ComponentType; InstallmentList: React.ComponentType; LinkModal: React.ComponentType; OTPModal: React.ComponentType; ConfirmationModal: React.ComponentType; RewardSelectionModal: React.ComponentType; }; }; export type MasterpassRestOptionCustomRender = { paymentMethodSelector?: (props: PaymentMethodSelectorProps) => ReactElement; cardList?: (props: CardListProps) => ReactElement; creditCardForm?: (props: CreditCardFormProps) => ReactElement; installmentList?: (props: InstallmentListProps) => ReactElement; linkModal?: (props: LinkModalProps) => ReactElement; otpModal?: (props: OTPModalProps) => ReactElement; confirmationModal?: (props: ConfirmationModalProps) => ReactElement; rewardSelectionModal?: (props: RewardSelectionModalProps) => ReactElement; errorDisplay?: (props: ErrorDisplayProps) => ReactElement; loadingState?: (props: LoadingStateProps) => ReactElement; emptyState?: (props: EmptyStateProps) => ReactElement; fullRender?: (props: MasterpassRestOptionRenderProps) => ReactElement; }; export type MasterpassRestOptionTexts = { title?: string; newCardTitle?: string; selectCardTitle?: string; installmentOptionsTitle?: string; enterCardDetailsTitle?: string; loadingMessage?: string; scriptLoadingMessage?: string; selectCardMessage?: string; enterCardMessage?: string; enterCardSubMessage?: string; enterDigitsMessage?: string; noInstallmentMessage?: string; loadingInstallmentMessage?: string; removeCardMessage?: string; removeCardConfirmText?: string; removeCardCancelText?: string; removeCardLoadingText?: string; dismissButtonText?: string; paymentErrorTitle?: string; paymentErrorDefaultMessage?: string; paymentMethodTitle?: string; paymentMethodDescription?: string; savedCardsText?: string; savedCardsDescription?: string; newCardText?: string; newCardDescription?: string; noPaymentMethodsText?: string; failedToSaveCardText?: string; paymentFailedText?: string; otpHandlerNotAvailableText?: string; failedToSelectCardText?: string; failedToSelectInstallmentText?: string; cardNumberRequiredText?: string; cardNumberInvalidText?: string; expiryDateRequiredText?: string; expiryDateInvalidText?: string; expiryDateExpiredText?: string; cvvRequiredText?: string; cvvInvalidText?: string; cardholderNameRequiredText?: string; cardholderNameTooShortText?: string; cardholderNameTooLongText?: string; cardholderNameInvalidText?: string; cardAliasRequiredText?: string; cardAliasTooShortText?: string; cardAliasTooLongText?: string; creditCardInfoTitle?: string; checkingCardText?: string; cardNumberLabel?: string; cardNumberPlaceholder?: string; cardholderNameLabel?: string; cardholderNamePlaceholder?: string; expiryDateLabel?: string; expiryDatePlaceholder?: string; cvcLabel?: string; cvcPlaceholder3?: string; cvcPlaceholder4?: string; saveCardLabel?: string; saveCardTermsPrefix?: string; saveCardTermsLink?: string; saveCardTermsSuffix?: string; masterpassSecurityPrefix?: string; masterpassSecurityLink?: string; masterpassSecuritySuffix?: string; cardAliasLabel?: string; cardAliasPlaceholder?: string; addCardButton?: string; cancelButton?: string; secureText?: string; cvcHelpText?: string; cvcFrontText?: string; cvcBackText?: string; defaultCardText?: string; expiresSoonText?: string; cvcCardLabel?: string; secureCardText?: string; cvcCardHelpText?: string; confirmText?: string; cancelText?: string; loadingText?: string; installmentOptionsText?: string; cardTypeLabel?: string; singlePaymentText?: string; installmentsText?: string; noInterestText?: string; perMonthText?: string; proceedToPaymentText?: string; processingPaymentText?: string; cvcRequiredText?: string; linkModalDescription?: string; linkAccountButton?: string; linkModalCancelButton?: string; whatIsMasterpassLink?: string; rtaVerificationTitle?: string; rtaVerificationDescription?: string; rtaVerificationPlaceholder?: string; bankOtpVerificationTitle?: string; bankOtpVerificationDescription?: string; bankOtpVerificationPlaceholder?: string; phoneVerificationTitle?: string; phoneVerificationDescription?: string; phoneVerificationPlaceholder?: string; cvvVerificationTitle?: string; cvvVerificationDescription?: string; cvvVerificationPlaceholder?: string; cvvVerificationHelperText?: string; otpVerificationDescription?: string; verifyButton?: string; otpModalCancelButton?: string; otpModalErrorText?: string; otpModalResendOtpButton?: string; sessionExpiredTitle?: string; sessionExpiredMessage?: string; sessionExpiredSecondaryMessage?: string; sessionExpiredButton?: string; rewardModalTitle?: string; rewardModalDescription?: string; rewardModalEmptyMessage?: string; rewardModalConfirmText?: string; rewardModalCancelText?: string; rewardModalLoadingText?: string; rewardOpenButtonText?: string; rewardSelectedSummaryText?: string; rewardAvailableSummaryText?: string; rewardClearText?: string; rewardCategorySpecialText?: string; rewardCategoryGeneralText?: string; rewardFailedToLoadText?: string; rewardFailedToSelectText?: string; rewardCappedNoticeText?: string; };