From fc4a7e1d304828369bccdd7448d44a5876022540 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Fri, 15 Aug 2025 13:20:30 +0000 Subject: [PATCH] Set the Kanban board as the default task view for users Update the task page to default to the Kanban board view, reordering the view toggles to place Kanban first. Replit-Commit-Author: Agent Replit-Commit-Session-Id: d43bd811-9372-45a7-8ac9-4a954c0538e1 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/d43bd811-9372-45a7-8ac9-4a954c0538e1/kjeW1Yy --- client/src/pages/Tasks.tsx | 140 ++++++++++++++++++++++++++++++++----- 1 file changed, 124 insertions(+), 16 deletions(-) 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'}