feat: add vehicle edit page, image gallery with upload, print and CSV export

This commit is contained in:
2026-07-19 19:47:39 +02:00
parent 58fcf4a722
commit 563127c75a
9 changed files with 499 additions and 5 deletions
@@ -0,0 +1,58 @@
'use client';
import { useState, useEffect } from 'react';
import { VehicleForm } from './VehicleForm';
import { getVehicle, type VehicleResponse } from '@/lib/vehicles';
interface VehicleEditFormProps {
vehicleId: string;
}
export function VehicleEditForm({ vehicleId }: VehicleEditFormProps) {
const [vehicle, setVehicle] = useState<VehicleResponse | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
async function fetchVehicle() {
setLoading(true);
setError(null);
try {
const data = await getVehicle(vehicleId);
setVehicle(data);
} catch (err: unknown) {
const apiErr = err as { error?: { message?: string } };
setError(apiErr?.error?.message || 'Failed to load vehicle');
} finally {
setLoading(false);
}
}
fetchVehicle();
}, [vehicleId]);
if (loading) {
return (
<div data-testid="vehicle-edit-loading" className="text-center py-8 text-text-muted">
Loading vehicle...
</div>
);
}
if (error) {
return (
<div data-testid="vehicle-edit-error" className="p-4 bg-error/10 text-error rounded-lg">
{error}
</div>
);
}
if (!vehicle) {
return (
<div data-testid="vehicle-edit-not-found" className="text-center py-8 text-text-muted">
Vehicle not found
</div>
);
}
return <VehicleForm vehicle={vehicle} mode="edit" />;
}