+
+ {[['az', 'A–Z'], ['laden', 'Nach Laden']].map(([key, label]) => (
+
+ ))}
+
+ {byShop &&
}
+
+ )}
+
diff --git a/frontend/src/components/haushalt/MinimumDialog.jsx b/frontend/src/components/haushalt/MinimumDialog.jsx
new file mode 100644
index 0000000..976151d
--- /dev/null
+++ b/frontend/src/components/haushalt/MinimumDialog.jsx
@@ -0,0 +1,60 @@
+import { useState } from 'react';
+import { parseQty } from '../../units.js';
+import ProductInput from './ProductInput.jsx';
+import UnitSelect from './UnitSelect.jsx';
+
+/**
+ * Mindestbestände der gewählten Liste: fällt der Vorrat darunter, kommt das Produkt automatisch auf die
+ * Einkaufsliste (bis zur fehlenden Menge). start: Produkt zum Vorbelegen ({ name, unit, quantity }) oder null.
+ */
+export default function MinimumDialog({ ref, minimums, products, start, onSave, busy }) {
+ const current = start && minimums.find((m) => m.name.toLocaleLowerCase('de-DE') === start.name.toLocaleLowerCase('de-DE') && m.unit === start.unit);
+ const [name, setName] = useState(start?.name || '');
+ const [unit, setUnit] = useState(start?.unit || 'stk');
+ const [qty, setQty] = useState(current ? String(current.minimum).replace('.', ',') : '');
+ const [invalid, setInvalid] = useState(false);
+
+ async function submit(e) {
+ e.preventDefault();
+ const q = parseQty(qty, unit);
+ setInvalid(q == null || !name.trim());
+ if (q == null || !name.trim()) return;
+ if (await onSave(name.trim(), unit, q)) { setName(''); setQty(''); }
+ }
+
+ return (
+
+ );
+}
diff --git a/frontend/src/components/haushalt/ProductsDialog.jsx b/frontend/src/components/haushalt/ProductsDialog.jsx
index 1b47086..089572b 100644
--- a/frontend/src/components/haushalt/ProductsDialog.jsx
+++ b/frontend/src/components/haushalt/ProductsDialog.jsx
@@ -1,18 +1,28 @@
// Vorschläge (Produktkatalog) aufräumen, z. B. Tippfehler; Einträge auf den Listen bleiben
-export default function ProductsDialog({ ref, products, onDelete }) {
+export default function ProductsDialog({ ref, products, categories = [], productCategories = {}, onCategory, onDelete }) {
const sorted = [...products].sort((a, b) => a.localeCompare(b, 'de-DE'));
return (