@godaddy/react
Version:
The `createCheckoutSession` function creates a new checkout session with GoDaddy's commerce API.
87 lines (85 loc) • 3.4 kB
JavaScript
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 };