From c421c5868d93de9449a5d7d2791225c2d2534ffd Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Thu, 23 Oct 2025 11:33:14 +0330 Subject: [PATCH] delete product --- src/pages/products/List.tsx | 25 ++++++++++++++------ src/pages/products/hooks/useProductData.ts | 6 +++++ src/pages/products/service/ProductService.ts | 5 ++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/pages/products/List.tsx b/src/pages/products/List.tsx index 1088f41..602a200 100644 --- a/src/pages/products/List.tsx +++ b/src/pages/products/List.tsx @@ -1,5 +1,5 @@ import { type FC, useState } from 'react' -import { useGetProducts } from './hooks/useProductData'; +import { useDeleteProduct, useGetProducts } from './hooks/useProductData'; import { type ProductListType } from './types/Types'; import { ProductStatus } from './enum/ProductEnum'; import PageLoading from '../../components/PageLoading'; @@ -7,19 +7,22 @@ import Error from '../../components/Error'; import PaginationUi from '../../components/PaginationUi'; import StatusWithText from '../../components/StatusWithText'; import Td from '../../components/Td'; +import TrashWithConfrim from '../../components/TrashWithConfrim'; import PageTitle from '../../components/PageTitle'; import { Edit } from 'iconsax-react'; import Button from '@/components/Button'; import { Link } from 'react-router-dom'; import { Pages } from '@/config/Pages'; import { useNavigate } from 'react-router-dom'; +import { toast } from 'react-toastify'; +import { extractErrorMessage } from '@/helpers/utils'; const List: FC = () => { const navigate = useNavigate(); const [currentPage, setCurrentPage] = useState(1); - const { data: productsData, isLoading, error } = useGetProducts(currentPage); - + const { data: productsData, isLoading, error, refetch } = useGetProducts(currentPage); + const deleteProductMutation = useDeleteProduct(); if (isLoading) { return (
@@ -143,12 +146,20 @@ const List: FC = () => { )} - {/* { - // TODO: Implement delete product - console.log('Delete product:', product._id); + deleteProductMutation.mutate(product._id, { + onSuccess: () => { + toast.success('محصول با موفقیت حذف شد'); + refetch(); + }, + onError: (error) => { + toast.error(extractErrorMessage(error)); + } + }); }} - /> */} + />
diff --git a/src/pages/products/hooks/useProductData.ts b/src/pages/products/hooks/useProductData.ts index 72e6fe8..8d89bba 100644 --- a/src/pages/products/hooks/useProductData.ts +++ b/src/pages/products/hooks/useProductData.ts @@ -97,4 +97,10 @@ export const useSearchProducts = (search: string, enabled: boolean = true) => { queryFn: () => api.getProducts(1, 50, search), enabled: enabled, }); +}; + +export const useDeleteProduct = () => { + return useMutation({ + mutationFn: (id: number) => api.deleteProduct(id), + }); }; \ No newline at end of file diff --git a/src/pages/products/service/ProductService.ts b/src/pages/products/service/ProductService.ts index 4a87461..999ab22 100644 --- a/src/pages/products/service/ProductService.ts +++ b/src/pages/products/service/ProductService.ts @@ -94,3 +94,8 @@ export const updateProduct = async (params: UpdateProductRequestType): Promise { + const { data } = await axios.delete(`/admin/products/${id}/delete`); + return data; +}; \ No newline at end of file