fix asign shipment to shop

This commit is contained in:
hamid zarghami
2025-12-02 16:54:18 +03:30
parent a1443911fa
commit 533137a5af
+71 -28
View File
@@ -24,22 +24,63 @@ export const ShipmentManagementModal = ({
const removeShipmentFromAdminMutation = useRemoveShipmentFromAdmin(); const removeShipmentFromAdminMutation = useRemoveShipmentFromAdmin();
const shipments = shipmentData?.results?.shipper || []; 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) => const availableShipments = shipments.filter((shipment: Shipper) => {
!adminShipments.some((adminShipment: ShipmentMethod) => adminShipment._id === shipment._id) // اگر 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 () => { const handleAddShipmentToAdmin = async () => {
if (!selectedShipment) return; 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) => { onError: (error) => {
toast.error(extractErrorMessage(error)); toast.error(extractErrorMessage(error));
}, },
onSuccess: () => { onSuccess: () => {
refetchAdminShop(); refetchAdminShop();
setSelectedShipment('');
toast.success('روش ارسال با موفقیت اضافه شد'); toast.success('روش ارسال با موفقیت اضافه شد');
} }
}); });
@@ -87,12 +128,14 @@ export const ShipmentManagementModal = ({
placeholder="انتخاب روش ارسال" placeholder="انتخاب روش ارسال"
value={selectedShipment} value={selectedShipment}
onChange={(e: React.ChangeEvent<HTMLSelectElement>) => setSelectedShipment(e.target.value)} onChange={(e: React.ChangeEvent<HTMLSelectElement>) => setSelectedShipment(e.target.value)}
items={availableShipments items={availableShipments.map((shipment: Shipper, index: number) => {
.filter((shipment: Shipper) => shipment._id != null) // اگر _id وجود داشته باشد، از آن استفاده کن، در غیر این صورت از index
.map((shipment: Shipper) => ({ const value = shipment._id != null ? String(shipment._id) : `index-${index}`;
value: String(shipment._id), return {
value,
label: shipment.name label: shipment.name
}))} };
})}
/> />
<Button <Button
label="اضافه کردن" label="اضافه کردن"
@@ -114,25 +157,25 @@ export const ShipmentManagementModal = ({
{adminShipments {adminShipments
.filter((shipment: ShipmentMethod) => shipment._id != null) .filter((shipment: ShipmentMethod) => shipment._id != null)
.map((shipment: ShipmentMethod) => ( .map((shipment: ShipmentMethod) => (
<div key={shipment._id} className="flex items-center justify-between p-4 bg-gray-50 rounded-xl"> <div key={shipment._id} className="flex items-center justify-between p-4 bg-gray-50 rounded-xl">
<div> <div>
<h4 className="font-medium">{shipment.name}</h4> <h4 className="font-medium">{shipment.name}</h4>
<p className="text-sm text-gray-600">{shipment.description}</p> <p className="text-sm text-gray-600">{shipment.description}</p>
<p className="text-xs text-gray-500 mt-1"> <p className="text-xs text-gray-500 mt-1">
نوع ارسال: {getDeliveryTypeText(shipment.deliveryType)} | نوع ارسال: {getDeliveryTypeText(shipment.deliveryType)} |
زمان ارسال: {shipment.deliveryTime} روز زمان ارسال: {shipment.deliveryTime} روز
</p> </p>
</div>
<Button
variant="danger"
size="sm"
label="حذف"
onClick={() => handleRemoveShipmentFromAdmin(String(shipment._id))}
isLoading={removeShipmentFromAdminMutation.isPending}
className="w-fit"
/>
</div> </div>
<Button ))}
variant="danger"
size="sm"
label="حذف"
onClick={() => handleRemoveShipmentFromAdmin(String(shipment._id))}
isLoading={removeShipmentFromAdminMutation.isPending}
className="w-fit"
/>
</div>
))}
</div> </div>
)} )}
</div> </div>