feat: Rennmausakte, Zucht-Suffix, Gehege-Bilder, Toasts, Infinite-Scroll
Detailseite (Rennmausakte): - Neugestaltung: Hero-Foto + Overlay, Schnellfakten-Pills, Karten-Sektionen, Charakter als Chips, getabte Fotos/Gesundheit/Gewicht. - Eltern (Vater/Mutter) als Links; Charakter-Karte klappt bei Status Abgabe/Verstorben/Abgegeben ein (nur Zucht/Liebhaber offen). - Gehege wird bei abgegebenen/verstorbenen Tieren ausgeblendet (Detail + Formular). Listen: - Infinite Scroll auf allen Listen (Rennmäuse, Würfe, Gehege, Verträge, Anfragen, Kontakte) via useInfiniteList/useInfiniteSentinel; stabile Sortierung mit id-Tiebreaker (keine doppelten Keys), Back-to-top-Button. - Kontakte: Rolle-Filter (Züchter/Abnehmer) als Quick-Chips + Sticky-Header. Zucht-Nachname: - Namens-Anhängsel der Zucht in den Einstellungen + je Züchter-Kontakt (Backend-Spalten + Migration); eigene Tiere zeigen „Name + Suffix". - „Eigene Zucht" ist die Standard-Herkunft neuer Tiere. Weiteres: - Gehege-Bilder: Upload/Galerie auf der Gehege-Detailseite (Backend EnclosurePhoto + Endpoints + Migration, geteilte Dateiablage). - Toast-Rückmeldungen für alle Speichern-Aktionen. - Checkboxen durch mobile-freundliche Toggle-Schalter ersetzt. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -125,6 +125,8 @@ export const de = {
|
||||
createTitle: 'Neue Rennmaus anlegen',
|
||||
editTitle: 'Rennmaus bearbeiten',
|
||||
none: '— keine Angabe —',
|
||||
// Herkunft-Standardoption: eigene Zucht (leere Herkunft = selbst gezüchtet).
|
||||
ownBreeding: 'Eigene Zucht',
|
||||
genotypeHint:
|
||||
'Optional. Format z. B. „Aa CC Dd EE GG Pp Spsp rere“. Unbekannte Allele als „-“.',
|
||||
// BESTAND-FILTER: Zugehörigkeit zum eigenen Bestand (sonst externe Ahne)
|
||||
@@ -360,6 +362,8 @@ export const de = {
|
||||
name: 'Name',
|
||||
notes: 'Notizen',
|
||||
},
|
||||
// Bilder-Sektion auf der Gehege-Detailseite.
|
||||
photosTitle: 'Bilder',
|
||||
occupancy: {
|
||||
title: 'Bewohner',
|
||||
empty: 'Dieses Gehege ist derzeit leer.',
|
||||
@@ -511,6 +515,9 @@ export const de = {
|
||||
'Noch unvollständig: Name, Adresse und Ort werden für den Vertrag benötigt.',
|
||||
fields: {
|
||||
zuchtName: 'Zuchtname',
|
||||
nameSuffix: 'Namens-Anhängsel der Zucht',
|
||||
nameSuffixHint:
|
||||
'Wird wie ein „Nachname" an eigene Tiere angehängt, z. B. „von den kleinen Chaoten“ → „Danako von den kleinen Chaoten“.',
|
||||
name: 'Vor- und Nachname',
|
||||
nameHint: 'Mit Anrede, z. B. „Frau Erika Muster“.',
|
||||
address: 'Adresse',
|
||||
@@ -587,6 +594,12 @@ export const de = {
|
||||
empty: 'Keine Kontakte gefunden.',
|
||||
countLabel: 'Kontakte',
|
||||
searchPlaceholder: 'Name suchen …',
|
||||
// Quick-Chip-Filter nach Rolle (Züchter / Abnehmer).
|
||||
filters: {
|
||||
role: 'Rolle',
|
||||
breeder: 'Züchter',
|
||||
receiver: 'Abnehmer',
|
||||
},
|
||||
// FEAT-13: contactInfo (Freitext) wurde durch strukturierte Felder ersetzt
|
||||
// (DATA-2-Schema: email/phone/address) — gebraucht für den Käufer-Block der Verträge.
|
||||
fields: {
|
||||
@@ -597,6 +610,9 @@ export const de = {
|
||||
notes: 'Notizen',
|
||||
isBreeder: 'Ist Züchter (Zucht)',
|
||||
isReceiver: 'Ist Abnehmer (Käufer)',
|
||||
nameSuffix: 'Namens-Anhängsel der Zucht',
|
||||
nameSuffixHint:
|
||||
'Wird an Tiere aus dieser Zucht angehängt, z. B. „von den Wüstenwinden“.',
|
||||
},
|
||||
linked: {
|
||||
title: 'Verknüpfte Tiere',
|
||||
@@ -822,6 +838,10 @@ export const de = {
|
||||
delete: 'Löschen',
|
||||
confirmDelete: 'Wirklich löschen?',
|
||||
pageNav: 'Seitennavigation',
|
||||
// Toast-Rückmeldungen
|
||||
saved: 'Gespeichert',
|
||||
saveFailed: 'Speichern fehlgeschlagen',
|
||||
deleted: 'Gelöscht',
|
||||
},
|
||||
// Genetik-Warnungen: der Engine (src/genetics) liefert nur CODES,
|
||||
// die deutschen Texte stehen hier. Schlüssel = GeneticsWarningCode-Werte.
|
||||
|
||||
Reference in New Issue
Block a user