'use client' import { useState } from 'react' import { maintenanceHistorySchema, MaintenanceAction } from '@/lib/validations' interface MaintenanceFormProps { partId: string onSuccess: () => void onCancel: () => void } const maintenanceActions = ['INSTALL', 'REPLACE', 'SERVICE', 'CHECK', 'ADJUST'] export default function MaintenanceForm({ partId, onSuccess, onCancel, }: MaintenanceFormProps) { const [formData, setFormData] = useState({ date: new Date().toISOString().split('T')[0], mileage: 0, action: 'SERVICE', notes: '', cost: '', }) const [errors, setErrors] = useState>({}) const [isSubmitting, setIsSubmitting] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setErrors({}) setIsSubmitting(true) try { const validatedData = maintenanceHistorySchema.parse({ wearPartId: partId, date: formData.date, mileage: Number(formData.mileage), action: formData.action, notes: formData.notes || undefined, cost: formData.cost ? Number(formData.cost) : undefined, }) const response = await fetch(`/api/parts/${partId}/maintenance`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(validatedData), }) if (response.ok) { onSuccess() setFormData({ date: new Date().toISOString().split('T')[0], mileage: 0, action: 'SERVICE', notes: '', cost: '', }) } 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 Wartungseintrags') } } } 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 maintenance:', error) alert('Fehler beim Erstellen des Wartungseintrags') } } finally { setIsSubmitting(false) } } return (

Neuer Wartungseintrag

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

{errors.date}

)}
setFormData({ ...formData, mileage: Number(e.target.value) }) } min="0" className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent" required /> {errors.mileage && (

{errors.mileage}

)}
{errors.action && (

{errors.action}

)}
setFormData({ ...formData, cost: e.target.value }) } min="0" className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent" />