'use client'; import { useState } from 'react'; import { KanbanBoard } from './Board'; import { SwimlanesBoard } from './SwimlanesBoard'; import { PrioritySwimlanesBoard } from './PrioritySwimlanesBoard'; import { ObjectivesBoard } from './ObjectivesBoard'; import { KanbanFilters } from './KanbanFilters'; import { EditTaskForm } from '@/components/forms/EditTaskForm'; import { useTasksContext } from '@/contexts/TasksContext'; import { Task, TaskStatus } from '@/lib/types'; import { UpdateTaskData, CreateTaskData } from '@/clients/tasks-client'; import { useColumnVisibility } from '@/hooks/useColumnVisibility'; import { getAllStatuses } from '@/lib/status-config'; interface KanbanBoardContainerProps { showFilters?: boolean; showObjectives?: boolean; } export function KanbanBoardContainer({ showFilters = true, showObjectives = true }: KanbanBoardContainerProps = {}) { const { filteredTasks, pinnedTasks, loading, createTask, deleteTask, updateTask, updateTaskOptimistic, kanbanFilters, setKanbanFilters, tags } = useTasksContext(); const { hiddenStatuses, toggleStatusVisibility, getVisibleStatuses } = useColumnVisibility(); const allStatuses = getAllStatuses(); const visibleStatuses = getVisibleStatuses(allStatuses.map(s => ({ id: s.key }))).map(s => s.id); const [editingTask, setEditingTask] = useState(null); const handleEditTask = (task: Task) => { setEditingTask(task); }; const handleUpdateTask = async (data: UpdateTaskData) => { await updateTask(data); setEditingTask(null); }; const handleUpdateTitle = async (taskId: string, newTitle: string) => { await updateTask({ taskId, title: newTitle }); }; const handleUpdateStatus = async (taskId: string, newStatus: TaskStatus) => { // Utiliser la mise à jour optimiste pour le drag & drop await updateTaskOptimistic({ taskId, status: newStatus }); }; // Obtenir le nom du tag épinglé pour l'affichage const pinnedTagName = tags.find(tag => tag.isPinned)?.name; // Wrapper pour adapter le type de createTask const handleCreateTask = async (data: CreateTaskData): Promise => { await createTask(data); }; return ( <> {/* Barre de filtres - conditionnelle */} {showFilters && ( )} {/* Section Objectifs Principaux - conditionnelle */} {showObjectives && pinnedTasks.length > 0 && ( )} {kanbanFilters.swimlanesByTags ? ( kanbanFilters.swimlanesMode === 'priority' ? ( ) : ( ) ) : ( )} setEditingTask(null)} onSubmit={handleUpdateTask} task={editingTask} loading={loading} /> ); }