/* ================================================ Views: List, Map, Detail ================================================ */ function ListView({ parcels, onSelect, onNew, layout, setLayout, mapStyle }) { const [q, setQ] = React.useState(""); const [sortFilter, setSortFilter] = React.useState("all"); const filtered = parcels.filter((p) => { const matchQ = !q || p.lagebuch.toLowerCase().includes(q.toLowerCase()) || p.lage.toLowerCase().includes(q.toLowerCase()) || p.sorte.toLowerCase().includes(q.toLowerCase()); const matchS = sortFilter === "all" || p.sorte === sortFilter; return matchQ && matchS; }); const totalHa = filtered.reduce((s, p) => s + p.flaeche, 0); const sortenCount = new Set(parcels.map((p) => p.sorte)).size; const oldest = parcels.reduce((a, p) => p.pflanzjahr < a ? p.pflanzjahr : a, 9999); const sortOptions = ["all", ...new Set(parcels.map((p) => p.sorte))]; return ( <>
Flächen gesamt
{parcels.length} Parzellen
Gesamtfläche
{fmtNum(parcels.reduce((s, p) => s + p.flaeche, 0))} ha
Sorten
{sortenCount} verschieden
Älteste Anlage
{oldest} · {new Date().getFullYear() - oldest} Jahre
setQ(e.target.value)} />
{sortOptions.map((s) => ( ))}
{filtered.length} Fläche{filtered.length !== 1 ? "n" : ""} · {fmtNum(totalHa)} ha
{layout === "table" ? (
{filtered.map((p) => ( onSelect(p)}> ))}
Lagebuch Lage Sorte Pflanzjahr Fläche Erziehung Letzte Bearbeitung
{p.lagebuch} {p.lage} {p.pflanzjahr} {fmtNum(p.flaeche)} ha {p.erziehung} {fmtDate(p.letzteBearbeitung)}
) : (
{filtered.map((p) => (
onSelect(p)}>
{p.lagebuch}
{p.lage}
Pflanzjahr {p.pflanzjahr} {fmtNum(p.flaeche)} ha
))}
)} ); } window.ListView = ListView; /* ------- Map view ------- */ function MapView({ parcels, onSelect, activeId, setActiveId, mapStyle }) { return (
Parzellen-Register
{parcels.length} Flächen · {fmtNum(parcels.reduce((s, p) => s + p.flaeche, 0))} ha
{parcels.map((p) => (
setActiveId(p.id)} onDoubleClick={() => onSelect(p)} >
{p.lage}
{p.lagebuch} · {fmtNum(p.flaeche)} ha
))}
{ setActiveId(p.id); }} />
Legende · Rebsorten
{Array.from(new Set(parcels.map((p) => p.sorte))).map((s) => { const p = parcels.find((x) => x.sorte === s); return (
{s}
); })}
48.08°N, 7.65°E · Kaiserstuhl
); } window.MapView = MapView; /* ------- Detail view ------- */ function DetailView({ parcel, onBack, onEdit, mapStyle }) { const [sideOpen, setSideOpen] = React.useState(false); // Sidebar schließen, wenn eine andere Parzelle geöffnet wird. React.useEffect(() => { setSideOpen(false); }, [parcel.id]); return (
Zurück zur Übersicht
{parcel.lagebuch}

{parcel.lage}

Pflanzjahr {parcel.pflanzjahr} · {parcel.erziehung}
Flächeninhalt
{fmtNum(parcel.flaeche)} ha
Umfang
~{Math.round(Math.sqrt(parcel.flaeche * 10000) * 4)} m
Alter
{new Date().getFullYear() - parcel.pflanzjahr} J.
Notizen
{parcel.notizen}
{sideOpen && (
Historie
{parcel.historie.map((h, i) => (
{fmtDate(h.datum)}
{h.text}
))}
Stammdaten
Lagebuch-Nr.{parcel.lagebuch}
Lage{parcel.lage}
Sorte{parcel.sorte}
Pflanzjahr{parcel.pflanzjahr}
Erziehung{parcel.erziehung}
Fläche{fmtNum(parcel.flaeche)} ha
Zuletzt geändert{fmtDate(parcel.letzteBearbeitung)}
)}
); } window.DetailView = DetailView;