From 5685eb37911ef49eb05c4a3654cd5b040f05a666 Mon Sep 17 00:00:00 2001 From: Tajim Date: Sun, 30 Aug 2026 22:23:06 +0600 Subject: [PATCH] feat: show real-time progress bar during bulk image upload --- .../js/components/admin/BulkImageModal.vue | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/resources/js/components/admin/BulkImageModal.vue b/resources/js/components/admin/BulkImageModal.vue index d00e385..b497881 100644 --- a/resources/js/components/admin/BulkImageModal.vue +++ b/resources/js/components/admin/BulkImageModal.vue @@ -28,6 +28,7 @@ const isDragging = ref(false); const fileLimitError = ref(''); const errorMessage = ref(''); const isSaving = ref(false); +const uploadProgress = ref(null); const namingStrategy = ref<'serial' | 'original'>('serial'); const namingPrefix = ref('image'); @@ -106,6 +107,7 @@ const clearAll = () => { fileLimitError.value = ''; errorMessage.value = ''; isSaving.value = false; + uploadProgress.value = null; }; const handleClose = () => { @@ -136,6 +138,7 @@ const submitForm = () => { } isSaving.value = true; + uploadProgress.value = 0; errorMessage.value = ''; const payload: Record = { @@ -150,6 +153,11 @@ const submitForm = () => { router.post('/admin/resources/bulk/images', payload, { forceFormData: true, preserveScroll: true, + onProgress: (progress) => { + if (progress?.percentage !== undefined) { + uploadProgress.value = progress.percentage; + } + }, onSuccess: () => { clearAll(); emit('close'); @@ -161,6 +169,7 @@ const submitForm = () => { }, onFinish: () => { isSaving.value = false; + uploadProgress.value = null; }, }); }; @@ -458,6 +467,39 @@ const submitForm = () => { + +
+
+ + {{ + uploadProgress >= 100 + ? 'Processing images on server...' + : 'Uploading images...' + }} + + + {{ uploadProgress }}% + +
+
+
+
+
+
{ @@ -483,7 +526,10 @@ const submitForm = () => { /> {{ isSaving - ? 'Uploading...' + ? uploadProgress !== null && + uploadProgress < 100 + ? `Uploading (${uploadProgress}%)` + : 'Processing...' : `Upload ${selectedFiles.length || ''} Images` }}