import { Button, Container, MenuItem, Stack, TextField, Typography, InputAdornment, } from '@mui/material'; import SearchIcon from '@mui/icons-material/Search'; import { useEffect, useMemo, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { v4 as uuidv4 } from 'uuid'; import { NumericStepper } from '../components/NumericStepper'; import { usePickItems, useProducts } from '../hooks/dataHooks'; import { useDatabase } from '../context/DBProvider'; export const AddItemScreen = () => { const { id } = useParams(); const db = useDatabase(); const items = usePickItems(id); const products = useProducts(); const [productId, setProductId] = useState(''); const [query, setQuery] = useState(''); const [units, setUnits] = useState(1); const [bulk, setBulk] = useState(0); const navigate = useNavigate(); const existingProductIds = useMemo( () => new Set(items.map((item) => item.product_id)), [items], ); const availableProducts = useMemo( () => products.filter((product) => !existingProductIds.has(product.id)), [existingProductIds, products], ); const filteredProducts = useMemo( () => availableProducts.filter((product) => `${product.name} ${product.category}`.toLowerCase().includes(query.toLowerCase()), ), [availableProducts, query], ); useEffect(() => { if (!productId) return; if (!filteredProducts.some((product) => product.id === productId)) { setProductId(''); } }, [filteredProducts, productId]); const addItem = async () => { if (!id || !productId || existingProductIds.has(productId)) return; await db.pickItems.add({ id: uuidv4(), pick_list_id: id, product_id: productId, quantity_units: units, quantity_bulk: bulk, status: 'pending', created_at: Date.now(), updated_at: Date.now(), }); navigate(`/pick-lists/${id}`); }; return ( Add Item setQuery(event.target.value)} InputProps={{ startAdornment: {} }} /> setProductId(event.target.value)} > {filteredProducts.map((product) => ( {product.name} ({product.category}) ))} ); };