'use client'; import { useState, useEffect } from 'react'; import { Modal } from '@/components/ui/Modal'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { TagInput } from '@/components/ui/TagInput'; import { Task, TaskPriority, TaskStatus } from '@/lib/types'; import { UpdateTaskData } from '@/clients/tasks-client'; import { getAllStatuses } from '@/lib/status-config'; interface EditTaskFormProps { isOpen: boolean; onClose: () => void; onSubmit: (data: UpdateTaskData) => Promise; task: Task | null; loading?: boolean; } export function EditTaskForm({ isOpen, onClose, onSubmit, task, loading = false }: EditTaskFormProps) { const [formData, setFormData] = useState>({ title: '', description: '', status: 'todo' as TaskStatus, priority: 'medium' as TaskPriority, tags: [], dueDate: undefined }); const [errors, setErrors] = useState>({}); // Pré-remplir le formulaire quand la tâche change useEffect(() => { if (task) { setFormData({ title: task.title, description: task.description || '', status: task.status, priority: task.priority, tags: task.tags || [], dueDate: task.dueDate ? new Date(task.dueDate) : undefined }); } }, [task]); const validateForm = (): boolean => { const newErrors: Record = {}; if (!formData.title?.trim()) { newErrors.title = 'Le titre est requis'; } if (formData.title && formData.title.length > 200) { newErrors.title = 'Le titre ne peut pas dépasser 200 caractères'; } if (formData.description && formData.description.length > 1000) { newErrors.description = 'La description ne peut pas dépasser 1000 caractères'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm() || !task) return; try { await onSubmit({ taskId: task.id, ...formData }); handleClose(); } catch (error) { console.error('Erreur lors de la mise à jour:', error); } }; const handleClose = () => { setErrors({}); onClose(); }; if (!task) return null; return (
{/* Titre */} setFormData(prev => ({ ...prev, title: e.target.value }))} placeholder="Titre de la tâche..." error={errors.title} disabled={loading} /> {/* Description */}