From 19a68f7188b89e8726b7de58f3a62c9d2f9e4cf6 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Mon, 27 Oct 2025 11:53:20 +0330 Subject: [PATCH] admin shipment --- src/components/ShipmentManagementModal.tsx | 138 ++++++++++++++++ src/pages/setting/Shop.tsx | 21 +-- .../components/ShipmentManagementModal.tsx | 154 ------------------ src/pages/shipment/List.tsx | 32 +++- src/pages/shipment/hooks/useShipmentData.ts | 12 +- src/pages/shipment/servicce/Service.ts | 8 +- 6 files changed, 171 insertions(+), 194 deletions(-) create mode 100644 src/components/ShipmentManagementModal.tsx delete mode 100644 src/pages/setting/components/ShipmentManagementModal.tsx diff --git a/src/components/ShipmentManagementModal.tsx b/src/components/ShipmentManagementModal.tsx new file mode 100644 index 0000000..b923b42 --- /dev/null +++ b/src/components/ShipmentManagementModal.tsx @@ -0,0 +1,138 @@ +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 || []; + + // لیست روش‌های ارسال که هنوز به ادمین اضافه نشده‌اند + const availableShipments = shipments.filter((shipment: Shipper) => + !adminShipments.some((adminShipment: ShipmentMethod) => adminShipment._id === shipment._id) + ); + + const handleAddShipmentToAdmin = async () => { + if (!selectedShipment) return; + + await addShipmentToAdminMutation.mutateAsync(Number(selectedShipment), { + onError: (error) => { + toast.error(extractErrorMessage(error)); + }, + onSuccess: () => { + refetchAdminShop(); + 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} + > +
+ {/* بخش اضافه کردن روش ارسال جدید */} +
+

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

+
+