UNPKG

@godaddy/react

Version:

The `createCheckoutSession` function creates a new checkout session with GoDaddy's commerce API.

138 lines (136 loc) 5.38 kB
import { O as PaymentMethodType, _ as useConfirmCheckout, g as PaymentProvider, o as useCheckoutContext, u as useBuildPaymentRequest } from "./checkout-B7yB0DfE.js"; import { k as GraphQLErrorWithCodes } from "./utils-DWBfAHfx.js"; import { useCallback, useState } from "react"; import { CardElement, useElements, useStripe } from "@stripe/react-stripe-js"; //#region src/components/checkout/payment/utils/use-stripe-checkout.ts function useStripeCheckout({ mode }) { const stripe = useStripe(); const elements = useElements(); const confirmCheckout = useConfirmCheckout(); const { setCheckoutErrors } = useCheckoutContext(); const { stripePaymentExpressRequest } = useBuildPaymentRequest(); const [isProcessingPayment, setIsProcessingPayment] = useState(false); return { handleSubmit: useCallback(async (expressData) => { setIsProcessingPayment(true); try { if (!stripe || !elements) return; if (mode === "card") { const cardElement = elements.getElement(CardElement); if (!cardElement) return; const { paymentMethod, error } = await stripe.createPaymentMethod({ card: cardElement, type: "card" }); if (error) { setCheckoutErrors([error.code || "TRANSACTION_PROCESSING_FAILED"]); return; } if (paymentMethod) try { await confirmCheckout.mutateAsync({ paymentToken: paymentMethod.id, paymentType: PaymentMethodType.CREDIT_CARD, paymentProvider: PaymentProvider.STRIPE }); } catch (err) { if (err instanceof GraphQLErrorWithCodes) setCheckoutErrors(err.codes); } else setCheckoutErrors(["TRANSACTION_PROCESSING_FAILED"]); } if (mode === "express") { const { error, paymentMethod } = await stripe.createPaymentMethod({ elements, params: stripePaymentExpressRequest }); if (error) { setCheckoutErrors([error.code || "TRANSACTION_PROCESSING_FAILED"]); return; } if (paymentMethod) try { const event = expressData?.event; const currencyCode = expressData?.shippingTotal?.currencyCode || "USD"; const paymentType = paymentMethod.card?.wallet?.type || event?.expressPaymentType || "card"; const billing = event?.billingDetails ? { email: event.billingDetails.email || "", phone: event.billingDetails.phone || "", firstName: event.billingDetails.name?.split(" ")?.[0] || "", lastName: event.billingDetails.name?.split(" ").slice(1).join(" ") || "", address: { countryCode: event.billingDetails.address?.country || "", postalCode: event.billingDetails.address?.postal_code || "", adminArea1: event.billingDetails.address?.state || "", adminArea2: event.billingDetails.address?.city || "", addressLine1: event.billingDetails.address?.line1 || "", addressLine2: event.billingDetails.address?.line2 || "" } } : void 0; const shipping = event?.shippingAddress ? { email: event.billingDetails?.email || "", phone: event.billingDetails?.phone || "", firstName: event.shippingAddress.name?.split(" ")?.[0] || "", lastName: event.shippingAddress.name?.split(" ").slice(1).join(" ") || "", address: { countryCode: event.shippingAddress.address?.country || "", postalCode: event.shippingAddress.address?.postal_code || "", adminArea1: event.shippingAddress.address?.state || "", adminArea2: event.shippingAddress.address?.city || "", addressLine1: event.shippingAddress.address?.line1 || "", addressLine2: event.shippingAddress.address?.line2 || "" } } : void 0; const shippingLines = expressData?.selectedShippingMethod ? [{ amount: expressData.shippingTotal || { currencyCode, value: 0 }, name: expressData.selectedShippingMethod.displayName || "", requestedProvider: expressData.selectedShippingMethod.carrierCode || "", requestedService: expressData.selectedShippingMethod.serviceCode || "", totals: { subTotal: expressData.shippingTotal || { currencyCode, value: 0 }, taxTotal: { value: 0, currencyCode } } }] : void 0; await confirmCheckout.mutateAsync({ paymentToken: paymentMethod.id, paymentType, paymentProvider: PaymentProvider.STRIPE, isExpress: true, ...expressData?.shippingTotal ? { shippingTotal: expressData.shippingTotal } : {}, ...expressData?.calculatedTaxes ? { calculatedTaxes: expressData.calculatedTaxes } : {}, ...expressData?.calculatedAdjustments ? { calculatedAdjustments: expressData.calculatedAdjustments } : {}, ...billing ? { billing } : {}, ...shipping ? { shipping } : {}, ...shippingLines ? { shippingLines } : {} }); } catch (err) { if (err instanceof GraphQLErrorWithCodes) setCheckoutErrors(err.codes); throw err; } else setCheckoutErrors(["TRANSACTION_PROCESSING_FAILED"]); } return { success: false, error: `Mode not supported: ${mode}` }; } finally { setIsProcessingPayment(false); } }, [ mode, stripe, elements, confirmCheckout.mutateAsync, setCheckoutErrors ]), isProcessingPayment }; } //#endregion export { useStripeCheckout as t };