From 44180711be9fb18687cd9818eb17029f00bcc09f Mon Sep 17 00:00:00 2001 From: Begmuhommet Date: Sun, 19 Nov 2023 10:58:56 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=91=20Fix=20bug=20with=20stripe=20paym?= =?UTF-8?q?ent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/PaymentPage/index.tsx | 28 ++++++++----- .../methods/Stripe/CheckoutForm.tsx | 42 ++++++++++++------- 2 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/components/PaymentPage/index.tsx b/src/components/PaymentPage/index.tsx index 04e1a62..6720ba5 100644 --- a/src/components/PaymentPage/index.tsx +++ b/src/components/PaymentPage/index.tsx @@ -1,19 +1,19 @@ -import { useState } from "react"; +import { usePayment } from "@/payment"; +import routes from "@/routes"; +import { selectors } from "@/store"; +import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; -import { selectors } from "@/store"; -import { usePayment } from "@/payment"; -import { ApplePayBanner, GooglePayBanner } from "./methods"; -import ErrorModal from "./ErrorModal"; -import UserHeader from "../UserHeader"; -import Title from "../Title"; -import Loader from "../Loader"; -import secure from "./secure.png"; -import routes from "@/routes"; -import "./styles.css"; import Header from "../Header"; +import Loader from "../Loader"; +import Title from "../Title"; +import UserHeader from "../UserHeader"; +import ErrorModal from "./ErrorModal"; +import { ApplePayBanner, GooglePayBanner } from "./methods"; import { StripeButton } from "./methods/Stripe"; +import secure from "./secure.png"; +import "./styles.css"; // import { PayPalButton } from "./methods/PayPal/Button"; // import { useAuth } from "@/auth"; // import { useApi } from "@/api"; @@ -42,6 +42,12 @@ function PaymentPage(): JSX.Element { const email = useSelector(selectors.selectEmail); const activeSubPlan = useSelector(selectors.selectActiveSubPlan); + // Do not allow to go to this page if there is no other payment methods + useEffect(() => { + // Have only Stripe for now + navigate(routes.client.paymentStripe()); + }, []); + const navigateToStripe = () => { navigate(routes.client.paymentStripe()); }; diff --git a/src/components/PaymentPage/methods/Stripe/CheckoutForm.tsx b/src/components/PaymentPage/methods/Stripe/CheckoutForm.tsx index 656aec7..ddbfebf 100644 --- a/src/components/PaymentPage/methods/Stripe/CheckoutForm.tsx +++ b/src/components/PaymentPage/methods/Stripe/CheckoutForm.tsx @@ -19,29 +19,39 @@ export default function CheckoutForm({ children }: ICheckoutFormProps) { const dispatch = useDispatch(); const [message, setMessage] = useState(""); - const [isProcessing, setIsProcessing] = useState(false); + const [isProcessing, setIsProcessing] = useState(false); + const [formReady, setFormReady] = useState(false); - const handleSubmit = async (e: React.SyntheticEvent) => { + const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); + if (!stripe || !elements) { return; } setIsProcessing(true); - const { error } = await stripe.confirmPayment({ - elements, - confirmParams: { - return_url: `https://${window.location.host}/payment/result`, - }, - }); + try { + const { error } = await stripe.confirmPayment({ + elements, + confirmParams: { + return_url: `https://${window.location.host}/payment/result`, + }, + }); + if (error) { + setMessage(error?.message || "Oops! Something went wrong."); + } else { + dispatch(actions.status.update("subscribed")); + } + } catch(error) { + console.log('error -> ', error); + setMessage("Oops! Something went wrong."); + } finally { + setIsProcessing(false); + } + - if (error) { - setMessage(error?.message || "Oops! Something went wrong."); - } - dispatch(actions.status.update("subscribed")); - setIsProcessing(false); }; return ( @@ -51,13 +61,13 @@ export default function CheckoutForm({ children }: ICheckoutFormProps) { onSubmit={handleSubmit} > {children ? children : null} - - + setFormReady(true)} /> + {isProcessing ? "Processing..." : "Pay now"} - {message} + {message} ); }