feat: Objekte-Kategorien (stern/sonne/beide) — Version 1.10.1

- Neue Spalte Kategorie (SET stern/sonne) in objekte-Tabelle
- ObjektSelector zeigt je nach ArtFuehrung nur passende Objekte
- SonnenFührung: Sonne fest vorausgewählt, zusätzliche Sonne-Objekte wählbar
- Bestehende Objekte erhalten Kategorie automatisch beim Speichern
- Admin: Kategorie editierbar (stern / sonne / stern,sonne)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-14 16:14:52 +02:00
parent 96ba03b909
commit 7475d4fd37
8 changed files with 92 additions and 42 deletions
+15 -18
View File
@@ -120,8 +120,11 @@ export default function LogbuchForm({ kuppel, currentUserBeo, editEntry, onSaved
.catch(() => {});
}
if (editEntry && editEntry.Objekte) {
const names = editEntry.Objekte.split(', ').map((n) => n.trim());
fetch('/api/objekte')
const allNames = editEntry.Objekte.split(', ').map((n) => n.trim());
const isSonneEntry = editEntry.ArtFuehrung === SONNE_ART;
const names = isSonneEntry ? allNames.filter((n) => n.toLowerCase() !== 'sonne') : allNames;
const kat = isSonneEntry ? 'sonne' : 'stern';
fetch('/api/objekte?kategorie=' + kat)
.then((r) => r.json())
.then((all: { ID: number; Name: string }[]) => {
const result: SelectedObjekt[] = names.map((name) => {
@@ -134,12 +137,10 @@ export default function LogbuchForm({ kuppel, currentUserBeo, editEntry, onSaved
}
}, [editEntry]);
// Objekte-Vorauswahl je nach Art der Führung; Besucher zurücksetzen wenn nicht relevant
// Objekte und Besucher zurücksetzen beim Wechsel der Art der Führung
useEffect(() => {
if (artFuehrung === SONNE_ART) {
setObjekte([{ ID: null, Name: 'Sonne' }]);
} else if (NO_OBJEKTE_ARTEN.includes(artFuehrung)) {
setObjekte([]);
setObjekte([]);
if (NO_OBJEKTE_ARTEN.includes(artFuehrung)) {
setBesucher('');
}
}, [artFuehrung]);
@@ -172,7 +173,7 @@ export default function LogbuchForm({ kuppel, currentUserBeo, editEntry, onSaved
Ende: ende,
Besucher: besucher === '' ? 0 : besucher,
beoIds: beos.map((b) => b.ID),
objekte: showObjekte ? objekte : [],
objekte: showObjekte ? (isSonne ? [{ ID: null, Name: 'Sonne' }, ...objekte] : objekte) : [],
Bemerkungen: bemerkungen,
Wetter: { ...wetter, temp: parseFloat(tempRaw) || 0 },
};
@@ -304,16 +305,12 @@ export default function LogbuchForm({ kuppel, currentUserBeo, editEntry, onSaved
{showObjekte && (
<div>
<label className={labelCls}>Beobachtete Objekte</label>
{isSonne ? (
<div className="flex items-center gap-2">
<span className="inline-flex items-center bg-green-100 text-green-800 text-sm px-3 py-1.5 rounded-full">
Sonne
</span>
<span className="text-xs text-gray-500">(bei Sonnenführung fest vorgegeben)</span>
</div>
) : (
<ObjektSelector selected={objekte} onChange={setObjekte} />
)}
<ObjektSelector
selected={objekte}
onChange={setObjekte}
kategorie={isSonne ? 'sonne' : 'stern'}
fixedItems={isSonne ? [{ ID: null, Name: 'Sonne' }] : []}
/>
</div>
)}