From 533137a5af104d0a4be874056330a28af80f79a8 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 2 Dec 2025 16:54:18 +0330 Subject: [PATCH] fix asign shipment to shop --- src/components/ShipmentManagementModal.tsx | 99 ++++++++++++++++------ 1 file changed, 71 insertions(+), 28 deletions(-) diff --git a/src/components/ShipmentManagementModal.tsx b/src/components/ShipmentManagementModal.tsx index ae5b679..aeabeb4 100644 --- a/src/components/ShipmentManagementModal.tsx +++ b/src/components/ShipmentManagementModal.tsx @@ -24,22 +24,63 @@ export const ShipmentManagementModal = ({ const removeShipmentFromAdminMutation = useRemoveShipmentFromAdmin(); const shipments = shipmentData?.results?.shipper || []; - const adminShipments: ShipmentMethod[] = adminShopData?.results?.data?.shipmentMethod || []; + const adminShipments: ShipmentMethod[] = adminShopData?.results?.data?.shipmentMethod || (adminShopData?.results as { shop?: { shipmentMethod?: ShipmentMethod[] } })?.shop?.shipmentMethod || []; // لیست روش‌های ارسال که هنوز به ادمین اضافه نشده‌اند - const availableShipments = shipments.filter((shipment: Shipper) => - !adminShipments.some((adminShipment: ShipmentMethod) => adminShipment._id === shipment._id) - ); + 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; - await addShipmentToAdminMutation.mutateAsync(Number(selectedShipment), { + // اگر 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('روش ارسال با موفقیت اضافه شد'); } }); @@ -87,12 +128,14 @@ export const ShipmentManagementModal = ({ placeholder="انتخاب روش ارسال" value={selectedShipment} onChange={(e: React.ChangeEvent) => setSelectedShipment(e.target.value)} - items={availableShipments - .filter((shipment: Shipper) => shipment._id != null) - .map((shipment: Shipper) => ({ - value: String(shipment._id), + items={availableShipments.map((shipment: Shipper, index: number) => { + // اگر _id وجود داشته باشد، از آن استفاده کن، در غیر این صورت از index + const value = shipment._id != null ? String(shipment._id) : `index-${index}`; + return { + value, label: shipment.name - }))} + }; + })} />