From d7820194c8d63e6bc04feaca24e1c445f87e478a Mon Sep 17 00:00:00 2001 From: henriqpohl Date: Tue, 27 Feb 2024 14:52:30 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20ensure=20persistence=20don=E2=80=99t=20b?= =?UTF-8?q?e=20empty=20after=20refresh=20page=20and=20remove=20products=20?= =?UTF-8?q?from=20LocalStorage=20when=20user=20remove=20any=20product=20fr?= =?UTF-8?q?om=20cart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/providers/cart.tsx | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/providers/cart.tsx b/src/providers/cart.tsx index c73dc00..bb19f64 100644 --- a/src/providers/cart.tsx +++ b/src/providers/cart.tsx @@ -36,16 +36,27 @@ export const CartContext = createContext({ }); const CartProvider = ({ children }: { children: ReactNode }) => { - const [products, setProducts] = useState([]); - - useEffect(() => { - setProducts( - JSON.parse(localStorage.getItem("@fsw-store/cart-products") || "[]"), - ); - }, []); + const LOCAL_STORAGE_KEY = "@fsw-store/cart-products"; + + const [products, setProducts] = useState(() => { + if (typeof window !== "undefined") { + const recoveryProducts = localStorage.getItem( + LOCAL_STORAGE_KEY, + ) as string; + return JSON.parse(recoveryProducts) ?? []; + } else { + return []; + } + }); useEffect(() => { - localStorage.setItem("@fsw-store/cart-products", JSON.stringify(products)); + if (typeof window !== "undefined") { + if (products.length === 0) { + localStorage.removeItem(LOCAL_STORAGE_KEY); + } else { + localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(products)); + } + } }, [products]); // Total sem descontos