import { Alert, Text, View } from "react-native"; import CustomButton from "./CustomButton"; import tw from "twrnc"; import { PaymentMethod, PaymentSheetError, useStripe } from "@stripe/stripe-react-native"; import { useState, useEffect } from "react"; import { fetchAPI } from "@/lib/fetch"; import { PaymentProps } from "@/types/type"; const Payment = ({fullName,email,amount,driverId,rideTime}:PaymentProps) => { const [success, setSuccess] = useState(false); const { initPaymentSheet, presentPaymentSheet } = useStripe(); const confirmHandler = async (paymentMethod,_, intentCreationCallback) => { const {paymentIntent,customer} = await fetchAPI("/(api)/(stripe)/create",{ method:"POST", headers:{ "Content-Type": "application/json", }, body:JSON.stringify({ name:fullName || email.split("@")[0], email: email, amount: amount, paymentMethodId : paymentMethod.id, }), }, ); if(paymentIntent.client_sercet){ const {result} = await fetchAPI ("/(api)/(stripe)/pay",{ method:"POST", headers:{ "Content-Type":"application/json", }, body: JSON.stringify({ payment_method_id:paymentMethod.id, payment_intent_id:paymentIntent.id, customer_id:customer, }), }); if (result.client_sercet) { //ride/create } } const { clientSercet, error } = await response.json(); if(clientSercet){ intentCreationCallback({clientSercet}) } else{ intentCreationCallback({error}) } } const initializePaymentSheet = async () => { const { error } = await initPaymentSheet({ merchantDisplayName: "Example,Inc.", intentConfiguration: { mode: { amount: 1099, currencyCode: "USD", }, confirmHandler: confirmHandler } }); if (error) { //handle error } }; const openPaymentSheet = async () => { await initializePaymentSheet(); const { error } = await presentPaymentSheet(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { setSuccess(true); } }; return ( <> ) }; export default Payment;