From 0539d4bc48549d570c224a24082a14c63435211e Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Wed, 1 Jul 2026 09:07:24 +0330 Subject: [PATCH] Create order filter by category --- .../components/CreateOrderItemsSection.tsx | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/src/pages/orders/components/CreateOrderItemsSection.tsx b/src/pages/orders/components/CreateOrderItemsSection.tsx index 08903b1..c64c3d1 100644 --- a/src/pages/orders/components/CreateOrderItemsSection.tsx +++ b/src/pages/orders/components/CreateOrderItemsSection.tsx @@ -23,17 +23,36 @@ const CreateOrderItemsSection: FC = ({ onRemoveItem, }) => { const [search, setSearch] = useState('') + const [selectedCategoryId, setSelectedCategoryId] = useState(null) const foodsMap = useMemo( () => new Map(foods.map((food) => [food.id, food])), [foods] ) + const categories = useMemo(() => { + const categoryMap = new Map() + foods.forEach((food) => { + if (food.category?.id) { + categoryMap.set(food.category.id, food.category.title) + } + }) + return Array.from(categoryMap.entries()) + .map(([id, title]) => ({ id, title })) + .sort((a, b) => a.title.localeCompare(b.title, 'fa')) + }, [foods]) + const filteredFoods = useMemo(() => { + let result = foods + if (selectedCategoryId) { + result = result.filter((food) => food.category?.id === selectedCategoryId) + } const query = search.trim().toLowerCase() - if (!query) return foods - return foods.filter((food) => food.title.toLowerCase().includes(query)) - }, [foods, search]) + if (query) { + result = result.filter((food) => food.title.toLowerCase().includes(query)) + } + return result + }, [foods, search, selectedCategoryId]) const selectedItems = formik.values.items .map((item) => { @@ -56,6 +75,36 @@ const CreateOrderItemsSection: FC = ({ onChange={(e) => setSearch(e.target.value)} /> + {categories.length > 0 && ( +
+ + {categories.map((category) => ( + + ))} +
+ )} +
{filteredFoods.length === 0 ? (