From 8900e8589234a2e560f0d5b5da01b8a99105aa45 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Sat, 15 Nov 2025 15:38:28 +0330 Subject: [PATCH] delete foods --- src/components/DefaulModal.tsx | 4 ++-- src/pages/food/List.tsx | 8 +++++-- .../food/components/FoodTableColumns.tsx | 21 +++++++++++++++---- src/pages/food/hooks/useFoodData.ts | 12 ++++++++++- src/pages/food/service/FoodService.ts | 5 +++++ 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/components/DefaulModal.tsx b/src/components/DefaulModal.tsx index 7d64bb6..2f5c201 100644 --- a/src/components/DefaulModal.tsx +++ b/src/components/DefaulModal.tsx @@ -28,12 +28,12 @@ const DefaulModal: FC = (props: Props) => {
-
+
{ props.isHeader && props.title_header && -
+
diff --git a/src/pages/food/List.tsx b/src/pages/food/List.tsx index f2a2ce6..3187d1b 100644 --- a/src/pages/food/List.tsx +++ b/src/pages/food/List.tsx @@ -3,7 +3,7 @@ import Table from '@/components/Table' import Filters from '@/components/Filters' import { Add } from 'iconsax-react' import Button from '@/components/Button' -import { useGetFoods } from './hooks/useFoodData' +import { useGetFoods, useDeleteFood } from './hooks/useFoodData' import { useFoodFilters } from './hooks/useFoodFilters' import { getFoodTableColumns } from './components/FoodTableColumns' import { useFoodFiltersFields } from './components/FoodFiltersFields' @@ -21,9 +21,13 @@ const FoodsList: FC = () => { } = useFoodFilters() const { data: foodsData, isLoading } = useGetFoods(apiParams) + const { mutate: deleteFood, isPending: isDeleting } = useDeleteFood() const foods = foodsData?.data || [] - const columns = getFoodTableColumns() + const columns = getFoodTableColumns({ + onDelete: (id: string) => deleteFood(id), + isDeleting + }) const filterFields = useFoodFiltersFields() const totalPages = Math.ceil(foods.length / limit) || 1 diff --git a/src/pages/food/components/FoodTableColumns.tsx b/src/pages/food/components/FoodTableColumns.tsx index ddfe547..bbc50ff 100644 --- a/src/pages/food/components/FoodTableColumns.tsx +++ b/src/pages/food/components/FoodTableColumns.tsx @@ -5,8 +5,15 @@ import { formatPrice, formatTime } from '../utils/formatters' import Status from '@/components/Status' import { Link } from 'react-router-dom' import { Pages } from '@/config/Pages' +import TrashWithConfrim from '@/components/TrashWithConfrim' + +interface GetFoodTableColumnsParams { + onDelete: (id: string) => void + isDeleting: boolean +} + +export const getFoodTableColumns = ({ onDelete, isDeleting }: GetFoodTableColumnsParams): ColumnType[] => { -export const getFoodTableColumns = (): ColumnType[] => { return [ { key: 'image', @@ -67,9 +74,15 @@ export const getFoodTableColumns = (): ColumnType[] => { title: '', render: (item: Food) => { return ( - - - +
+ + + + onDelete(item.id)} + isLoading={isDeleting} + /> +
) } }, diff --git a/src/pages/food/hooks/useFoodData.ts b/src/pages/food/hooks/useFoodData.ts index b737fce..1b2cdc9 100644 --- a/src/pages/food/hooks/useFoodData.ts +++ b/src/pages/food/hooks/useFoodData.ts @@ -1,4 +1,4 @@ -import { useMutation, useQuery } from "@tanstack/react-query"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import * as api from "../service/FoodService"; import type { CreateFoodType, GetFoodsParams } from "../types/Types"; @@ -35,3 +35,13 @@ export const useGetCategories = () => { queryFn: api.getCategories, }); }; + +export const useDeleteFood = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: api.deleteFood, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["foods"] }); + }, + }); +}; diff --git a/src/pages/food/service/FoodService.ts b/src/pages/food/service/FoodService.ts index fe61d9a..0d87576 100644 --- a/src/pages/food/service/FoodService.ts +++ b/src/pages/food/service/FoodService.ts @@ -35,3 +35,8 @@ export const getCategories = async (): Promise => { const { data } = await axios.get(`/categories`); return data; }; + +export const deleteFood = async (id: string) => { + const { data } = await axios.delete(`/foods/${id}`); + return data; +};