Skip to content

Commit 216a425

Browse files
committed
fix(shop): show 'Added ✓' instantly on click, not after server
1 parent eeb5fd0 commit 216a425

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

src/routes/shop.products.$handle.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -314,24 +314,25 @@ function AddToCartButton({
314314
}) {
315315
const addToCart = useAddToCart()
316316
const openDrawer = useCartDrawerStore((s) => s.openDrawer)
317+
const [showAdded, setShowAdded] = React.useState(false)
317318

318-
const disabled = !variant || !variant.availableForSale || addToCart.isPending
319+
const disabled =
320+
!variant || !variant.availableForSale || (addToCart.isPending && !showAdded)
319321

320-
const label = addToCart.isSuccess
322+
const label = showAdded
321323
? 'Added ✓'
322-
: addToCart.isPending
323-
? 'Adding…'
324-
: !variant
325-
? 'Unavailable'
326-
: !variant.availableForSale
327-
? 'Sold out'
328-
: 'Add to cart'
324+
: !variant
325+
? 'Unavailable'
326+
: !variant.availableForSale
327+
? 'Sold out'
328+
: 'Add to cart'
329329

330+
// Reset the "Added ✓" confirmation after a moment
330331
React.useEffect(() => {
331-
if (!addToCart.isSuccess) return
332-
const id = window.setTimeout(() => addToCart.reset(), 1500)
332+
if (!showAdded) return
333+
const id = window.setTimeout(() => setShowAdded(false), 1500)
333334
return () => window.clearTimeout(id)
334-
}, [addToCart.isSuccess, addToCart])
335+
}, [showAdded])
335336

336337
return (
337338
<div className="flex flex-col gap-2">
@@ -340,6 +341,7 @@ function AddToCartButton({
340341
disabled={disabled}
341342
onClick={() => {
342343
if (!variant) return
344+
setShowAdded(true)
343345
openDrawer()
344346
addToCart.mutate({
345347
variantId: variant.id,

0 commit comments

Comments
 (0)