diff --git a/src/qComponents/QUpload/src/QUpload.vue b/src/qComponents/QUpload/src/QUpload.vue index cd7b2a85..35435bd9 100644 --- a/src/qComponents/QUpload/src/QUpload.vue +++ b/src/qComponents/QUpload/src/QUpload.vue @@ -8,6 +8,7 @@ :text-upload-file="textUploadFile" :text-replace-file="textReplaceFile" :text-loading-file="textLoadingFile" + @drop="handleFileDrop" @click="handleUploadClick" @keyup.enter="handleUploadClick" /> @@ -19,7 +20,7 @@ tabindex="-1" :accept="accept?.toString()" :multiple="multiple" - @change="processFile" + @change="handleFileChange" /> { + const processFile = (fileList: Nullable): void => { if (isDisabled.value) return; - const fileList = (target as HTMLInputElement)?.files; - if (!fileList) return; if (!props.multiple) { @@ -282,6 +281,16 @@ export default defineComponent({ ctx.emit('select-all', preparedFileList); }; + const handleFileDrop = ({ dataTransfer }: DragEvent): void => { + const fileList = dataTransfer?.files ?? null; + processFile(fileList); + }; + + const handleFileChange = ({ target }: Event): void => { + const fileList = (target as HTMLInputElement)?.files; + processFile(fileList); + }; + return { isDisabled, isLoading, @@ -289,7 +298,9 @@ export default defineComponent({ classes, hasValue, processFile, + handleFileDrop, handleUploadClick, + handleFileChange, handleClearAll, handleClear, handleAbort diff --git a/src/qComponents/QUpload/src/QUploadDropZone/QUploadDropZone.vue b/src/qComponents/QUpload/src/QUploadDropZone/QUploadDropZone.vue index 48d2a9d7..285968b1 100644 --- a/src/qComponents/QUpload/src/QUploadDropZone/QUploadDropZone.vue +++ b/src/qComponents/QUpload/src/QUploadDropZone/QUploadDropZone.vue @@ -86,13 +86,11 @@ export default defineComponent({ : textUploadFile; }); - const handleDrop = ({ dataTransfer }: DragEvent): void => { + const handleDrop = (dropEvent: DragEvent): void => { if (props.isDisabled) return; if (isDragover.value) isDragover.value = false; - const sourceFile = dataTransfer?.files?.[0]; - - ctx.emit('drop', sourceFile); + ctx.emit('drop', dropEvent); }; const handleDragover = (): void => { diff --git a/src/qComponents/QUpload/src/types.ts b/src/qComponents/QUpload/src/types.ts index 08dd051d..f10e77e4 100644 --- a/src/qComponents/QUpload/src/types.ts +++ b/src/qComponents/QUpload/src/types.ts @@ -33,7 +33,9 @@ export interface QUploadInstance { fileInput: Ref>; classes: ComputedRef>; hasValue: ComputedRef; - processFile: ({ target }: MouseEvent) => void; + handleFileChange: ({ target }: Event) => void; + processFile: (fileList: Nullable) => void; + handleFileDrop: (dropEvent: DragEvent) => void; handleUploadClick: () => void; handleClearAll: () => void; handleClear: (fileId: string) => void;