Skip to content

Commit e4da580

Browse files
authored
Merge pull request #2960 from appwrite/feat-upload-progress
feat: add upload progress feedback
2 parents 8c227f8 + 384ce80 commit e4da580

4 files changed

Lines changed: 32 additions & 12 deletions

File tree

bun.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"@appwrite.io/pink-icons": "0.25.0",
2525
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3",
2626
"@appwrite.io/pink-legacy": "^1.0.3",
27-
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@bfe7ce3",
27+
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@8dcaa17",
2828
"@faker-js/faker": "^9.9.0",
2929
"@plausible-analytics/tracker": "^0.4.4",
3030
"@popperjs/core": "^2.11.8",

src/lib/components/filePicker.svelte

Lines changed: 27 additions & 8 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
@@ -246,7 +256,7 @@
246256
<svelte:document on:visibilitychange={handleVisibilityChange} />
247257

248258
<Form {onSubmit} isModal class="file-picker-modal-form">
249-
<Modal bind:open={show} title="Select file" size="l">
259+
<Modal bind:open={show} title="Select file" size="l" dismissible={!uploading}>
250260
<Layout.Stack direction={$isSmallViewport ? 'column' : 'row'} height="50vh" gap="none">
251261
<!-- min-width to avoid a layout-shift -->
252262
<aside>
@@ -428,7 +438,10 @@
428438
bind:this={fileSelector} />
429439
{#if uploading}
430440
<div class="loader is-small"></div>
431-
<span>Uploading</span>
441+
<span
442+
>Uploading{uploadProgress > 0
443+
? ` ${uploadProgress}%`
444+
: ''}</span>
432445
{:else}
433446
<span class="icon-upload" aria-hidden="true"></span>
434447
<span>Upload</span>
@@ -711,12 +724,18 @@
711724
</Layout.Stack>
712725
<svelte:fragment slot="footer">
713726
<Layout.Stack direction="row" justifyContent="flex-end">
714-
<Button text on:click={closeModal}>Cancel</Button>
727+
<Button text disabled={uploading} on:click={closeModal}>Cancel</Button>
715728
<Button
716729
submit
717-
disabled={(selectedBucket === null && localFileBucketSelected === false) ||
718-
(selectedFile === null && localFile === null)}
719-
>Select
730+
disabled={uploading ||
731+
(selectedBucket === null && localFileBucketSelected === false) ||
732+
(selectedFile === null && localFile === null)}>
733+
{#if uploading}
734+
<div class="loader is-small"></div>
735+
<span>Uploading{uploadProgress > 0 ? ` ${uploadProgress}%` : ''}</span>
736+
{:else}
737+
Select
738+
{/if}
720739
</Button>
721740
</Layout.Stack>
722741
</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)