'use client'; import { useState, useEffect } from 'react'; import AlertModal from './AlertModal'; interface Chauffeur { id: string; nom: string; prenom: string; dateNaissance: string; telephone: string; email: string; adresse: string; heuresContrat: number; dateDebutContrat: string; dateFinContrat: string | null; heuresRestantes?: number; status?: string; } interface ChauffeurFormProps { chauffeur: Chauffeur | null; onClose: () => void; } export default function ChauffeurForm({ chauffeur, onClose }: ChauffeurFormProps) { const [loading, setLoading] = useState(false); const [isMobile, setIsMobile] = useState(false); const [alertModal, setAlertModal] = useState<{ show: boolean; type: 'success' | 'error' | 'info' | 'warning'; title: string; message: string; } | null>(null); const [formData, setFormData] = useState({ nom: '', prenom: '', dateNaissance: '', telephone: '', email: '', adresse: '', heuresContrat: 35, dateDebutContrat: new Date().toISOString().split('T')[0], // Date du jour par défaut dateFinContrat: '', status: 'Disponible', }); useEffect(() => { const checkMobile = () => { setIsMobile(window.innerWidth < 768); // md breakpoint }; checkMobile(); window.addEventListener('resize', checkMobile); return () => window.removeEventListener('resize', checkMobile); }, []); useEffect(() => { if (chauffeur) { const dateNaissance = new Date(chauffeur.dateNaissance); const dateDebut = new Date(chauffeur.dateDebutContrat); const dateFin = chauffeur.dateFinContrat ? new Date(chauffeur.dateFinContrat) : null; setFormData({ nom: chauffeur.nom, prenom: chauffeur.prenom, dateNaissance: dateNaissance.toISOString().split('T')[0], telephone: chauffeur.telephone, email: chauffeur.email, adresse: chauffeur.adresse, heuresContrat: chauffeur.heuresContrat, dateDebutContrat: dateDebut.toISOString().split('T')[0], dateFinContrat: dateFin ? dateFin.toISOString().split('T')[0] : '', status: chauffeur.status || 'Disponible', }); } }, [chauffeur]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { const url = chauffeur ? `/api/chauffeurs/${chauffeur.id}` : '/api/chauffeurs'; const method = chauffeur ? 'PUT' : 'POST'; const payload = { ...formData, dateFinContrat: formData.dateFinContrat || null, // Convertir chaîne vide en null }; const response = await fetch(url, { method, headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(payload), }); if (response.ok) { onClose(); } else { const error = await response.json(); setAlertModal({ show: true, type: 'error', title: 'Erreur', message: error.error || 'Une erreur est survenue', }); } } catch (error) { console.error('Erreur:', error); setAlertModal({ show: true, type: 'error', title: 'Erreur', message: 'Une erreur est survenue', }); } finally { setLoading(false); } }; // Si on est sur mobile, afficher un message au lieu du formulaire if (isMobile) { return (

{chauffeur ? 'Modifier le chauffeur' : 'Nouveau chauffeur'}

Utilisez un ordinateur

Pour {chauffeur ? 'modifier' : 'créer'} un chauffeur, veuillez utiliser un ordinateur. Cette fonctionnalité n'est pas optimisée pour les appareils mobiles.

); } return (

{chauffeur ? 'Modifier le chauffeur' : 'Nouveau chauffeur'}

{chauffeur ? 'Modifiez les informations du chauffeur ci-dessous.' : 'Remplissez les informations pour créer un nouveau chauffeur.'}

setFormData({ ...formData, nom: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
setFormData({ ...formData, prenom: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
setFormData({ ...formData, dateNaissance: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
setFormData({ ...formData, telephone: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
setFormData({ ...formData, email: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
setFormData({ ...formData, adresse: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
setFormData({ ...formData, heuresContrat: parseInt(e.target.value) || 0 })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" placeholder="35" />
setFormData({ ...formData, dateDebutContrat: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
setFormData({ ...formData, dateFinContrat: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" />
{/* Modal d'alerte */} {alertModal && ( setAlertModal(null)} /> )}
); }