From 7a3e37f96f6197edc15b81c122977fbe30369ca2 Mon Sep 17 00:00:00 2001
From: Nick Szaunig
Date: Tue, 6 Oct 2026 23:26:14 +0200
Subject: [PATCH] =?UTF-8?q?feat:=20Buchungsdialog=20zeigt=20Preis=20erst?=
=?UTF-8?q?=20unter=20der=20gew=C3=A4hlten=20Zahlungsweise?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Keine Vorauswahl mehr. Unter der gewählten Option stehen Preisaufstellung und Raten mit Fälligkeit; Weiter erst nach Auswahl.
Co-Authored-By: Claude Opus 5.5 (1M context)
---
src/components/booking/BookingDialog.tsx | 82 +++++++++++++++---------
1 file changed, 50 insertions(+), 32 deletions(-)
diff --git a/src/components/booking/BookingDialog.tsx b/src/components/booking/BookingDialog.tsx
index bbee39c..effc496 100644
--- a/src/components/booking/BookingDialog.tsx
+++ b/src/components/booking/BookingDialog.tsx
@@ -60,7 +60,8 @@ export function BookingDialog({
const [step, setStep] = useState(0);
const [participant, setParticipant] = useState(EMPTY);
- const [chosenPlan, setPlanType] = useState("FULL");
+ // Keine Vorauswahl: Preise erscheinen erst unter der gewaehlten Zahlungsweise.
+ const [chosenPlan, setPlanType] = useState(null);
const [voucherInput, setVoucherInput] = useState("");
const [appliedVoucher, setAppliedVoucher] = useState(null);
const [voucherMessage, setVoucherMessage] = useState(null);
@@ -114,11 +115,11 @@ export function BookingDialog({
};
}, [open, quote]);
- // Eine nicht (mehr) verfuegbare Ratenvariante faellt auf Einmalzahlung zurueck.
+ // Eine nicht (mehr) verfuegbare Variante gilt als nicht gewaehlt.
const chosen = quote?.plans.find((p) => p.type === chosenPlan);
- const planType: PlanType = chosen && !chosen.available ? "FULL" : chosenPlan;
+ const planType: PlanType | null = chosen?.available ? chosenPlan : null;
- const selectedPlan = quote?.plans.find((p) => p.type === planType) ?? null;
+ const selectedPlan = chosen?.available ? chosen : null;
function updateParticipant(field: keyof Participant, value: string) {
setParticipant((prev) => ({ ...prev, [field]: value }));
@@ -174,6 +175,7 @@ export function BookingDialog({
async function submit() {
setFormError(null);
+ if (!planType) return;
const missing: FieldErrors = {};
if (!consents.adult) missing["consents.adult"] = "Bitte bestätige, dass du volljährig bist.";
if (!consents.terms) missing["consents.terms"] = "Bitte akzeptiere die Buchungsbedingungen.";
@@ -324,32 +326,29 @@ export function BookingDialog({
)) ?? Preise werden geladen …
}
@@ -384,8 +383,6 @@ export function BookingDialog({
{voucherMessage}
-
- {quote?.price && }
)}
@@ -462,7 +459,7 @@ export function BookingDialog({
{" "}
gelesen.
- {planType !== "FULL" && (
+ {planType !== null && planType !== "FULL" && (
)}
{step < STEPS.length - 1 ? (
-