Skip to content

Commit e6d9707

Browse files
SimYunSupclaude
andcommitted
fix: Fix drag and drop file upload functionality
Resolve issue where dragging and dropping files into the dropzone did not trigger the file input change event properly. Changed from sp-dropzone custom events to native HTML5 drag and drop events (dragover, dragenter, drop) since sp-dropzone component is no longer used. Use DataTransfer to create a new FileList and assign it to enable proper file selection via drag and drop. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 1f408ee commit e6d9707

1 file changed

Lines changed: 25 additions & 7 deletions

File tree

  • src/DotNetDevLottery/typescript/Pages

src/DotNetDevLottery/typescript/Pages/Main.r.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,31 @@ export function clickElement(element: HTMLElement) {
33
}
44

55
export function addDropEventToChangeInputFile(element: HTMLElement) {
6-
element.addEventListener('sp-dropzone-drop', (e) => {
7-
const event = e as CustomEvent<DragEvent>;
6+
// Prevent default drag behaviors
7+
element.addEventListener('dragover', (e) => {
8+
e.preventDefault();
9+
e.stopPropagation();
10+
});
11+
12+
element.addEventListener('dragenter', (e) => {
13+
e.preventDefault();
14+
e.stopPropagation();
15+
});
16+
17+
// Handle drop event
18+
element.addEventListener('drop', (e) => {
19+
e.preventDefault();
20+
e.stopPropagation();
21+
822
const targetInputElement: HTMLInputElement | null = element.querySelector("input[type='file']");
9-
if(event.detail.dataTransfer?.files && targetInputElement) {
10-
targetInputElement.files = event.detail.dataTransfer.files;
11-
const changeEvent = new Event('change')
12-
targetInputElement?.dispatchEvent(changeEvent);
23+
if(e.dataTransfer?.files && targetInputElement) {
24+
const dt = new DataTransfer();
25+
Array.from(e.dataTransfer.files).forEach(file => {
26+
dt.items.add(file);
27+
});
28+
targetInputElement.files = dt.files;
29+
const changeEvent = new Event('change', { bubbles: true })
30+
targetInputElement.dispatchEvent(changeEvent);
1331
}
14-
})
32+
});
1533
}

0 commit comments

Comments
 (0)