import { useState } from "react"; import Icon from "./Icon"; import { locationOptions } from "../locationPath"; /** * Editor für Mindestbestände je Lagerort (Bedarfe). Eine Zeile je Ort mit Menge; * „Bedarfe speichern" ersetzt über onSave die komplette Liste. Menge 0/leer = * Ort fällt weg. */ export default function LocationMinStock({ locations, initial = [], unitLabel = "", onSave, onError }) { const [rows, setRows] = useState(() => initial.map((e) => ({ location_id: String(e.location_id), min_stock: String(e.min_stock) })), ); const [busy, setBusy] = useState(false); const [ok, setOk] = useState(false); const used = new Set(rows.map((r) => r.location_id)); const frei = locations.filter((l) => !used.has(String(l.id))); function addRow() { if (!frei.length) return; setRows([...rows, { location_id: String(frei[0].id), min_stock: "" }]); setOk(false); } function setRow(i, patch) { setRows(rows.map((r, j) => (j === i ? { ...r, ...patch } : r))); setOk(false); } function removeRow(i) { setRows(rows.filter((_, j) => j !== i)); setOk(false); } async function save() { setBusy(true); try { const list = rows .filter((r) => r.location_id !== "" && Number(r.min_stock) > 0) .map((r) => ({ location_id: r.location_id, min_stock: Number(r.min_stock) })); await onSave(list); setOk(true); } catch (err) { onError?.(err.message); } finally { setBusy(false); } } if (!locations.length) { return

Erst Lagerorte anlegen, dann Bedarfe je Ort möglich.

; } return (
{rows.length === 0 && (

Kein Bedarf je Lagerort festgelegt.

)} {rows.map((r, i) => (
{unitLabel && {unitLabel}}
))}
{ok && Gespeichert.}
); }