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 = () => (
{t("makeAn")}  {t("offer")} {t("openToOffers")}
{t("sellerPrice")} {productDetails?.formatted_price}
{error && {error}}
); const renderTipsSection = () => ( <> {t("safety")}  {t("tips")} {isLoadingTips ? (
{Array.from({ length: 12 }).map((_, i) => (
))}
) : (
{tips.map((tip, index) => (

{tip?.description}

))}
)} ); return ( e.preventDefault()} className="sm:py-[50px] sm:px-[90px]" > {!canProceed ? renderTipsSection() : renderMakeOfferForm()} ); }; export default MakeOfferModal;