add cart no token replace auth login

This commit is contained in:
Samandar Turgunboyev
2026-03-04 16:36:22 +05:00
parent f04ae13c39
commit 95d17b274f
6 changed files with 78 additions and 30 deletions

View File

@@ -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<number | string>(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 = () => {
<button
className={cn(
'p-3 rounded-lg border',
'p-3 rounded-lg border cursor-pointer',
data?.liked ? 'border-red-500 bg-red-50' : 'border-gray-300',
)}
onClick={(e) => {
e.stopPropagation();
if (user == null) {
router.push('/auth');
return;
} else {
favouriteMutation.mutate(String(data?.id));
}
}}
>
<Heart
className={data?.liked ? 'fill-red-500 text-red-500' : ''}