Create order filter by category

This commit is contained in:
hamid zarghami
2026-07-01 09:07:24 +03:30
parent e6b3610bfc
commit 0539d4bc48
@@ -23,17 +23,36 @@ const CreateOrderItemsSection: FC<CreateOrderItemsSectionProps> = ({
onRemoveItem,
}) => {
const [search, setSearch] = useState('')
const [selectedCategoryId, setSelectedCategoryId] = useState<string | null>(null)
const foodsMap = useMemo(
() => new Map(foods.map((food) => [food.id, food])),
[foods]
)
const categories = useMemo(() => {
const categoryMap = new Map<string, string>()
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<CreateOrderItemsSectionProps> = ({
onChange={(e) => setSearch(e.target.value)}
/>
{categories.length > 0 && (
<div className='mt-3 flex gap-2 overflow-x-auto pb-1'>
<button
type='button'
onClick={() => setSelectedCategoryId(null)}
className={`flex-shrink-0 px-3 h-8 rounded-full text-xs transition-colors ${
selectedCategoryId === null
? 'bg-primary text-white'
: 'bg-[#EEF0F7] text-description hover:bg-[#E4E7F0]'
}`}
>
همه
</button>
{categories.map((category) => (
<button
key={category.id}
type='button'
onClick={() => setSelectedCategoryId(category.id)}
className={`flex-shrink-0 px-3 h-8 rounded-full text-xs transition-colors whitespace-nowrap ${
selectedCategoryId === category.id
? 'bg-primary text-white'
: 'bg-[#EEF0F7] text-description hover:bg-[#E4E7F0]'
}`}
>
{category.title}
</button>
))}
</div>
)}
<div className='mt-3 space-y-2 max-h-56 overflow-y-auto'>
{filteredFoods.length === 0 ? (
<div className='text-center py-6 text-xs text-description'>