import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { api } from "../api"; import { useAuth } from "../auth"; import { fmt, unitShort } from "../units"; export default function Products() { const { isAdmin } = useAuth(); const [products, setProducts] = useState([]); const [q, setQ] = useState(""); const [error, setError] = useState(null); async function load() { try { setProducts(await api.listProducts(q)); } catch (err) { setError(err.message); } } useEffect(() => { load(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); function onSearch(e) { e.preventDefault(); load(); } return (

Produkte

{isAdmin && + Neues Produkt}
{error &&
{error}
}
setQ(e.target.value)} />
{products.map((p) => ( ))} {products.length === 0 && ( )}
Name Marke Basiseinheit Bestand Mindest
{p.image_url ? : "📦"} {p.name} {p.brand || "–"} {unitShort(p.base_unit)}{p.package_size ? ` · Pkg ${p.package_size}` : ""} {fmt(p.stock)} {unitShort(p.base_unit)} {p.min_stock != null ? fmt(p.min_stock) : "–"} Details
Keine Produkte.
); }