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() {