Skip to content

Commit 43e5d1b

Browse files
committed
feat: add upload progress feedback to storage uploads and file picker
Pass progress to Upload.Box for real-time progress bars on storage file uploads. Add onProgress callbacks and percentage display to the file picker modal used by CSV/JSON import.
1 parent a363ed6 commit 43e5d1b

2 files changed

Lines changed: 24 additions & 7 deletions

File tree

src/lib/components/filePicker.svelte

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
let searchEnabled = false;
5555
let fileSelector: HTMLInputElement;
5656
let uploading = false;
57+
let uploadProgress = 0;
5758
let view: 'grid' | 'list' = 'list';
5859
$: planMaxSize =
5960
isCloud && $currentPlan?.['fileSize']
@@ -97,12 +98,17 @@
9798
async function uploadFile() {
9899
try {
99100
uploading = true;
101+
uploadProgress = 0;
100102
let file = null;
103+
101104
if (localFileBucketSelected) {
102105
file = await sdk.forConsoleIn(page.params.region).storage.createFile({
103106
bucketId: 'default',
104107
fileId: ID.unique(),
105-
file: localFile[0]
108+
file: localFile[0],
109+
onProgress: (progress) => {
110+
uploadProgress = progress.progress;
111+
}
106112
});
107113
} else {
108114
file = await sdk
@@ -111,7 +117,10 @@
111117
bucketId: selectedBucket,
112118
fileId: ID.unique(),
113119
file: fileSelector.files[0],
114-
permissions: [Permission.read(Role.any())]
120+
permissions: [Permission.read(Role.any())],
121+
onProgress: (progress) => {
122+
uploadProgress = progress.progress;
123+
}
115124
});
116125
search.set($search === null ? '' : null);
117126
}
@@ -123,6 +132,7 @@
123132
});
124133
} finally {
125134
uploading = false;
135+
uploadProgress = 0;
126136
}
127137
}
128138
@@ -428,7 +438,7 @@
428438
bind:this={fileSelector} />
429439
{#if uploading}
430440
<div class="loader is-small"></div>
431-
<span>Uploading</span>
441+
<span>Uploading{uploadProgress > 0 ? ` ${uploadProgress}%` : ''}</span>
432442
{:else}
433443
<span class="icon-upload" aria-hidden="true"></span>
434444
<span>Upload</span>
@@ -714,9 +724,15 @@
714724
<Button text on:click={closeModal}>Cancel</Button>
715725
<Button
716726
submit
717-
disabled={(selectedBucket === null && localFileBucketSelected === false) ||
718-
(selectedFile === null && localFile === null)}
719-
>Select
727+
disabled={uploading ||
728+
(selectedBucket === null && localFileBucketSelected === false) ||
729+
(selectedFile === null && localFile === null)}>
730+
{#if uploading}
731+
<div class="loader is-small"></div>
732+
<span>Uploading{uploadProgress > 0 ? ` ${uploadProgress}%` : ''}</span>
733+
{:else}
734+
Select
735+
{/if}
720736
</Button>
721737
</Layout.Stack>
722738
</svelte:fragment>

src/lib/components/uploadBox.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
return {
1010
name: file.name,
1111
size: file.size,
12-
status: file.status
12+
status: file.status,
13+
progress: file.progress
1314
};
1415
})}
1516
on:close={() => uploader.close()} />

0 commit comments

Comments
 (0)