/* ================================================
Settings — manage Sorten, default map style + list layout
================================================ */
function SettingsView({
sorten, setSorten,
mapStyle, setMapStyle,
listLayout, setListLayout,
persistTweak,
}) {
const [editing, setEditing] = React.useState(null); // {index, name, farbe} | "new"
const [draft, setDraft] = React.useState({ name: "", farbe: "#6B1F2E" });
function openNew() {
setDraft({ name: "", farbe: "#6B1F2E" });
setEditing("new");
}
function openEdit(i) {
setDraft({ name: sorten[i].name, farbe: sorten[i].farbe });
setEditing(i);
}
function closeEditor() { setEditing(null); }
function saveDraft() {
const name = draft.name.trim();
if (!name) return;
if (editing === "new") {
if (sorten.some(s => s.name.toLowerCase() === name.toLowerCase())) return;
setSorten([...sorten, { name, farbe: draft.farbe }]);
} else {
const next = sorten.slice();
next[editing] = { ...next[editing], name, farbe: draft.farbe };
setSorten(next);
}
setEditing(null);
}
function removeSorte(i) {
if (!confirm(`Sorte „${sorten[i].name}“ wirklich löschen?`)) return;
const next = sorten.slice();
next.splice(i, 1);
setSorten(next);
}
return (
Administration
Einstellungen
Stammdaten für Rebsorten sowie die Standardvorgaben für Karten- und
Listendarstellung dieses Betriebs.
{sorten.map((s, i) => (
{s.name}
{s.farbe.toUpperCase()}
))}
{sorten.length === 0 && (
Noch keine Sorten angelegt.
)}
Kartenstil
Kachel-Material, das bei jeder Karte geladen wird.
Listen-Layout
Tabellen- oder Kacheldarstellung der Flächenübersicht.
{editing !== null && (
)}
);
}
const SORTE_PRESETS = [
["#6B1F2E", "Burgund tief"],
["#8B2F42", "Kirsche"],
["#A8445B", "Rosé dunkel"],
["#C47B5A", "Kupfer"],
["#D99A6C", "Terrakotta"],
["#8B6F47", "Eiche"],
["#B58556", "Karamell"],
["#C9A961", "Gold"],
["#D4B76A", "Honig"],
["#E8DCC4", "Sand"],
["#D4C896", "Stroh"],
["#B5C47A", "Blattgrün"],
["#8EA564", "Weinlaub"],
["#6A8548", "Moos"],
["#3F4B3A", "Tann"],
];
function SorteEditor({ draft, setDraft, isNew, onCancel, onSave }) {
const valid = draft.name.trim().length > 0;
return (
e.target === e.currentTarget && onCancel()}>
e.stopPropagation()}
>
{isNew ? "Neue Sorte anlegen" : "Sorte bearbeiten"}
Diese Farbe erscheint als Polygon-Füllung auf der Karte, als Punkt in Listen und als Legenden-Marker.
{/* Live preview */}
Vorschau
{draft.name.trim() || "Sortenname"}
{draft.farbe.toUpperCase()}
{/* Form */}
setDraft({ ...draft, name: e.target.value })}
placeholder="z. B. Spätburgunder"
autoFocus
/>
Voreinstellungen
{SORTE_PRESETS.map(([hex, name]) => (
))}
);
}
window.SettingsView = SettingsView;