diff --git a/components/cart/add-to-cart.tsx b/components/cart/add-to-cart.tsx index f116a4e49..c3a3107a1 100644 --- a/components/cart/add-to-cart.tsx +++ b/components/cart/add-to-cart.tsx @@ -6,7 +6,7 @@ import { addItem } from 'components/cart/actions'; import LoadingDots from 'components/loading-dots'; import { ProductVariant } from 'lib/shopify/types'; import { useSearchParams } from 'next/navigation'; -import { useState } from 'react'; +import { useTransition } from 'react'; import { // @ts-ignore experimental_useFormState as useFormState, @@ -15,15 +15,12 @@ import { function SubmitButton({ availableForSale, - selectedVariantId, - submitting + selectedVariantId }: { availableForSale: boolean; selectedVariantId: string | undefined; - submitting: boolean; }) { - let { pending } = useFormStatus(); - pending = pending || submitting; + const { pending } = useFormStatus(); const buttonClasses = 'relative flex w-full items-center justify-center rounded-full bg-blue-600 p-4 tracking-wide text-white'; const disabledClasses = 'cursor-not-allowed opacity-60 hover:opacity-60'; @@ -76,7 +73,7 @@ export function AddToCart({ variants: ProductVariant[]; availableForSale: boolean; }) { - const [submitting, setSubmitting] = useState(false); + const [isPending, startTransition] = useTransition(); const [message, formAction] = useFormState(addItem, null); const searchParams = useSearchParams(); const defaultVariantId = variants.length === 1 ? variants[0]?.id : undefined; @@ -88,23 +85,17 @@ export function AddToCart({ const selectedVariantId = variant?.id || defaultVariantId; const actionWithVariant = formAction.bind(null, selectedVariantId); + const handleSubmit = (event: React.FormEvent) => { + if (isPending) { + event.preventDefault(); + } else { + startTransition(actionWithVariant); + } + }; + return ( -
{ - e.preventDefault(); - if (submitting) return; - setSubmitting(true); - await addItem(message, selectedVariantId); - setSubmitting(false); - }} - > - + +

{message}

diff --git a/components/cart/delete-item-button.tsx b/components/cart/delete-item-button.tsx index a4a2bfd5f..8d43b0e07 100644 --- a/components/cart/delete-item-button.tsx +++ b/components/cart/delete-item-button.tsx @@ -5,16 +5,15 @@ import clsx from 'clsx'; import { removeItem } from 'components/cart/actions'; import LoadingDots from 'components/loading-dots'; import type { CartItem } from 'lib/shopify/types'; -import { useState } from 'react'; +import { useTransition } from 'react'; import { // @ts-ignore experimental_useFormState as useFormState, experimental_useFormStatus as useFormStatus } from 'react-dom'; -function SubmitButton({ submitting }: { submitting: boolean }) { - let { pending } = useFormStatus(); - pending = pending || submitting; +function SubmitButton() { + const { pending } = useFormStatus(); return (