'use client' import { useState } from 'react' import { bikeSchema } from '@/lib/validations' interface BikeFormProps { onSuccess: () => void onCancel: () => void } export default function BikeForm({ onSuccess, onCancel }: BikeFormProps) { const [formData, setFormData] = useState({ name: '', brand: '', model: '', purchaseDate: '', currentMileage: 0, notes: '', }) const [errors, setErrors] = useState>({}) const [isSubmitting, setIsSubmitting] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setErrors({}) setIsSubmitting(true) try { const validatedData = bikeSchema.parse({ ...formData, purchaseDate: formData.purchaseDate || undefined, }) const response = await fetch('/api/bikes', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(validatedData), }) if (response.ok) { onSuccess() setFormData({ name: '', brand: '', model: '', purchaseDate: '', currentMileage: 0, notes: '', }) } else { const errorData = await response.json() if (errorData.details) { const zodErrors: Record = {} errorData.details.errors?.forEach((err: any) => { if (err.path) { zodErrors[err.path[0]] = err.message } }) setErrors(zodErrors) } else { alert('Fehler beim Erstellen des Fahrrads') } } } catch (error: any) { if (error.errors) { const zodErrors: Record = {} error.errors.forEach((err: any) => { if (err.path) { zodErrors[err.path[0]] = err.message } }) setErrors(zodErrors) } else { console.error('Error creating bike:', error) alert('Fehler beim Erstellen des Fahrrads') } } finally { setIsSubmitting(false) } } return (

Neues Fahrrad hinzufügen

setFormData({ ...formData, name: e.target.value }) } className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" required /> {errors.name && (

{errors.name}

)}
setFormData({ ...formData, brand: e.target.value }) } className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" />
setFormData({ ...formData, model: e.target.value }) } className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" />
setFormData({ ...formData, purchaseDate: e.target.value }) } className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" />
setFormData({ ...formData, currentMileage: Number(e.target.value) || 0, }) } min="0" className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" />