'use client'; import { useState, useEffect } from 'react'; import { CheckSquare2, Calendar } from 'lucide-react'; import { DailyCheckbox, DailyCheckboxType, Task } from '@/lib/types'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Modal } from '@/components/ui/Modal'; import { TagDisplay } from '@/components/ui/TagDisplay'; import { Card } from '@/components/ui/Card'; import { SearchInput } from '@/components/ui/SearchInput'; import { StatusBadge } from '@/components/ui/StatusBadge'; import { ToggleButton } from '@/components/ui/ToggleButton'; import { DateTimeInput } from '@/components/ui/DateTimeInput'; import { tasksClient } from '@/clients/tasks-client'; interface EditCheckboxModalProps { checkbox: DailyCheckbox; isOpen: boolean; onClose: () => void; onSave: (text: string, type: DailyCheckboxType, taskId?: string, date?: Date) => Promise; saving?: boolean; } export function EditCheckboxModal({ checkbox, isOpen, onClose, onSave, saving = false }: EditCheckboxModalProps) { const [text, setText] = useState(checkbox.text); const [type, setType] = useState(checkbox.type); const [taskId, setTaskId] = useState(checkbox.taskId); const [date, setDate] = useState(checkbox.date); const [selectedTask, setSelectedTask] = useState(undefined); const [allTasks, setAllTasks] = useState([]); const [tasksLoading, setTasksLoading] = useState(false); const [taskSearch, setTaskSearch] = useState(''); // Charger toutes les tâches au début useEffect(() => { if (isOpen) { setTasksLoading(true); tasksClient.getTasks() .then(response => { setAllTasks(response.data); // Trouver la tâche sélectionnée si elle existe if (taskId) { const task = response.data.find((t: Task) => t.id === taskId); setSelectedTask(task); } }) .catch(console.error) .finally(() => setTasksLoading(false)); } }, [isOpen, taskId]); // Mettre à jour la tâche sélectionnée quand taskId change useEffect(() => { if (taskId && allTasks.length > 0) { const task = allTasks.find((t: Task) => t.id === taskId); setSelectedTask(task); } else { setSelectedTask(undefined); } }, [taskId, allTasks]); // Filtrer les tâches selon la recherche et exclure les tâches avec des tags "objectif principal" const filteredTasks = allTasks.filter(task => { // Exclure les tâches avec des tags marqués comme "objectif principal" (isPinned = true) if (task.tagDetails && task.tagDetails.some(tag => tag.isPinned)) { return false; } // Filtrer selon la recherche return task.title.toLowerCase().includes(taskSearch.toLowerCase()) || (task.description && task.description.toLowerCase().includes(taskSearch.toLowerCase())); }); const handleTaskSelect = (task: Task) => { setTaskId(task.id); setTaskSearch(''); // Fermer la recherche après sélection }; const handleSave = async () => { if (!text.trim()) return; try { await onSave(text.trim(), type, taskId, date); onClose(); } catch (error) { console.error('Erreur lors de la sauvegarde:', error); } }; const handleKeyPress = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSave(); } }; const resetForm = () => { setText(checkbox.text); setType(checkbox.type); setTaskId(checkbox.taskId); setDate(checkbox.date); }; const handleClose = () => { resetForm(); onClose(); }; return (
{/* Texte */}
setText(e.target.value)} onKeyDown={handleKeyPress} placeholder="Description de la tâche..." className="w-full" autoFocus />
{/* Type */}
setType('meeting')} variant="primary" size="sm" isActive={type === 'meeting'} icon={} > Réunion setType('task')} variant="primary" size="sm" isActive={type === 'task'} icon={} > Tâche
{/* Date/Heure */}
newDate && setDate(newDate)} disabled={saving} />
{/* Liaison tâche (pour tous les types) */}
{selectedTask ? ( // Tâche déjà sélectionnée
{selectedTask.title}
{selectedTask.description && (
{selectedTask.description}
)}
{selectedTask.tags && selectedTask.tags.length > 0 && ( )}
) : ( // Interface de sélection simplifiée
{taskSearch.trim() && ( {tasksLoading ? (
Chargement...
) : filteredTasks.length === 0 ? (
Aucune tâche trouvée
) : ( filteredTasks.slice(0, 5).map((task) => ( )) )}
)}
)}
{/* Actions */}
); }