diff --git a/frontend/components/task/TaskDocumentUpload.vue b/frontend/components/task/TaskDocumentUpload.vue
index 921a118..ba0d828 100644
--- a/frontend/components/task/TaskDocumentUpload.vue
+++ b/frontend/components/task/TaskDocumentUpload.vue
@@ -28,8 +28,10 @@
@@ -64,6 +66,7 @@ const isDragging = ref(false)
type UploadState = {
name: string
progress: number
+ uploading: boolean
error: boolean
}
@@ -99,19 +102,18 @@ async function processFiles(files: File[]) {
const state: UploadState = reactive({
name: file.name,
- progress: 0,
+ progress: 30,
+ uploading: true,
error: false,
})
uploads.value.push(state)
try {
await uploadFile(props.taskId, file)
+ state.uploading = false
state.progress = 100
- toast.success({
- title: 'Succès',
- message: t('taskDocuments.uploaded'),
- })
} catch {
+ state.uploading = false
state.error = true
state.progress = 100
toast.error({
@@ -119,13 +121,13 @@ async function processFiles(files: File[]) {
message: t('taskDocuments.uploadError'),
})
}
+
+ emit('uploaded')
}
// Clean up completed uploads after a delay
setTimeout(() => {
uploads.value = uploads.value.filter(u => u.error)
- }, 2000)
-
- emit('uploaded')
+ }, 1500)
}
diff --git a/frontend/components/task/TaskModal.vue b/frontend/components/task/TaskModal.vue
index 68506f5..0a3c5e5 100644
--- a/frontend/components/task/TaskModal.vue
+++ b/frontend/components/task/TaskModal.vue
@@ -375,15 +375,26 @@ watch(() => props.modelValue, async (open) => {
})
const { create, update, remove } = useTaskService()
-const { remove: removeDocument } = useTaskDocumentService()
+const { remove: removeDocument, getByTask: getDocumentsByTask } = useTaskDocumentService()
const { t } = useI18n()
const authStore = useAuthStore()
const isAdmin = computed(() => authStore.user?.roles?.includes('ROLE_ADMIN') ?? false)
-const documents = computed(() => props.task?.documents ?? [])
+const localDocuments = ref([])
+const documents = computed(() => localDocuments.value)
const previewDoc = ref(null)
+// Sync documents from task prop when modal opens or task changes
+watch(() => props.task?.documents, (docs) => {
+ localDocuments.value = docs ? [...docs] : []
+}, { immediate: true })
+
+async function refreshDocuments() {
+ if (!props.task) return
+ localDocuments.value = await getDocumentsByTask(props.task.id)
+}
+
const previewIndex = computed(() => {
if (!previewDoc.value) return -1
return documents.value.findIndex(d => d.id === previewDoc.value!.id)
@@ -408,11 +419,11 @@ function nextPreview() {
async function handleDeleteDocument(doc: TaskDocument) {
if (!confirm(t('taskDocuments.confirmDeleteMessage'))) return
await removeDocument(doc.id)
- emit('saved')
+ await refreshDocuments()
}
-function handleDocumentUploaded() {
- emit('saved')
+async function handleDocumentUploaded() {
+ await refreshDocuments()
}
async function handleDelete() {