summaryrefslogtreecommitdiff
path: root/storefront/pages/index.js
blob: dda2a6dd60e13cb83d7865d8453bbafc07440122 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { useState } from "react"
import { useProducts } from "medusa-react"
import { medusaClient } from "../lib/medusa-client"
import { ensureCart } from "../lib/storefront"
import { formatAmount } from "../lib/format"

export default function Home() {
  const { products, isLoading } = useProducts()
  const [status, setStatus] = useState("")
  const [addingId, setAddingId] = useState(null)

  const handleAddToCart = async (product) => {
    const variantId = product?.variants?.[0]?.id
    if (!variantId) {
      setStatus("Aucune variante disponible pour ce produit.")
      return
    }

    setAddingId(product.id)
    setStatus("")

    try {
      const cart = await ensureCart(medusaClient)
      await medusaClient.carts.lineItems.create(cart.id, {
        variant_id: variantId,
        quantity: 1,
      })
      setStatus(`${product.title} a été ajouté au panier.`)
    } catch (error) {
      setStatus("Impossible d'ajouter au panier pour le moment.")
    } finally {
      setAddingId(null)
    }
  }

  return (
    <div>
      <h1>Bienvenue sur la boutique Lucien-sens-bon</h1>
      {isLoading && <span>Chargement des produits...</span>}
      {status && <p style={{ marginTop: "1rem" }}>{status}</p>}
      
      <div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(200px, 1fr))", gap: "1rem" }}>
        {products && products.map((product) => (
          <div key={product.id} style={{ border: "1px solid #ccc", padding: "1rem", borderRadius: "8px" }}>
            <h3>{product.title}</h3>
            <p>{product.description}</p>
            <p style={{ fontWeight: 600 }}>
              {formatAmount(
                product?.variants?.[0]?.prices?.[0]?.amount,
                product?.variants?.[0]?.prices?.[0]?.currency_code || "eur"
              )}
            </p>
            <button
              type="button"
              onClick={() => handleAddToCart(product)}
              disabled={addingId === product.id}
              style={{
                border: "1px solid #ccc",
                background: "#fff",
                borderRadius: "6px",
                padding: "0.4rem 0.8rem",
                cursor: "pointer",
              }}
            >
              {addingId === product.id ? "Ajout..." : "Ajouter au panier"}
            </button>
          </div>
        ))}
      </div>
      
      {!isLoading && !products?.length && (
        <p>Aucun produit trouvé. Connectez-vous à l'admin pour en ajouter !</p>
      )}
    </div>
  )
}