From 990e3f9f633ab51410b4c13bbf8fd22a1c526daf Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Sun, 21 Dec 2025 10:18:15 +0330 Subject: [PATCH] add pagination and inverntory --- src/pages/food/List.tsx | 3 +-- .../food/components/FoodTableColumns.tsx | 18 +++++++++++++ src/pages/food/types/Types.ts | 25 ++++++++++++++++--- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/pages/food/List.tsx b/src/pages/food/List.tsx index 40b1734..b7bbdfa 100644 --- a/src/pages/food/List.tsx +++ b/src/pages/food/List.tsx @@ -17,7 +17,6 @@ const FoodsList: FC = () => { apiParams, handleFiltersChange, handlePageChange, - limit, } = useFoodFilters() const { data: foodsData, isLoading } = useGetFoods(apiParams) @@ -30,7 +29,7 @@ const FoodsList: FC = () => { }) const filterFields = useFoodFiltersFields() - const totalPages = Math.ceil(foods.length / limit) || 1 + const totalPages = foodsData?.meta?.totalPages || 1 return (
diff --git a/src/pages/food/components/FoodTableColumns.tsx b/src/pages/food/components/FoodTableColumns.tsx index 35b35ae..10b328d 100644 --- a/src/pages/food/components/FoodTableColumns.tsx +++ b/src/pages/food/components/FoodTableColumns.tsx @@ -60,6 +60,24 @@ export const getFoodTableColumns = ({ onDelete, isDeleting }: GetFoodTableColumn return formatTime(item.prepareTime || 0) } }, + { + key: 'inventory', + title: 'موجودی', + render: (item: Food) => { + const availableStock = item.inventory.availableStock + const totalStock = item.inventory.totalStock + return ( +
+ + {availableStock} / {totalStock} + + {availableStock === 0 && ( + ناموجود + )} +
+ ) + } + }, { key: 'isActive', title: 'وضعیت', diff --git a/src/pages/food/types/Types.ts b/src/pages/food/types/Types.ts index 6315a6e..213c9a5 100644 --- a/src/pages/food/types/Types.ts +++ b/src/pages/food/types/Types.ts @@ -40,6 +40,16 @@ export type FoodDetailsCategory = { avatarUrl: string | null; }; +export type Inventory = { + id: string; + createdAt: string; + updatedAt: string; + deletedAt: string | null; + food: string; + totalStock: number; + availableStock: number; +}; + export type Food = { id: string; createdAt: string; @@ -47,7 +57,7 @@ export type Food = { deletedAt: string | null; restaurant: string; category: FoodDetailsCategory; - inventory: string | null; + inventory: Inventory; title: string; desc: string; content: string[]; @@ -60,7 +70,7 @@ export type Food = { images: string[]; inPlaceServe: boolean; pickupServe: boolean; - score: number | null; + score: number; discount: number; isSpecialOffer: boolean; }; @@ -82,7 +92,7 @@ export type FoodDetails = { deletedAt: string | null; restaurant: string; category: FoodDetailsCategory; - inventory: string | null; + inventory: Inventory | null; title: string; desc: string; content: string[]; @@ -100,8 +110,15 @@ export type FoodDetails = { isSpecialOffer: boolean; }; +export type PaginationMeta = { + total: number; + page: string; + limit: string; + totalPages: number; +}; + export type GetCategoriesResponseType = IResponse; -export type GetFoodsResponseType = IResponse; +export type GetFoodsResponseType = IResponse & { meta: PaginationMeta }; export type GetFoodDetailsResponseType = IResponse; export type CreateCategoryType = {