import { useState, useEffect } from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { toast } from "sonner"; import { itemOfferApi, tipsApi } from "@/utils/api"; import { t } from "@/utils"; import { Skeleton } from "@/components/ui/skeleton"; import { FaCheck } from "react-icons/fa"; import { useNavigate } from "@/components/Common/useNavigate"; const MakeOfferModal = ({ isOpen, onClose, productDetails }) => { const { navigate } = useNavigate(); const [offerAmount, setOfferAmount] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(""); const [tips, setTips] = useState([]); const [isLoadingTips, setIsLoadingTips] = useState(true); const [canProceed, setCanProceed] = useState(false); useEffect(() => { if (isOpen) { fetchTips(); } }, [isOpen]); const fetchTips = async () => { try { setIsLoadingTips(true); const response = await tipsApi.tips(); if (response?.data?.error === false) { const tipsData = response.data.data || []; setTips(tipsData); // If no tips found, automatically set canProceed to true if (!tipsData.length) { setCanProceed(true); } } } catch (error) { console.error("Error fetching tips:", error); // If error occurs, show make offer interface setCanProceed(true); } finally { setIsLoadingTips(false); } }; const validateOffer = () => { if (!offerAmount.trim()) { setError(t("offerAmountRequired")); return false; } const amount = Number(offerAmount); if (amount >= productDetails?.price) { setError(t("offerMustBeLessThanSellerPrice")); return false; } setError(""); return true; }; const handleSubmit = async (e) => { e.preventDefault(); if (!validateOffer()) { return; } try { setIsSubmitting(true); const response = await itemOfferApi.offer({ item_id: productDetails?.id, amount: Number(offerAmount), }); if (response?.data?.error === false) { toast.success(t("offerSentSuccessfully")); onClose(); navigate("/chat?activeTab=buying&chatid=" + response?.data?.data?.id); } else { toast.error(t("unableToSendOffer")); } } catch (error) { toast.error(t("unableToSendOffer")); console.error(error); } finally { setIsSubmitting(false); } }; const handleChange = (e) => { setOfferAmount(e.target.value); setError(""); // Clear error when user starts typing }; const handleContinue = () => { setCanProceed(true); }; const renderMakeOfferForm = () => (
{tip?.description}