feat: apply Funktechnik Schubert branding

This commit is contained in:
Schubert Ferenc 2026-07-03 21:08:04 +02:00
parent 9a648e2ec8
commit 99e8201745
17 changed files with 335 additions and 104 deletions

View file

@ -2,7 +2,8 @@
import { useState, type FormEvent } from "react";
type Errors = Partial<Record<"name" | "email" | "manufacturer" | "model" | "description" | "privacy", string>>;
type ErrorField = "name" | "email" | "manufacturer" | "model" | "deviceType" | "description" | "privacy";
type Errors = Partial<Record<ErrorField, string>>;
export default function RepairForm() {
const [errors, setErrors] = useState<Errors>({});
@ -19,6 +20,7 @@ export default function RepairForm() {
if (!String(form.get("email") ?? "").includes("@")) nextErrors.email = "Bitte geben Sie eine gültige E-Mail-Adresse ein.";
if (!String(form.get("manufacturer") ?? "").trim()) nextErrors.manufacturer = "Bitte nennen Sie den Hersteller.";
if (!String(form.get("model") ?? "").trim()) nextErrors.model = "Bitte nennen Sie das Modell.";
if (!String(form.get("deviceType") ?? "").trim()) nextErrors.deviceType = "Bitte wählen Sie die Geräteart aus.";
if (String(form.get("description") ?? "").trim().length < 20) nextErrors.description = "Bitte beschreiben Sie den Fehler mit mindestens 20 Zeichen.";
if (form.get("privacy") !== "on") nextErrors.privacy = "Bitte stimmen Sie der Verarbeitung Ihrer Angaben zu.";
@ -52,6 +54,23 @@ export default function RepairForm() {
<Field label="Modell" name="model" error={errors.model} />
<Field label="Seriennummer optional" name="serialNumber" />
</div>
<div className="field">
<label htmlFor="deviceType">Geräteart</label>
<select id="deviceType" name="deviceType" defaultValue="">
<option value="">Bitte auswählen</option>
<option value="cb-radio">CB-Funkgerät</option>
<option value="amateur-radio">Amateurfunkgerät</option>
<option value="business-radio">Betriebsfunkgerät</option>
<option value="receiver">Empfänger / Scanner</option>
<option value="measurement">Messtechnik</option>
<option value="other">Sonstige Kommunikationstechnik</option>
</select>
{errors.deviceType && <span className="error">{errors.deviceType}</span>}
</div>
<div className="field">
<label htmlFor="accessories">Zubehör vorhanden</label>
<textarea id="accessories" name="accessories" placeholder="z. B. Netzteil, Mikrofon, Kabel, Adapter, Antenne oder Bediengerät" />
</div>
<div className="field">
<label htmlFor="opened">Wurde das Gerät bereits geöffnet?</label>
<select id="opened" name="opened" defaultValue="unknown">
@ -62,14 +81,14 @@ export default function RepairForm() {
</div>
<div className="field">
<label htmlFor="previousWork">Gibt es Vorarbeiten?</label>
<textarea id="previousWork" name="previousWork" placeholder="z. B. Bauteile getauscht, Abgleich versucht, Fremdwerkstatt" />
<textarea id="previousWork" name="previousWork" placeholder="z. B. Bauteile getauscht, Abgleich versucht, Reinigung, Messung, Fremdwerkstatt" />
</div>
<div className="field">
<label htmlFor="description">Fehlerbeschreibung</label>
<textarea id="description" name="description" placeholder="Bitte Gerät, Fehlerbild und bisherige Beobachtungen beschreiben." />
<textarea id="description" name="description" placeholder="Bitte Fehlerbild möglichst konkret beschreiben: tritt der Fehler beim Empfang, Senden, bei Modulation, Frequenz, Anzeige oder Stromversorgung auf?" />
{errors.description && <span className="error">{errors.description}</span>}
</div>
<p className="notice">Datei- und Bild-Upload ist für eine spätere Ausbaustufe vorbereitet. Bitte senden Sie Bilder aktuell erst nach Rückmeldung.</p>
<p className="notice">Fotos vom Gerät, Typenschild oder Innenleben können später nach Rückmeldung ergänzt werden. Bitte senden Sie aktuell noch keine Dateien unaufgefordert.</p>
<label className="checkbox">
<input type="checkbox" name="privacy" />
<span>Ich stimme zu, dass meine Angaben zur Bearbeitung der Reparaturanfrage verarbeitet werden.</span>