import MainButton from "@/components/MainButton"; import { useEffect, useState } from "react"; import styles from "./styles.module.scss"; import { usePayment } from "@/hooks/payment/nmi/usePayment"; import SecurityPayments from "../../SecurityPayments"; import { useTranslations } from "@/hooks/translations"; import { ELocalesPlacement } from "@/locales"; import { EUnleashFlags, useUnleash } from "@/hooks/ab/unleash/useUnleash"; import Loader, { LoaderColor } from "@/components/Loader"; import { IFunnelPaymentVariant } from "@/api/resources/Session"; export type TConfirmType = "payment" | "setup"; interface ICheckoutFormProps { subscriptionReceiptId?: string; returnUrl?: string; confirmType?: TConfirmType; isHide?: boolean; activeProduct: IFunnelPaymentVariant; isAnonymous?: boolean; sessionId?: string; funnel: ELocalesPlacement; paymentPlacement: string; onSuccess?: () => void; onError?: (error?: string | null) => void; onModalClosed?: () => void; } export default function CheckoutForm({ activeProduct, isAnonymous = false, sessionId = "", funnel, paymentPlacement, onError, onSuccess, onModalClosed, isHide = false, }: ICheckoutFormProps) { const { translate } = useTranslations(ELocalesPlacement.V1); const [payButtonClicked, setPayButtonClicked] = useState(false); const { variant, isReady } = useUnleash({ flag: EUnleashFlags.paymentButtonLogic, }); const isNewPaymentButton = variant === "new"; const [isCardTypeError, setIsCardTypeError] = useState(false); // const address = useAddressFields(language); const { isLoading, error, isPaymentSuccess, submitInlineForm, formValidation, isFormValid, isModalClosed, cardType, } = usePayment({ activeProduct, paymentFormType: "inline", isAnonymous, sessionId, funnel, paymentPlacement, }); useEffect(() => { // if (error) { console.log(error); if (error === "card_type_error") { return setIsCardTypeError(true); } else { setIsCardTypeError(false); } onError?.(error); // } // eslint-disable-next-line react-hooks/exhaustive-deps }, [error]); useEffect(() => { if (isModalClosed && onModalClosed) { onModalClosed(); } }, [isModalClosed, onModalClosed]); useEffect(() => { if (isPaymentSuccess && onSuccess) { onSuccess(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isPaymentSuccess]); const handleSubmit = ( e: React.FormEvent | React.MouseEvent ) => { e.preventDefault(); setPayButtonClicked(true); // const isAddressValid = address.validateAll(); if (!isFormValid) { return; } submitInlineForm(); }; if (!isReady) { return (
); } return (
card {isCardTypeError && (

{translate("payment_modal.card_type_error.title", { cardType: cardType?.charAt(0)?.toUpperCase() + cardType?.slice(1), })}

{translate("payment_modal.card_type_error.description")}

)}
{formValidation.ccnumber.message && (
{formValidation.ccnumber.message}
)}
{formValidation.ccexp.message && (
{formValidation.ccexp.message}
)}
{formValidation.cvv.message && (
{formValidation.cvv.message}
)}
{/* */}
{isNewPaymentButton && payButtonClicked && !isFormValid && (

{translate("payment_modal.form_error")}

)} Secure {isLoading ? translate("payment_modal.processing") : translate("payment_modal.pay_now")} ); }