f115af50ab
Mein-Audi-Kachel "Versicherung/Steuer" (vAudi()) und Kfz-Steuer-Detail (vSteuer()): "Zusammen" heisst jetzt "Summe", die Fusszeile "feste Kosten im Jahr" darunter entfaellt ersatzlos. Die Kfz-Steuer-Zeile zeigt "im Jahr" statt des rohen Datenwerts "jaehrlich", deckungsgleich mit der Versicherungs-Zeile darueber - nur wenn steuer.zeitraum tatsaechlich "jaehrlich" ist. Der gespeicherte Wert und die "jaehrlich"/"halbjaehrlich"-Auswahl in vSteuerBearbeiten() bleiben unveraendert, das war ein reiner Anzeige-Fix, keine Datenmodell- Aenderung. companion-app hatte an keiner der beiden Stellen ein Gegenstueck (kein "Zusammen"-Tile, keine Nur-Lese-Anzeige des Zeitraums) - dokumentiert als vorbestehende strukturelle Luecke statt kommentarlos uebersprungen. Vertrag-Kachel: war komplett nur lesbar (Gesellschaft, Umfang, Vertragsnummer, Selbstbeteiligung, Schadenfreiheitsklasse). Neue vVertragBearbeiten()-Ansicht (Panel, Route "vertrag") ueber ein neues Zahnrad auf der Vertrag-Kachel - alle Felder editierbar, Selbstbeteiligung zusaetzlich mit Hinzufuegen/Loeschen pro Zeile (neue .zeile-loeschen-Klasse, 44x44pt-Tippflaeche wie .km-edit). Die aktuelle Schadenfreiheitsklasse bleibt bewusst nur ueber "Beitrag anpassen" editierbar (Querverweis statt Duplikat), nur "zuvor" (sfAlt) ist neu in der Vertrag-Ansicht. companion-app: neue Vertrag()-Seite (Route "vertrag", eigene NaviKachel auf der Versicherungs-Seite) nach dem dortigen etablierten Muster (lokaler Entwurf-State + expliziter Speichern-Knopf statt Panel-Autosave pro Feld - gleiches Verhalten, eigenes Idiom). Die bisherige Nur-Lese-Selbstbeteiligung in Vertragsdetails() entfaellt, da sie jetzt (editierbar) in Vertrag() lebt. Schadenfreiheitsklasse wird in companion-app bewusst nicht ergaenzt: das Feld war dort noch nie sichtbar, auch nicht lesend - eine komplette neue UI-Sektion dafuer waere kein "Zeile editierbar machen" mehr, sondern ein neues Feature; als Luecke dokumentiert statt still uebergangen. tsc --noEmit sauber, companion-app-Tests 100/100 (inkl. dem Alle-Seiten-Rendertest, der jetzt auch "vertrag" abdeckt), vite build erfolgreich. Panel live im Docker-Testcontainer geprueft: Zeile hinzufuegen/bearbeiten/loeschen, Daten bleiben nach Re-Render erhalten. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
114 lines
3.1 KiB
TypeScript
114 lines
3.1 KiB
TypeScript
/**
|
|
* Zuordnung Route → Seite. Eine Stelle, an der jede Seite eingetragen ist;
|
|
* die Shell weiß nichts über Inhalte, die Seiten nichts über Navigation.
|
|
*/
|
|
|
|
import { useDaten } from "../daten/DatenKontext"
|
|
import type { Route, SeitenName } from "../navigation"
|
|
import { Batterie } from "./Batterie"
|
|
import { Einstellungen } from "./Einstellungen"
|
|
import { FahrtDetail } from "./FahrtDetail"
|
|
import { Fahrten } from "./Fahrten"
|
|
import { Fahrzeugdaten } from "./Fahrzeugdaten"
|
|
import { Fahrzeugstatus } from "./Fahrzeugstatus"
|
|
import { LiveFahrt } from "./LiveFahrt"
|
|
import { MeinAudi } from "./MeinAudi"
|
|
import { Reifen } from "./Reifen"
|
|
import { Service, Servicebuch, Werkstatt } from "./Service"
|
|
import { Statistik } from "./Statistik"
|
|
import { TankDetail } from "./TankDetail"
|
|
import { Tanken } from "./Tanken"
|
|
import { Uebersicht } from "./Uebersicht"
|
|
import {
|
|
Beitrag,
|
|
Notruf,
|
|
Schutzbrief,
|
|
Steuer,
|
|
Versicherung,
|
|
Vertrag,
|
|
Vertragsdetails,
|
|
} from "./Versicherung"
|
|
|
|
export interface SeitenProps {
|
|
route: Route
|
|
geheZu: (name: SeitenName, id?: string) => void
|
|
tabBeschriftung: boolean
|
|
setzeTabBeschriftung: (an: boolean) => void
|
|
beiAbmeldung: () => void
|
|
}
|
|
|
|
export function SeiteFuer(props: SeitenProps) {
|
|
const daten = useDaten()
|
|
|
|
// Erste Ladung: nichts anzeigen außer einem Hinweis. Ein leeres Gerüst wäre
|
|
// schlimmer als ein ehrliches „lädt".
|
|
if (!daten.bereit) {
|
|
if (daten.ladefehler) {
|
|
return (
|
|
<div className="dm-leer">
|
|
<div className="dm-leer__titel">Daten nicht erreichbar</div>
|
|
<p className="dm-leer__text">{daten.ladefehler}</p>
|
|
</div>
|
|
)
|
|
}
|
|
return <div className="dm-laden">Daten werden geladen …</div>
|
|
}
|
|
|
|
const { route, geheZu, tabBeschriftung, setzeTabBeschriftung, beiAbmeldung } = props
|
|
|
|
switch (route.name) {
|
|
case "home":
|
|
return <Uebersicht geheZu={geheZu} />
|
|
case "sicherheit":
|
|
return <Fahrzeugstatus />
|
|
case "audi":
|
|
return <MeinAudi geheZu={geheZu} />
|
|
case "ident":
|
|
return <Fahrzeugdaten />
|
|
case "battverlauf":
|
|
return <Batterie />
|
|
case "service":
|
|
return <Service geheZu={geheZu} />
|
|
case "werkstatt":
|
|
return <Werkstatt />
|
|
case "sbuch":
|
|
return <Servicebuch />
|
|
case "reifen":
|
|
return <Reifen />
|
|
case "vers":
|
|
return <Versicherung geheZu={geheZu} />
|
|
case "beitrag":
|
|
return <Beitrag />
|
|
case "vertrag":
|
|
return <Vertrag />
|
|
case "vertragsdetails":
|
|
return <Vertragsdetails geheZu={geheZu} />
|
|
case "schutz":
|
|
return <Schutzbrief />
|
|
case "notruf":
|
|
return <Notruf />
|
|
case "steuer":
|
|
return <Steuer />
|
|
case "trips":
|
|
return <Fahrten geheZu={geheZu} />
|
|
case "trip":
|
|
return <FahrtDetail id={route.id} />
|
|
case "fuel":
|
|
return <Tanken geheZu={geheZu} />
|
|
case "fill":
|
|
return <TankDetail id={route.id} />
|
|
case "stat":
|
|
return <Statistik />
|
|
case "live":
|
|
return <LiveFahrt />
|
|
case "einst":
|
|
return (
|
|
<Einstellungen
|
|
tabBeschriftung={tabBeschriftung}
|
|
setzeTabBeschriftung={setzeTabBeschriftung}
|
|
beiAbmeldung={beiAbmeldung}
|
|
/>
|
|
)
|
|
}
|
|
}
|