diff --git a/src/features/favourite/ui/Favourite.tsx b/src/features/favourite/ui/Favourite.tsx index af07974..60522db 100644 --- a/src/features/favourite/ui/Favourite.tsx +++ b/src/features/favourite/ui/Favourite.tsx @@ -7,19 +7,13 @@ import { Card } from '@/shared/ui/card'; import { Skeleton } from '@/shared/ui/skeleton'; import { ProductCard } from '@/widgets/categories/ui/product-card'; import { useQuery } from '@tanstack/react-query'; -import { AxiosError } from 'axios'; import { Heart } from 'lucide-react'; import { useTranslations } from 'next-intl'; -import { useEffect } from 'react'; export default function Favourite() { const router = useRouter(); const t = useTranslations(); - const { - data: favourite, - isLoading, - error, - } = useQuery({ + const { data: favourite, isLoading } = useQuery({ queryKey: ['favourite_product'], queryFn: () => product_api.favouuriteProduct(), select(data) { @@ -27,14 +21,6 @@ export default function Favourite() { }, }); - useEffect(() => { - if ((error as AxiosError)?.status === 403) { - router.replace('/auth'); - } else if ((error as AxiosError)?.status === 401) { - router.replace('/auth'); - } - }, [error]); - if (favourite && favourite.results.length === 0) { return (
diff --git a/src/features/product/ui/Product.tsx b/src/features/product/ui/Product.tsx index 50c81fd..3ee007e 100644 --- a/src/features/product/ui/Product.tsx +++ b/src/features/product/ui/Product.tsx @@ -3,11 +3,13 @@ import { cart_api } from '@/features/cart/lib/api'; import { product_api } from '@/shared/config/api/product/api'; import { BASE_URL } from '@/shared/config/api/URLs'; +import { useRouter } from '@/shared/config/i18n/navigation'; import { useCartId } from '@/shared/hooks/cartId'; import formatPrice from '@/shared/lib/formatPrice'; import { cn } from '@/shared/lib/utils'; import { Input } from '@/shared/ui/input'; import { Skeleton } from '@/shared/ui/skeleton'; +import { userStore } from '@/widgets/welcome/lib/hook'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { AxiosError } from 'axios'; import { Heart, Minus, Plus, Shield, ShoppingCart, Truck } from 'lucide-react'; @@ -22,6 +24,8 @@ const ProductDetail = () => { const { product } = useParams<{ product: string }>(); const queryClient = useQueryClient(); const { cart_id } = useCartId(); + const { user } = userStore(); + const router = useRouter(); const [quantity, setQuantity] = useState(1); @@ -46,6 +50,23 @@ const ProductDetail = () => { enabled: !!cart_id, }); + const favouriteMutation = useMutation({ + mutationFn: (productId: string) => product_api.favourite(productId), + + onSuccess: () => { + queryClient.refetchQueries({ queryKey: ['product_detail'] }); + queryClient.refetchQueries({ queryKey: ['favourite_product'] }); + }, + + onError: (err: AxiosError) => { + const detail = (err.response?.data as { detail?: string })?.detail; + toast.error(detail || err.message, { + richColors: true, + position: 'top-center', + }); + }, + }); + const measurement = data?.meansurement?.name?.toLowerCase() || ''; const isGram = measurement === 'gr'; @@ -164,7 +185,10 @@ const ProductDetail = () => { /* ---------------- HANDLERS ---------------- */ const handleAddToCart = () => { - // ✅ Debounce-ni bekor qil - double request oldini olish + if (user == null) { + router.push('/auth'); + return; + } if (debounceRef.current) clearTimeout(debounceRef.current); isManualInputRef.current = false; @@ -323,9 +347,18 @@ const ProductDetail = () => {