MCPcopy Create free account
hub / github.com/Sethispr/image-compressor / handleWindowDrop

Function handleWindowDrop

components/Dropzone.tsx:55–109  ·  view source on GitHub ↗
(e: DragEvent)

Source from the content-addressed store, hash-verified

53 };
54
55 const handleWindowDrop = async (e: DragEvent) => {
56 e.preventDefault();
57 dragCounter.current = 0;
58 setIsDragOver(false);
59
60 if (e.dataTransfer?.items) {
61 const files: File[] = [];
62 const MAX_FILES = 100;
63 let processedCount = 0;
64
65 // eslint-disable-next-line @typescript-eslint/no-explicit-any
66 const traverseFileTree = async (item: any, path?: string) => {
67 if (processedCount >= MAX_FILES) return;
68 path = path || '';
69
70 if (item.isFile) {
71 processedCount++;
72 return new Promise<void>(resolve => {
73 item.file((file: File) => {
74 if (isValidFile(file)) files.push(file);
75 resolve();
76 });
77 });
78 } else if (item.isDirectory) {
79 const dirReader = item.createReader();
80 return new Promise<void>(resolve => {
81 // eslint-disable-next-line @typescript-eslint/no-explicit-any
82 dirReader.readEntries(async (entries: any[]) => {
83 for (const entry of entries) {
84 await traverseFileTree(entry, path + item.name + '/');
85 }
86 resolve();
87 });
88 });
89 }
90 };
91
92 const items = e.dataTransfer.items;
93 const promises = [];
94 for (let i = 0; i < items.length; i++) {
95 const item = items[i].webkitGetAsEntry
96 ? items[i].webkitGetAsEntry()
97 : items[i];
98 if (item) {
99 promises.push(traverseFileTree(item));
100 }
101 }
102 await Promise.all(promises);
103
104 if (files.length > 0) onFilesAdded(files);
105 } else if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {
106 const validFiles = Array.from(e.dataTransfer.files).filter(isValidFile);
107 if (validFiles.length > 0) onFilesAdded(validFiles);
108 }
109 };
110
111 const handleWindowPaste = (e: ClipboardEvent) => {
112 const clipboardData = e.clipboardData;

Callers

nothing calls this directly

Calls 1

traverseFileTreeFunction · 0.85

Tested by

no test coverage detected