diff --git a/src/App.tsx b/src/App.tsx index 62c3198..3f25f1c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,7 @@ import Auftraege from './routes/Auftraege'; import Stammdaten from './routes/Stammdaten'; import Configurator from './routes/Configurator'; import MusterSeite from './routes/Muster'; +import AngebotSeite from './routes/Angebot'; import Textmenge from './routes/Textmenge'; import { loadSession } from './lib/api'; @@ -36,8 +37,9 @@ export default function App() { } /> } /> - {/* Muster als eigene Seite (kein Popup) – Direktlink /muster. */} + {/* Muster & individuelles Angebot als eigene Seiten (kein Popup). */} } /> + } /> {/* Textmengen-Tool – öffentlich, Direktlink /textmenge. */} } /> void; vorbelegung?: export function Muster({ onClose = () => {}, variant = 'dialog' }: { onClose?: () => void; variant?: 'dialog' | 'page' }) { const [produkte, setProdukte] = useState([]); const [form, setForm] = useState({ - product: '', name: '', email: '', phone: '', + product: '', first_name: '', last_name: '', email: '', phone: '', street: '', zip: '', city: '', country: 'Deutschland', message: '', }); const [datenschutz, setDatenschutz] = useState(false); @@ -195,7 +195,8 @@ export function Muster({ onClose = () => {}, variant = 'dialog' }: { onClose?: ( fetchMyCustomer() .then((c) => c && setForm((f) => ({ ...f, - name: [c.first_name, c.last_name].filter(Boolean).join(' ') || f.name, + first_name: c.first_name || f.first_name, + last_name: c.last_name || f.last_name, email: c.email || f.email, phone: c.phone || f.phone, }))) @@ -216,7 +217,8 @@ export function Muster({ onClose = () => {}, variant = 'dialog' }: { onClose?: ( try { await sendSampleRequest({ product: form.product, - name: form.name.trim(), + first_name: form.first_name.trim(), + last_name: form.last_name.trim(), email: form.email.trim(), phone: form.phone.trim() || undefined, street: form.street.trim(), @@ -259,7 +261,7 @@ export function Muster({ onClose = () => {}, variant = 'dialog' }: { onClose?: ( ); - const gueltig = form.product && form.name.trim() && istEmail(form.email) && form.phone.trim() + const gueltig = form.product && form.first_name.trim() && form.last_name.trim() && istEmail(form.email) && form.phone.trim() && form.street.trim() && form.zip.trim() && form.city.trim() && datenschutz; return wrap('Muster bestellen', ( @@ -275,12 +277,13 @@ export function Muster({ onClose = () => {}, variant = 'dialog' }: { onClose?: ( {produkte.map((p) => )} - {feld('name', 'Name')} + {feld('first_name', 'Vorname')} + {feld('last_name', 'Nachname')} {feld('email', 'E-Mail-Adresse', false, 'email')} {feld('phone', 'Telefon', false, 'tel')} {feld('street', 'Straße und Hausnummer')} {feld('zip', 'PLZ')} - {feld('city', 'Stadt')} + {feld('city', 'Ort')}
+ + +
+
+ +
diff --git a/src/lib/api.ts b/src/lib/api.ts index c92ba63..a61f72a 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -527,7 +527,8 @@ export async function uploadFile(datei: File): Promise { /* ── Angebotsanfrage ──────────────────────────────────────────────────────── */ export type OfferRequest = { - name: string; + first_name: string; + last_name: string; email: string; phone?: string; quantity?: number | null; @@ -544,7 +545,8 @@ export async function sendOfferRequest(input: OfferRequest) { export type SampleRequest = { product: string; - name: string; + first_name: string; + last_name: string; email: string; phone?: string; street: string; diff --git a/src/routes/Angebot.tsx b/src/routes/Angebot.tsx new file mode 100644 index 0000000..af926eb --- /dev/null +++ b/src/routes/Angebot.tsx @@ -0,0 +1,13 @@ +import { useNavigate } from 'react-router-dom'; +import OfferForm from '../components/OfferForm'; + +/** Individuelles Angebot als eigene Seite (Direktlink /angebot) – kein Popup. */ +export default function AngebotSeite() { + const navigate = useNavigate(); + return ( +
+

Individuelles Angebot anfordern

+ navigate('/')} /> +
+ ); +}