diff --git a/.changeset/clean-melons-return.md b/.changeset/clean-melons-return.md new file mode 100644 index 0000000000000..3b521860efbc8 --- /dev/null +++ b/.changeset/clean-melons-return.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixed image dropping from another browser window creates two upload dialogs in some OS and browsers diff --git a/apps/meteor/client/views/room/body/hooks/useFileUploadDropTarget.ts b/apps/meteor/client/views/room/body/hooks/useFileUploadDropTarget.ts index 2df567e77fb07..2427f72174011 100644 --- a/apps/meteor/client/views/room/body/hooks/useFileUploadDropTarget.ts +++ b/apps/meteor/client/views/room/body/hooks/useFileUploadDropTarget.ts @@ -40,7 +40,21 @@ export const useFileUploadDropTarget = (): readonly [ const onFileDrop = useMutableCallback(async (files: File[]) => { const { mime } = await import('../../../../../app/utils/lib/mimeTypes'); - const uploads = Array.from(files).map((file) => { + const getUniqueFiles = () => { + const uniqueFiles: File[] = []; + const st: Set = new Set(); + files.forEach((file) => { + const key = file.size; + if (!st.has(key)) { + uniqueFiles.push(file); + st.add(key); + } + }); + return uniqueFiles; + }; + const uniqueFiles = getUniqueFiles(); + + const uploads = Array.from(uniqueFiles).map((file) => { Object.defineProperty(file, 'type', { value: mime.lookup(file.name) }); return file; });