diff --git a/src/hooks/useProduct.ts b/src/hooks/useProduct.ts index 023b615..3407f3a 100644 --- a/src/hooks/useProduct.ts +++ b/src/hooks/useProduct.ts @@ -1,28 +1,45 @@ -import { useState, useEffect } from "react"; +"use client"; + +import { useEffect, useState } from "react"; import { Product, fetchProduct } from "@/lib/api/product"; -export const useProduct = (productId: string) => { - const [product, setProduct] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); +export function useProduct(productId: string) { + const [product, setProduct] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); - useEffect(() => { - const fetch = async () => { - try { - setLoading(true); - const data = await fetchProduct(productId); - setProduct(data); - } catch (err) { - setError(err instanceof Error ? err.message : "Unknown error"); - } finally { - setLoading(false); - } - }; + useEffect(() => { + let isMounted = true; - if (productId) { - fetch(); - } - }, [productId]); + async function loadProduct() { + if (!productId) { + setIsLoading(false); + return; + } - return { product, loading, error }; -}; + try { + setIsLoading(true); + const data = await fetchProduct(productId); + if (isMounted) { + setProduct(data); + } + } catch (err) { + if (isMounted) { + setError(err instanceof Error ? err : new Error("Failed to fetch product")); + } + } finally { + if (isMounted) { + setIsLoading(false); + } + } + } + + loadProduct(); + + return () => { + isMounted = false; + }; + }, [productId]); + + return { product, isLoading, error }; +}