diff --git a/src/routes/(token-based)/list/[vorgang]/+page.svelte b/src/routes/(token-based)/list/[vorgang]/+page.svelte index 1829752..15d68b9 100644 --- a/src/routes/(token-based)/list/[vorgang]/+page.svelte +++ b/src/routes/(token-based)/list/[vorgang]/+page.svelte @@ -42,6 +42,7 @@ let formErrors: Record | null = $state(null); let etag: string | null = $state(null); let files: FileList | null = $state(null); + let fileInput = $state(null); // Model Variablen für Upload let openUL = $state(false); @@ -102,6 +103,7 @@ openUL = false; name = ''; files = null; + fileInput.value = ""; await invalidateAll(); crimesList = data.crimesList; } @@ -132,17 +134,17 @@ // big endian! let file = files[0]; - let file_header = file.slice(0, 4); - console.log(file_header); - let header_bytes = await file_header.bytes(); - let file_header_hex = '0x' + header_bytes.toHex().toString(); + const fileHeader = file.slice(0, 4); + const buffer = await fileHeader.arrayBuffer(); + console.log(fileHeader); + let headerBytes = new Uint8Array(buffer); + let fileHeaderHex = '0x' + headerBytes.toHex().toString(); - if (GLD_MAGIC == swap_endian(file_header_hex)) { + if (GLD_MAGIC == swap_endian(fileHeaderHex)) { return true; } else { return false; } - return true; } async function getUrl() { @@ -287,8 +289,34 @@ Mit freundlichen Grüßen, open = false; isError = false; } + + // drag and drop functionality + let isDragging = $state(false); + + async function handleDrop(event) { + event.preventDefault(); + isDragging = false; + + if (event.dataTransfer?.files?.length) { + files = event.dataTransfer.files; + } + if (!(await check_valid_glb_file())) { + formErrors = { file: 'Keine gültige .GLD-Datei' } + // reset form fields etc. + files = null; + fileInput.value = ''; + } else { + formErrors = { ...formErrors, file: ''} + }; + } + + + {#if data.vorgang && crimesList}
@@ -415,7 +443,13 @@ Mit freundlichen Grüßen,
(isDragging = true)} + on:dragleave={() => (isDragging = false)} + on:drop={handleDrop} >
@@ -425,7 +459,7 @@ Mit freundlichen Grüßen, class="relative cursor-pointer rounded-md bg-white font-semibold text-indigo-600 focus-within:outline-none focus-within:ring-2 focus-within:ring-indigo-600 focus-within:ring-offset-2 hover:text-indigo-500" > Wähle eine Datei aus - +

oder ziehe sie ins Feld