@godaddy/react
Version:
The `createCheckoutSession` function creates a new checkout session with GoDaddy's commerce API.
63 lines (60 loc) • 2.33 kB
JavaScript
import { o as useCheckoutContext, p as useSquare, rt as useGoDaddyContext } from "./checkout-B7yB0DfE.js";
import "./utils-DWBfAHfx.js";
import { useEffect, useState } from "react";
import { jsx } from "react/jsx-runtime";
//#region src/components/checkout/payment/utils/use-load-square.ts
let isSquareLoaded = false;
let isSquareCDNLoaded = false;
const listeners = /* @__PURE__ */ new Set();
function useLoadSquare() {
const { squareConfig } = useCheckoutContext();
const { apiHost } = useGoDaddyContext();
const [loaded, setLoaded] = useState(isSquareLoaded);
const squareCDN = apiHost && !apiHost.includes("test") && !apiHost.includes("dev") ? "https://web.squarecdn.com/v1/square.js" : "https://sandbox.web.squarecdn.com/v1/square.js";
useEffect(() => {
const updateLoaded = (newLoaded) => setLoaded(newLoaded);
listeners.add(updateLoaded);
if (isSquareLoaded) setLoaded(true);
return () => {
listeners.delete(updateLoaded);
};
}, []);
useEffect(() => {
if (isSquareLoaded || isSquareCDNLoaded || !squareConfig || !squareCDN) return;
isSquareCDNLoaded = true;
const script = document.createElement("script");
script.src = squareCDN;
script.async = true;
script.onload = () => {
isSquareLoaded = true;
listeners.forEach((listener) => listener(true));
};
document.body.appendChild(script);
}, [squareConfig, squareCDN]);
return { isSquareLoaded: loaded };
}
//#endregion
//#region src/components/checkout/payment/payment-methods/credit-card/square.tsx
function SquareCreditCardForm() {
const { setCard } = useSquare();
const { squareConfig } = useCheckoutContext();
const { isSquareLoaded: isSquareLoaded$1 } = useLoadSquare();
useEffect(() => {
if (!isSquareLoaded$1 || !squareConfig || !window?.Square) return;
initializePaymentForm();
}, [isSquareLoaded$1, squareConfig]);
const initializePaymentForm = async () => {
try {
if (!squareConfig) return;
const cardInstance = await (window?.Square?.payments(squareConfig.appId, squareConfig.locationId)).card({ style: { input: { fontSize: "14px" } } });
await cardInstance.attach("#square-card-container");
setCard(cardInstance);
} catch (_error) {}
};
return /* @__PURE__ */ jsx("div", {
id: "square-card-container",
className: "square-card-input"
});
}
//#endregion
export { SquareCreditCardForm };