import { useState } from 'react'; import DefaulModal from '@/components/DefaulModal'; import Button from '@/components/Button'; import Select from '@/components/Select'; import { type Shipper, type ShipmentMethod } from '@/pages/shipment/types/Types'; import { useGetShipment, useGetAdminShop, useAddShipmentToAdmin, useRemoveShipmentFromAdmin } from '@/pages/shipment/hooks/useShipmentData'; import { toast } from 'react-toastify'; import { extractErrorMessage } from '@/helpers/utils'; interface ShipmentManagementModalProps { isManagementModalOpen: boolean; setIsManagementModalOpen: (open: boolean) => void; } export const ShipmentManagementModal = ({ isManagementModalOpen, setIsManagementModalOpen, }: ShipmentManagementModalProps) => { const [selectedShipment, setSelectedShipment] = useState(''); const { data: shipmentData } = useGetShipment(1); const { data: adminShopData, refetch: refetchAdminShop } = useGetAdminShop(); const addShipmentToAdminMutation = useAddShipmentToAdmin(); const removeShipmentFromAdminMutation = useRemoveShipmentFromAdmin(); const shipments = shipmentData?.results?.shipper || []; const adminShipments: ShipmentMethod[] = adminShopData?.results?.data?.shipmentMethod || (adminShopData?.results as { shop?: { shipmentMethod?: ShipmentMethod[] } })?.shop?.shipmentMethod || []; // لیست روش‌های ارسال که هنوز به ادمین اضافه نشده‌اند const availableShipments = shipments.filter((shipment: Shipper) => { // اگر adminShipments خالی باشد، همه shipments را نشان بده if (adminShipments.length === 0) { return true; } // اگر shipment._id وجود داشته باشد، از _id برای مقایسه استفاده کن if (shipment._id != null) { return !adminShipments.some((adminShipment: ShipmentMethod) => adminShipment._id != null && adminShipment._id === shipment._id ); } // اگر _id وجود نداشته باشد، از name برای مقایسه استفاده کن return !adminShipments.some((adminShipment: ShipmentMethod) => adminShipment.name === shipment.name ); }); const handleAddShipmentToAdmin = async () => { if (!selectedShipment) return; // اگر value با "index-" شروع شود، یعنی _id وجود ندارد if (selectedShipment.startsWith('index-')) { const index = parseInt(selectedShipment.replace('index-', '')); const shipment = availableShipments[index]; if (!shipment || shipment._id == null) { toast.error('شناسه روش ارسال یافت نشد. لطفاً صفحه را رفرش کنید.'); return; } await addShipmentToAdminMutation.mutateAsync(Number(shipment._id), { onError: (error) => { toast.error(extractErrorMessage(error)); }, onSuccess: () => { refetchAdminShop(); setSelectedShipment(''); toast.success('روش ارسال با موفقیت اضافه شد'); } }); return; } const shipmentId = Number(selectedShipment); if (isNaN(shipmentId)) { toast.error('شناسه روش ارسال نامعتبر است'); return; } await addShipmentToAdminMutation.mutateAsync(shipmentId, { onError: (error) => { toast.error(extractErrorMessage(error)); }, onSuccess: () => { refetchAdminShop(); setSelectedShipment(''); toast.success('روش ارسال با موفقیت اضافه شد'); } }); }; const handleRemoveShipmentFromAdmin = async (shipmentId: string) => { await removeShipmentFromAdminMutation.mutateAsync(Number(shipmentId), { onError: (error) => { toast.error(extractErrorMessage(error)); }, onSuccess: () => { refetchAdminShop(); toast.success('روش ارسال با موفقیت حذف شد'); } }); }; const getDeliveryTypeText = (type: string) => { switch (type) { case 'Standard': return 'معمولی'; case 'SameDay': return 'همان روز'; case 'Express': return 'اکسپرس'; default: return type; } }; return ( setIsManagementModalOpen(false)} title_header="مدیریت روش‌های ارسال ادمین" isHeader={true} width={800} >
{/* بخش اضافه کردن روش ارسال جدید */}

اضافه کردن روش ارسال جدید