Muster & Angebot: Vor-/Nachname getrennt, „Ort" statt „Stadt", Angebot als Seite
All checks were successful
Build & Deploy / deploy (push) Successful in 21s

- Muster bestellen + individuelles Angebot: getrennte Felder Vorname/Nachname
  (statt einem Namensfeld).
- Muster-Formular: Feld „Stadt" → „Ort".
- „Individuelles Angebot" öffnet jetzt eine eigene Seite (/angebot) statt Popup.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-09-11 21:15:38 +02:00
parent 1e90b8de09
commit bad4abc945
5 changed files with 42 additions and 16 deletions

View File

@@ -15,7 +15,7 @@ const istEmail = (e: string) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e.trim());
*/
export default function OfferForm({ produkt, onClose }: { produkt?: string; onClose?: () => void }) {
const gewaehltesProdukt = produkt?.trim() || '';
const [form, setForm] = useState({ name: '', email: '', phone: '', quantity: '', message: '' });
const [form, setForm] = useState({ first_name: '', last_name: '', email: '', phone: '', quantity: '', message: '' });
const [datenschutz, setDatenschutz] = useState(false);
const [status, setStatus] = useState<'formular' | 'sendet' | 'fertig'>('formular');
const [fehler, setFehler] = useState<string[]>([]);
@@ -28,7 +28,8 @@ export default function OfferForm({ produkt, onClose }: { produkt?: string; onCl
if (!c) return;
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,
}));
@@ -49,7 +50,8 @@ export default function OfferForm({ produkt, onClose }: { produkt?: string; onCl
setStatus('sendet');
try {
await sendOfferRequest({
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,
quantity: form.quantity ? Number(form.quantity) : null,
@@ -90,8 +92,12 @@ export default function OfferForm({ produkt, onClose }: { produkt?: string; onCl
)}
<form style={{ marginTop: 'var(--sk-space-4)' }} onSubmit={absenden}>
<div className="sk-field">
<label className="sk-label" htmlFor="a-name">Name</label>
<input id="a-name" className="sk-input" value={form.name} onChange={set('name')} required />
<label className="sk-label" htmlFor="a-vorname">Vorname</label>
<input id="a-vorname" className="sk-input" value={form.first_name} onChange={set('first_name')} required />
</div>
<div className="sk-field">
<label className="sk-label" htmlFor="a-nachname">Nachname</label>
<input id="a-nachname" className="sk-input" value={form.last_name} onChange={set('last_name')} required />
</div>
<div className="sk-field">
<label className="sk-label" htmlFor="a-mail">E-Mail</label>