feat(projects) : archivage en masse des tickets sur statut final
Auto Tag Develop / tag (push) Successful in 9s

- TaskBulkActions : prop canArchive + bouton archive conditionnel
- pages/projects/[id] : computed canArchiveSelection (true quand le filtre statut courant pointe vers un statut isFinal)
- purge la sélection des ids hors filtre courant pour garder le compteur cohérent en vue liste
This commit is contained in:
Matthieu
2026-05-28 10:50:48 +02:00
parent 8f75e2e310
commit a3c0696023
2 changed files with 28 additions and 0 deletions
+15
View File
@@ -161,6 +161,7 @@
:priorities="priorities"
:efforts="efforts"
:groups="groups"
:can-archive="canArchiveSelection"
@toggle-all="toggleSelectAll(filteredTasks)"
@bulk-update="onBulkUpdate"
@bulk-archive="onBulkArchive"
@@ -297,6 +298,12 @@ const effortFilterOptions = computed(() =>
efforts.value.map(e => ({ label: e.label, value: e.id }))
)
const canArchiveSelection = computed(() => {
if (selectedStatusId.value === null) return false
const status = statuses.value.find(s => s.id === selectedStatusId.value)
return status?.isFinal === true
})
const filteredTasks = computed(() => {
let result = tasks.value.filter(t => !t.archived)
if (selectedGroupId.value) {
@@ -323,6 +330,14 @@ const filteredTasks = computed(() => {
return result
})
watch(filteredTasks, (list) => {
if (selectedTaskIds.size === 0) return
const visibleIds = new Set(list.map(t => t.id))
for (const id of selectedTaskIds) {
if (!visibleIds.has(id)) selectedTaskIds.delete(id)
}
})
function tasksByStatus(statusId: number): Task[] {
return filteredTasks.value.filter(t => t.status?.id === statusId)
}