diff --git a/src/components/RentalCartProvider.tsx b/src/components/RentalCartProvider.tsx index 9f7c7db..2dd8738 100644 --- a/src/components/RentalCartProvider.tsx +++ b/src/components/RentalCartProvider.tsx @@ -4,7 +4,6 @@ import { createContext, useCallback, useContext, - useEffect, useMemo, useState, type ReactNode, @@ -44,12 +43,14 @@ function writeCookieClient(cart: Cart): void { } export function RentalCartProvider({ children, initial }: { children: ReactNode; initial?: Cart }) { - const [cart, setCart] = useState(initial ?? EMPTY_CART); - - // Hydrate depuis cookie au mount (au cas où le panier a changé dans un autre onglet) - useEffect(() => { - setCart(readCookieClient()); - }, []); + // Initial vient du serveur (cookie lu côté serveur). Sur le client on relit le + // cookie une seule fois via lazy initializer pour rester cohérent si un autre + // onglet a modifié le panier entre le render serveur et l'hydration. + const [cart, setCart] = useState(() => { + if (typeof document === "undefined") return initial ?? EMPTY_CART; + const fromCookie = readCookieClient(); + return fromCookie.items.length > 0 ? fromCookie : initial ?? EMPTY_CART; + }); const persist = useCallback((next: Cart) => { setCart(next);