UNPKG

@godaddy/react

Version:

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

87 lines (85 loc) 3.4 kB
import { G as DeliveryMethods, H as Button, O as PaymentMethodType, Q as useIsPaymentDisabled, g as PaymentProvider, o as useCheckoutContext, rt as useGoDaddyContext, s as useDraftOrderShippingMethods } from "./checkout-B7yB0DfE.js"; import { k as GraphQLErrorWithCodes, t as cn } from "./utils-DWBfAHfx.js"; import { t as useAuthorizeCheckout } from "./use-authorize-checkout-DXE_kN3y.js"; import { useCallback } from "react"; import { useFormContext } from "react-hook-form"; import { jsx } from "react/jsx-runtime"; //#region src/components/checkout/payment/checkout-buttons/ccavenue/ccavenue.tsx const CCAVENUE_PROD_URL = "https://secure.ccavenue.com/transaction/transaction.do?command=initiateTransaction"; const CCAVENUE_TEST_URL = "https://test.ccavenue.com/transaction/transaction.do?command=initiateTransaction"; function CCAvenueCheckoutButton() { const { t, apiHost } = useGoDaddyContext(); const { setCheckoutErrors, isConfirmingCheckout, ccavenueConfig } = useCheckoutContext(); const isPaymentDisabled = useIsPaymentDisabled(); const form = useFormContext(); const authorizeCheckout = useAuthorizeCheckout(); const isShipping = form.watch("deliveryMethod") === DeliveryMethods.SHIP; const { data: shippingMethodsData, isLoading: isShippingMethodsLoading } = useDraftOrderShippingMethods(); const hasShippingMethods = (shippingMethodsData?.length ?? 0) > 0; const redirectUrl = apiHost && !apiHost.includes("test") && !apiHost.includes("dev") ? CCAVENUE_PROD_URL : CCAVENUE_TEST_URL; const handleClick = useCallback(async () => { if (!await form.trigger()) { const firstError = Object.keys(form.formState.errors)[0]; if (firstError) form.setFocus(firstError); return; } if (!ccavenueConfig?.accessCodeId) { setCheckoutErrors(["TRANSACTION_PROCESSING_FAILED"]); return; } if (isShipping && (isShippingMethodsLoading || !hasShippingMethods)) { setCheckoutErrors(["SHIPPING_METHOD_NOT_FOUND"]); return; } try { const transactionRefNum = (await authorizeCheckout.mutateAsync({ paymentType: PaymentMethodType.CCAVENUE, paymentProvider: PaymentProvider.CCAVENUE, paymentToken: "" }))?.transactionRefNum ?? ""; if (!transactionRefNum) { setCheckoutErrors(["TRANSACTION_PROCESSING_FAILED"]); return; } const formEl = document.createElement("form"); formEl.method = "POST"; formEl.action = redirectUrl; const fields = { encRequest: transactionRefNum, access_code: ccavenueConfig.accessCodeId }; Object.keys(fields).forEach((key) => { const input = document.createElement("input"); input.type = "hidden"; input.name = key; input.value = fields[key]; formEl.appendChild(input); }); document.body.appendChild(formEl); formEl.submit(); } catch (err) { if (err instanceof GraphQLErrorWithCodes) setCheckoutErrors(err.codes); else setCheckoutErrors(["TRANSACTION_PROCESSING_FAILED"]); } }, [ form, isShipping, isShippingMethodsLoading, hasShippingMethods, authorizeCheckout.mutateAsync, setCheckoutErrors, ccavenueConfig?.accessCodeId, redirectUrl ]); const isBusy = isConfirmingCheckout || isPaymentDisabled; return /* @__PURE__ */ jsx(Button, { type: "button", size: "lg", className: cn("w-full"), disabled: isBusy, onClick: handleClick, children: t.payment.methods.ccavenue }); } //#endregion export { CCAvenueCheckoutButton };