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 = () => {