/* eslint-disable react-hooks/exhaustive-deps */ import { Plus, Menu, Truck, X, Ellipsis, CalendarDays, MapPin, } from "lucide-react"; import { Link } from "@remix-run/react"; import { Button } from "../ui/button"; import { useServiceGetAddresses } from "../../requestHandler/use-address-hooks"; import { useServiceGetCouriers } from "../../requestHandler/use-courier-hooks"; import { useEffect, useState } from "react"; import { DrawerContent, Drawer, DrawerHeader } from "../ui/drawer"; import { RadioGroup, RadioGroupItem } from "../ui/radio-group"; import { formatPrice } from "../../utils/helpers"; import { useToast } from "../../hooks/use-toast"; import { AdderssSettingDrawer } from "../../routes/profile.location._index"; import jMoment from "moment-jalaali"; import { Address, SellerCourierList } from "src/api/types"; export const ShippingInformation = ({ sellerId, total, setSelectedAddressInfo, setSelectedCourierInfo, setShippingInfoIsLoading, selectedAddressInfo, cartId, }: { sellerId: string; total: string; setSelectedAddressInfo: (address: Address) => void; setSelectedCourierInfo: (courierId: SellerCourierList) => void; setShippingInfoIsLoading: (isLoading: boolean) => void; selectedAddressInfo?: Address | null; cartId?: string; }) => { const [selectedCourier, setSelectedCourier] = useState(null); const handleCourierSelection = (courier: SellerCourierList) => { console.log("sss"); setSelectedCourier(courier); setSelectedCourierInfo(courier); }; return ( <>
); }; const ShippingInformationSelection = ({ sellerId, setSelectedCourierInfo, setShippingInfoIsLoading, }: { sellerId: string; setSelectedCourierInfo: (courierId: SellerCourierList) => void; setShippingInfoIsLoading: (isLoading: boolean) => void; }) => { const { data: couriersData, isLoading } = useServiceGetCouriers(sellerId); useEffect(() => { setShippingInfoIsLoading(isLoading); }, [isLoading]); const [selectedCourierIndex, setSelectedCourierIndex] = useState(""); const selectedCourier = couriersData?.filter( (courier: SellerCourierList) => courier.id === selectedCourierIndex )?.[0]; const isFaceToFace = selectedCourier?.courierIsFaceToFace; useEffect(() => { if (couriersData && couriersData.length > 0) { setSelectedCourierIndex(couriersData[0].id || ""); } }, [couriersData]); useEffect(() => { setSelectedCourierInfo( couriersData?.find( (courier: SellerCourierList) => courier.id === selectedCourierIndex ) as SellerCourierList ); }, [selectedCourierIndex, couriersData]); return ( <>

انتخاب شیوه ارسال:

{isLoading ? (

در حال بارگذاری...

) : couriersData ? ( <> setSelectedCourierIndex(value)} value={selectedCourierIndex} className="flex gap-4 px-4" dir="rtl" > {couriersData.map((courier: SellerCourierList) => (
))}
{isFaceToFace ? (

روش ارسال حضوری است و در همان محل تحویل خواهد شد

) : ( <>

زمان تحویل سفارش:

{formatDateRange(selectedCourier?.estimatedDays || 0)}

هزینه ارسال:

{selectedCourier?.courierIsFreightCollect ? "پس پرداخت" : `${formatPrice( JSON.stringify(selectedCourier?.deliveryPrice) )} تومان`}

)}
) : (

هیچ روش ارسالی یافت نشد

)}
); }; const AddressSelection = ({ total, setSelectedAddressInfo, setShippingInfoIsLoading, selectedAddressInfo, selectedCourier, cartId, }: { total: string; setSelectedAddressInfo: (addressInfo: Address) => void; setShippingInfoIsLoading: (isLoading: boolean) => void; selectedAddressInfo?: Address | null; selectedCourier?: SellerCourierList | null; cartId?: string; }) => { const { data, isLoading } = useServiceGetAddresses(); const [selectedAddress, setSelectedAddress] = useState
( selectedAddressInfo || null ); useEffect(() => { setShippingInfoIsLoading(isLoading); }, [isLoading]); const defaultAddress = data?.find((address: Address) => address.isDefault); useEffect(() => { if (!selectedAddress && defaultAddress) { setSelectedAddress(defaultAddress); setSelectedAddressInfo(defaultAddress); } }, [defaultAddress]); const handleAddressChange = (address: Address) => { setSelectedAddress(address); setSelectedAddressInfo(address); }; const [settingsDrawerOpen, setSettingsDrawerOpen] = useState(false); const [selectedAddressForSettings, setSelectedAddressForSettings] = useState
(null); const openSettingsDrawer = (address: Address) => { setSelectedAddressForSettings(address); setSettingsDrawerOpen(true); }; const isFaceToFace = selectedCourier?.courierIsFaceToFace; return ( <>

آدرس دریافت سفارش

{}} role="button" tabIndex={0} className={`w-full flex gap-2 items-center py-4`} >
{selectedAddress || defaultAddress ? ( <>

{selectedAddress?.title || defaultAddress?.title}

{selectedAddress?.mainAddress || defaultAddress?.mainAddress}

) : ( <> {isFaceToFace ? ( <>

برای دریافت حضوری نیازی به آدرس نیست

) : ( <>

آدرسی اضافه نشده است

برای ادامه خرید، لطفا یک آدرس جدید اضافه کنید

)} )}
{(selectedAddress || defaultAddress) && ( )}
{!isFaceToFace && ( )}
); }; const ChangeDefaulAddressDrawer = ({ total, onOpenSettings, selectedAddress, onAddressChange, }: { total: string; onOpenSettings: (address: Address) => void; selectedAddress: Address | null; onAddressChange: (address: Address) => void; }) => { const [isOpen, setIsOpen] = useState(false); const { data: dataAddress } = useServiceGetAddresses(); const [address, setAddress] = useState(selectedAddress?.id); const { toast } = useToast(); useEffect(() => { if (selectedAddress) { setAddress(selectedAddress.id); } }, [selectedAddress]); const changeShippingAddress = () => { const newAddress = dataAddress?.find( (addr: Address) => addr.id === address ); if (newAddress) { onAddressChange(newAddress); setIsOpen(false); toast({ title: "آدرس ارسال با موفقیت تغییر کرد", }); } }; return ( <> setIsOpen(true)} />
setIsOpen(false)} />

انتخاب آدرس ارسال

{dataAddress && (
setAddress(value)} value={address} className="w-full" > {dataAddress.map((address: Address, index: number) => ( { setIsOpen(false); onOpenSettings(address); }} /> ))}
)}

مبلغ کل فاکتور:

{formatPrice(total)} تومان

); }; const AddressRow = ({ address, isLastItem, onOpenSettings, }: { address: Address; isLastItem: boolean; onOpenSettings: () => void; }) => { return (
); }; export const formatDateRange = ( untilDays?: number | null, created_at?: string ) => { const startDate = created_at ? jMoment(created_at) : jMoment(); if (!untilDays) return `از ${startDate.format("jYYYY/jMM/jDD")}`; const deliveryDate = startDate.clone().add(untilDays, "days"); return `بین ${startDate.format("jYYYY/jMM/jDD")} تا ${deliveryDate.format("jYYYY/jMM/jDD")}`; };