fix: BEOs und Objekte bleiben beim Wechsel der Art erhalten — Version 1.16.1
Zwei getrennte Ursachen dafür, dass ausgefüllte Felder beim nachträglichen Wählen der Art der Führung verschwanden: - Objekte wurden bei jedem Wechsel der Art unbedingt geleert. Jetzt nur noch, wenn die Objektkategorie tatsächlich umschlägt (SonF ↔ Rest). - currentUserBeo wurde in MainClient bei jedem Rendern neu erzeugt und steht in den Abhängigkeiten des Vorbelegungs-Effekts in LogbuchForm. Dadurch setzte jedes Neurendern der Elternkomponente das ganze Formular zurück — BEOs auf den eigenen Namen, dazu Objekte, Zeiten und Bemerkungen. Ein konkreter Auslöser ist die Backup-Schaltfläche auf demselben Bildschirm. Das Objekt ist jetzt useMemo-stabil. Nebeneffekt: beim Bearbeiten lief das bisherige setObjekte([]) gegen das asynchrone Nachladen der gespeicherten Objekte — dieser Wettlauf entfällt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -175,6 +175,8 @@ export default function LogbuchForm({ kuppel, currentUserBeo, editEntry, onSaved
|
||||
return () => { verworfen = true; };
|
||||
}, [ende]);
|
||||
|
||||
// Vorbelegen beim Bearbeiten, sonst leeres Formular. currentUserBeo muss vom
|
||||
// Aufrufer stabil gehalten werden, sonst setzt jedes Rendern die Eingaben zurück.
|
||||
useEffect(() => {
|
||||
if (editEntry) {
|
||||
setArtFuehrung(editEntry.ArtFuehrung);
|
||||
@@ -233,17 +235,23 @@ export default function LogbuchForm({ kuppel, currentUserBeo, editEntry, onSaved
|
||||
}
|
||||
}, [editEntry]);
|
||||
|
||||
// Objekte, Besucher und Spende zurücksetzen beim Wechsel der Art der Führung
|
||||
// Beim Wechsel der Art der Führung nur das zurücksetzen, was zur neuen Art nicht
|
||||
// mehr passt. Der erste Lauf bleibt außen vor: dort steht noch der Startwert 'RF',
|
||||
// während die Vorbelegung aus editEntry gerade erst gesetzt wird.
|
||||
useEffect(() => {
|
||||
const vorherigeArt = prevArtRef.current;
|
||||
prevArtRef.current = artFuehrung;
|
||||
setObjekte([]);
|
||||
if (vorherigeArt === null) return;
|
||||
|
||||
// Objekte nur leeren, wenn die Kategorie wechselt (Sonne ↔ Sterne) — sonst gingen
|
||||
// bereits eingetragene Objekte verloren, wenn die Art erst danach gewählt wird.
|
||||
if ((vorherigeArt === SONNE_ART) !== (artFuehrung === SONNE_ART)) {
|
||||
setObjekte([]);
|
||||
}
|
||||
if (NO_OBJEKTE_ARTEN.includes(artFuehrung)) {
|
||||
setBesucher('');
|
||||
}
|
||||
// Nicht beim ersten Lauf leeren — sonst überschreibt der Start-Wert 'RF'
|
||||
// die aus editEntry vorbelegte Spende.
|
||||
if (vorherigeArt !== null && artFuehrung !== 'SF') {
|
||||
if (artFuehrung !== 'SF') {
|
||||
setSpende('');
|
||||
setSpendeBetragRaw('');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user