import { type FC, useMemo, useState } from 'react' import type { FormikProps } from 'formik' import { Add } from 'iconsax-react' import Input from '@/components/Input' import type { Food } from '@/pages/food/types/Types' import { formatPrice } from '@/helpers/func' import { getFoodUnitPrice } from '../hooks/useCreateOrderForm' import type { CreateOrderFormValues } from '../hooks/useCreateOrderForm' interface CreateOrderItemsSectionProps { formik: FormikProps foods: Food[] onAddFood: (foodId: string) => void } const CreateOrderItemsSection: FC = ({ formik, foods, onAddFood, }) => { const [search, setSearch] = useState('') const [selectedCategoryId, setSelectedCategoryId] = useState(null) 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) { result = result.filter((food) => food.title.toLowerCase().includes(query)) } return result }, [foods, search, selectedCategoryId]) return (
انتخاب غذا
setSearch(e.target.value)} /> {categories.length > 0 && (
{categories.map((category) => ( ))}
)}
{filteredFoods.length === 0 ? (
غذایی یافت نشد
) : ( filteredFoods.map((food) => { const inCart = formik.values.items.some( (item) => item.foodId === food.id ) const cartQty = formik.values.items.find( (item) => item.foodId === food.id )?.quantity return (
{food.images?.[0] ? ( {food.title} ) : (
)}
{food.title}
{formatPrice(getFoodUnitPrice(food))}
) }) )}
{formik.touched.items && formik.errors.items && typeof formik.errors.items === 'string' && (
{formik.errors.items}
)}
) } export default CreateOrderItemsSection