'use client'; import { Task, TaskStatus } from '@/lib/types'; import { KanbanColumn } from './Column'; import { Button } from '@/components/ui/Button'; import { CreateTaskForm } from '@/components/forms/CreateTaskForm'; import { CreateTaskData } from '@/clients/tasks-client'; import { useMemo, useState } from 'react'; interface KanbanBoardProps { tasks: Task[]; onCreateTask?: (data: CreateTaskData) => Promise; onDeleteTask?: (taskId: string) => Promise; onEditTask?: (task: Task) => void; onUpdateTitle?: (taskId: string, newTitle: string) => Promise; loading?: boolean; } export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onUpdateTitle, loading = false }: KanbanBoardProps) { const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); // Organiser les tâches par statut const tasksByStatus = useMemo(() => { const grouped = tasks.reduce((acc, task) => { if (!acc[task.status]) { acc[task.status] = []; } acc[task.status].push(task); return acc; }, {} as Record); return grouped; }, [tasks]); // Configuration des colonnes const columns: Array<{ id: TaskStatus; title: string; color: string; tasks: Task[]; }> = [ { id: 'todo', title: 'À faire', color: 'gray', tasks: tasksByStatus.todo || [] }, { id: 'in_progress', title: 'En cours', color: 'blue', tasks: tasksByStatus.in_progress || [] }, { id: 'done', title: 'Terminé', color: 'green', tasks: tasksByStatus.done || [] }, { id: 'cancelled', title: 'Annulé', color: 'red', tasks: tasksByStatus.cancelled || [] } ]; const handleCreateTask = async (data: CreateTaskData) => { if (onCreateTask) { await onCreateTask(data); } }; return (
{/* Header avec bouton nouvelle tâche */}

Kanban Board

{onCreateTask && ( )}
{/* Board tech dark */}
{columns.map((column) => ( ))}
{/* Modal de création */} {onCreateTask && ( setIsCreateModalOpen(false)} onSubmit={handleCreateTask} loading={loading} /> )}
); }