From 25a208b81de84af7ef8ce3b76153369bdbec0069 Mon Sep 17 00:00:00 2001 From: Kazuki Yamada Date: Sun, 8 Jun 2025 13:53:25 +0900 Subject: [PATCH] fix(website): Clear file input after selection to prevent re-selection issues --- website/client/composables/useFileUpload.ts | 9 +++++++++ website/client/composables/useZipProcessor.ts | 18 +++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/website/client/composables/useFileUpload.ts b/website/client/composables/useFileUpload.ts index 7167fbf..0858f5e 100644 --- a/website/client/composables/useFileUpload.ts +++ b/website/client/composables/useFileUpload.ts @@ -99,6 +99,10 @@ export function useFileUpload(config: FileUploadConfig) { function clearSelection() { selectedItem.value = null; errorMessage.value = null; + // Clear file input to prevent re-selection issues + if (fileInput.value) { + fileInput.value.value = ''; + } } // Validate and process files @@ -139,6 +143,11 @@ export function useFileUpload(config: FileUploadConfig) { // Update selection selectedItem.value = folderName || resultFile.name; + // Clear file input to prevent re-selection issues + if (fileInput.value) { + fileInput.value.value = ''; + } + return { success: true, result: resultFile }; } catch (error) { const errorMsg = error instanceof Error ? error.message : 'Processing failed'; diff --git a/website/client/composables/useZipProcessor.ts b/website/client/composables/useZipProcessor.ts index 8cda05c..ec30c12 100644 --- a/website/client/composables/useZipProcessor.ts +++ b/website/client/composables/useZipProcessor.ts @@ -2,15 +2,19 @@ import JSZip from 'jszip'; export function useZipProcessor() { async function createZipFromFiles(files: File[], folderName: string): Promise { - const zip = new JSZip(); + try { + const zip = new JSZip(); - for (const file of files) { - const path = file.webkitRelativePath || file.name; - zip.file(path, file); + for (const file of files) { + const path = file.webkitRelativePath || file.name; + zip.file(path, file); + } + + const zipBlob = await zip.generateAsync({ type: 'blob' }); + return new File([zipBlob], `${folderName}.zip`, { type: 'application/zip' }); + } catch (error) { + throw new Error(`Failed to create ZIP file: ${error instanceof Error ? error.message : 'Unknown error'}`); } - - const zipBlob = await zip.generateAsync({ type: 'blob' }); - return new File([zipBlob], `${folderName}.zip`, { type: 'application/zip' }); } function validateZipFile(file: File): { valid: boolean; error?: string } {