From d6437866663e3960bec8e6bf4bcd2ef5211f8e69 Mon Sep 17 00:00:00 2001 From: ItzNotABug Date: Wed, 21 Aug 2024 18:45:25 +0530 Subject: [PATCH] update: confirm leaving page on an ongoing upload. --- .../storage/bucket-[bucket]/+page.svelte | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte index 1726305ae..e3fc6898d 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte @@ -50,6 +50,7 @@ import Create from './create-file/create.svelte'; import DeleteFile from './deleteFile.svelte'; import { isCloud } from '$lib/system'; + import { onMount } from 'svelte'; export let data; @@ -90,6 +91,30 @@ $: maxFileSize = isCloud ? humanFileSize(sizeToBytes(getServiceLimit('fileSize'), 'MB', 1000)) : null; + + let isUploading = false; + + const handleBeforeUnload = (event: BeforeUnloadEvent) => { + if (isUploading) { + event.preventDefault(); + event.returnValue = 'An upload is in progress. Are you sure you want to leave?'; + } + }; + + onMount(() => { + const unsubscribe = uploader.subscribe(() => { + isUploading = $uploader.files.some( + (file) => (!file.completed || file.progress < 100) && !file.failed + ); + }); + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + unsubscribe(); + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + });