From 81edc206e0cc62cf1794eb227323be3dd2ccbe14 Mon Sep 17 00:00:00 2001 From: Denis Urs Rudolph Date: Fri, 5 Dec 2025 22:30:45 +0100 Subject: [PATCH] =?UTF-8?q?Fix:=20Verschlei=C3=9Fteil-Formular=20Datumsval?= =?UTF-8?q?idierung=20und=20Schriftfarbe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - installDate Schema akzeptiert jetzt YYYY-MM-DD Format (HTML date input) - maintenanceHistorySchema date akzeptiert jetzt YYYY-MM-DD Format - Transform konvertiert Datumsstrings automatisch zu Date-Objekten - API-Routes verwenden validierte Date-Objekte direkt - Alle Formularfelder haben jetzt schwarze Schriftfarbe (text-black) - Optional-Felder werden getrimmt (brand, model, notes) --- app/api/bikes/[id]/parts/route.ts | 2 +- app/api/parts/[id]/maintenance/route.ts | 2 +- app/components/BikeForm.tsx | 10 ++--- app/components/MaintenanceForm.tsx | 10 ++--- app/components/WearPartForm.tsx | 18 ++++----- lib/validations.ts | 50 ++++++++++++++++++++++--- 6 files changed, 65 insertions(+), 27 deletions(-) diff --git a/app/api/bikes/[id]/parts/route.ts b/app/api/bikes/[id]/parts/route.ts index 98c0ad3..9f867ab 100644 --- a/app/api/bikes/[id]/parts/route.ts +++ b/app/api/bikes/[id]/parts/route.ts @@ -48,7 +48,7 @@ export async function POST( type: validatedData.type, brand: validatedData.brand, model: validatedData.model, - installDate: new Date(validatedData.installDate), + installDate: validatedData.installDate, installMileage: validatedData.installMileage, serviceInterval: validatedData.serviceInterval, status: validatedData.status, diff --git a/app/api/parts/[id]/maintenance/route.ts b/app/api/parts/[id]/maintenance/route.ts index 55c1e67..e93cdfa 100644 --- a/app/api/parts/[id]/maintenance/route.ts +++ b/app/api/parts/[id]/maintenance/route.ts @@ -38,7 +38,7 @@ export async function POST( const history = await prisma.maintenanceHistory.create({ data: { wearPartId: params.id, - date: new Date(validatedData.date), + date: validatedData.date, mileage: validatedData.mileage, action: validatedData.action, notes: validatedData.notes, diff --git a/app/components/BikeForm.tsx b/app/components/BikeForm.tsx index 99a5558..cf77232 100644 --- a/app/components/BikeForm.tsx +++ b/app/components/BikeForm.tsx @@ -93,7 +93,7 @@ export default function BikeForm({ onSuccess, onCancel }: BikeFormProps) { onChange={(e) => 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" + 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 && ( @@ -112,7 +112,7 @@ export default function BikeForm({ onSuccess, onCancel }: BikeFormProps) { onChange={(e) => 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" + 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" /> @@ -126,7 +126,7 @@ export default function BikeForm({ onSuccess, onCancel }: BikeFormProps) { onChange={(e) => 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" + 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" /> @@ -141,7 +141,7 @@ export default function BikeForm({ onSuccess, onCancel }: BikeFormProps) { onChange={(e) => 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" + 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" /> @@ -155,7 +155,7 @@ export default function BikeForm({ onSuccess, onCancel }: BikeFormProps) { setFormData({ ...formData, notes: e.target.value }) } rows={3} - className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" + 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" /> diff --git a/app/components/MaintenanceForm.tsx b/app/components/MaintenanceForm.tsx index c42cbb9..bcba781 100644 --- a/app/components/MaintenanceForm.tsx +++ b/app/components/MaintenanceForm.tsx @@ -105,7 +105,7 @@ export default function MaintenanceForm({ onChange={(e) => 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" + className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" required /> {errors.date && ( @@ -124,7 +124,7 @@ export default function MaintenanceForm({ 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" + className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" required /> {errors.mileage && ( @@ -143,7 +143,7 @@ export default function MaintenanceForm({ onChange={(e) => setFormData({ ...formData, action: 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" + className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" required > {maintenanceActions.map((action) => ( @@ -169,7 +169,7 @@ export default function MaintenanceForm({ 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" + className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" /> @@ -184,7 +184,7 @@ export default function MaintenanceForm({ setFormData({ ...formData, notes: e.target.value }) } rows={2} - className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent" + className="w-full px-2 py-1 text-sm border border-gray-300 rounded focus:ring-2 focus:ring-blue-500 focus:border-transparent text-black" /> diff --git a/app/components/WearPartForm.tsx b/app/components/WearPartForm.tsx index c0e159a..f2f3f61 100644 --- a/app/components/WearPartForm.tsx +++ b/app/components/WearPartForm.tsx @@ -135,7 +135,7 @@ export default function WearPartForm({