diff --git a/client/src/pages/Tasks.tsx b/client/src/pages/Tasks.tsx index ad5f478..5c65890 100644 --- a/client/src/pages/Tasks.tsx +++ b/client/src/pages/Tasks.tsx @@ -48,7 +48,7 @@ export default function Tasks() { const [statusFilter, setStatusFilter] = useState("all"); const [priorityFilter, setPriorityFilter] = useState("all"); const [dueDateFilter, setDueDateFilter] = useState("all"); - const [viewMode, setViewMode] = useState("list"); + const [viewMode, setViewMode] = useState("kanban"); // Modals const [showCreateModal, setShowCreateModal] = useState(false); @@ -430,14 +430,14 @@ export default function Tasks() { {/* Sélecteur de vue */} - - - Liste - Kanban + + + Liste + @@ -549,6 +549,104 @@ export default function Tasks() {
{/* Contenu selon la vue sélectionnée */} + + {/* Vue Kanban avec 7 colonnes */} +
+
+ {/* Colonne Backlog */} +
+

+ + Backlog ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'backlog').length}) +

+
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'backlog').map((task: TaskWithRelations) => { + return renderKanbanCard(task, canEditTasks); + })} +
+
+ + {/* Colonne À faire */} +
+

+ + À faire ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'todo').length}) +

+
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'todo').map((task: TaskWithRelations) => { + return renderKanbanCard(task, canEditTasks); + })} +
+
+ + {/* Colonne En cours */} +
+

+ + En cours ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'in_progress').length}) +

+
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'in_progress').map((task: TaskWithRelations) => { + return renderKanbanCard(task, canEditTasks); + })} +
+
+ + {/* Colonne Révision */} +
+

+ + Révision ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'review').length}) +

+
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'review').map((task: TaskWithRelations) => { + return renderKanbanCard(task, canEditTasks); + })} +
+
+ + {/* Colonne Test */} +
+

+ + Test ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'testing').length}) +

+
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'testing').map((task: TaskWithRelations) => { + return renderKanbanCard(task, canEditTasks); + })} +
+
+ + {/* Colonne Terminé */} +
+

+ + Terminé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'done').length}) +

+
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'done').map((task: TaskWithRelations) => { + return renderKanbanCard(task, canEditTasks, true); + })} +
+
+ + {/* Colonne Archivé */} +
+

+ + Archivé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'archived').length}) +

+
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'archived').map((task: TaskWithRelations) => { + return renderKanbanCard(task, canEditTasks, true); + })} +
+
+
+
+
+ {/* Liste des tâches */}
@@ -564,15 +662,15 @@ export default function Tasks() {
) : (
- {/* Tâches en cours */} - {paginatedTasks.filter(task => task.status === 'pending').length > 0 && ( + {/* Tâches actives (non terminées/archivées) */} + {paginatedTasks.filter(task => !['done', 'archived'].includes(task.status)).length > 0 && (

- Tâches en cours ({paginatedTasks.filter(task => task.status === 'pending').length}) + Tâches actives ({paginatedTasks.filter(task => !['done', 'archived'].includes(task.status)).length})

{paginatedTasks - .filter(task => task.status === 'pending') + .filter(task => !['done', 'archived'].includes(task.status)) .map((task) => { const priorityConfig = getPriorityConfig(task.priority); const PriorityIcon = priorityConfig.icon; @@ -590,6 +688,13 @@ export default function Tasks() { {priorityConfig.label} + + {task.status === 'backlog' ? 'Backlog' : + task.status === 'todo' ? 'À faire' : + task.status === 'in_progress' ? 'En cours' : + task.status === 'review' ? 'Révision' : + task.status === 'testing' ? 'Test' : task.status} +
{task.description && ( @@ -675,15 +780,15 @@ export default function Tasks() {
)} - {/* Tâches terminées */} - {paginatedTasks.filter(task => task.status === 'completed').length > 0 && ( + {/* Tâches terminées et archivées */} + {paginatedTasks.filter(task => ['done', 'archived'].includes(task.status)).length > 0 && (

- Tâches terminées ({paginatedTasks.filter(task => task.status === 'completed').length}) + Tâches terminées ({paginatedTasks.filter(task => ['done', 'archived'].includes(task.status)).length})

{paginatedTasks - .filter(task => task.status === 'completed') + .filter(task => ['done', 'archived'].includes(task.status)) .map((task) => { const priorityConfig = getPriorityConfig(task.priority); const PriorityIcon = priorityConfig.icon; @@ -697,9 +802,12 @@ export default function Tasks() {
{task.title}
- - - Terminée + + + {task.status === 'done' ? 'Terminée' : 'Archivée'}