+ {Object.entries(tasksByTag)
+ .sort(([a], [b]) => {
+ // Mettre "Sans tag" à la fin
+ if (a === 'Sans tag') return 1;
+ if (b === 'Sans tag') return -1;
+ return a.localeCompare(b);
+ })
+ .map(([tagName, tagTasks]) => (
+
+ {/* Header de la swimlane */}
+
+
+
+
+ {tagName}
+
+
+ {tagTasks.length}
+
+
+
+ {/* Compteurs par statut */}
+ {statuses.map(status => {
+ const count = tagTasks.filter(task => task.status === status.id).length;
+ return (
+
+
+ {count}
+
+
+ );
+ })}
+
+
+ {/* Contenu de la swimlane */}
+
+
{/* Colonne vide pour le nom du tag */}
+
+ {statuses.map(status => {
+ const statusTasks = tagTasks.filter(task => task.status === status.id);
+ return (
+
+ {statusTasks.map(task => (
+
+ ))}
+
+ );
+ })}
+
+