Skip to content

Commit d9935e5

Browse files
committed
fix(frontend:files): fix DataTransfer usage after async operations and delay overwrite until analysis completes to restore overwrite on dropped files
1 parent dffd5e5 commit d9935e5

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

frontend/src/app/applications/files/services/files-upload.service.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,15 @@ export class FilesUploadService {
5757
}
5858
}
5959

60-
onDropFiles(ev: any, overwrite: boolean) {
60+
onDropFiles(ev: any, exist: FileModel[]) {
61+
/*
62+
Important: dataTransfer.items must be accessed synchronously before any async operation; overwrite is handled after all analyses.
63+
Parameter `exist`: files already present in the current drop target.
64+
*/
6165
if (ev.dataTransfer.items && ev.dataTransfer.items[0]?.webkitGetAsEntry) {
62-
this.webkitReadDataTransfer(ev, overwrite)
66+
this.webkitReadDataTransfer(ev, exist)
6367
} else {
64-
this.addFiles(ev.dataTransfer.files, overwrite).catch(console.error)
68+
this.addFiles(ev.dataTransfer.files, exist.length > 0).catch(console.error)
6569
}
6670
}
6771

@@ -101,7 +105,7 @@ export class FilesUploadService {
101105
return sort
102106
}
103107

104-
private webkitReadDataTransfer(ev: any, overwrite: boolean) {
108+
private webkitReadDataTransfer(ev: any, exist: FileModel[]) {
105109
let queue = ev.dataTransfer.items.length
106110
const files: FileUpload[] = []
107111
const readDirectory = (reader: any) => {
@@ -134,7 +138,18 @@ export class FilesUploadService {
134138
}
135139
const decrement = () => {
136140
if (--queue == 0) {
137-
this.addFiles(files, overwrite).catch(console.error)
141+
if (exist.length <= 0) {
142+
this.addFiles(files, false).catch(console.error)
143+
return
144+
}
145+
this.filesService
146+
.openOverwriteDialog(exist)
147+
.then((overwrite) => {
148+
if (overwrite) {
149+
this.addFiles(files, true).catch(console.error)
150+
}
151+
})
152+
.catch(console.error)
138153
}
139154
}
140155

frontend/src/app/applications/spaces/components/spaces-browser.component.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -574,33 +574,31 @@ export class SpacesBrowserComponent implements OnInit, AfterViewInit, OnDestroy
574574

575575
async onUploadFiles(ev: { files: File[] }, isDirectory = false) {
576576
let overwrite = false
577+
const selectedFiles = [...ev.files]
577578
if (isDirectory) {
578-
const dirName = ev.files[0].webkitRelativePath.split('/')[0]
579-
const dirExists = this.files.find((f) => f.name.toLowerCase() === dirName.toLowerCase())
579+
const dirName = selectedFiles[0].webkitRelativePath.split('/')[0].normalize()
580+
const dirExists = this.files.find((f) => f.name.normalize().toLowerCase() === dirName.normalize().toLowerCase())
580581
if (dirExists) {
581582
overwrite = await this.filesService.openOverwriteDialog([dirExists])
582583
if (!overwrite) return
583584
}
584585
} else {
585-
const exist: FileModel[] = this.files.filter((x: FileModel) => [...ev.files].some((f) => f.name.toLowerCase() === x.name.toLowerCase()))
586+
const exist: FileModel[] = this.files.filter((x: FileModel) =>
587+
selectedFiles.some((f) => f.name.normalize().toLowerCase() === x.name.normalize().toLowerCase())
588+
)
586589
if (exist.length > 0) {
587590
overwrite = await this.filesService.openOverwriteDialog(exist)
588591
if (!overwrite) return
589592
}
590593
}
591-
this.filesUpload.addFiles(ev.files, overwrite).catch(console.error)
594+
this.filesUpload.addFiles(selectedFiles, overwrite).catch(console.error)
592595
}
593596

594-
async onDropFiles(ev: { dataTransfer: { files: File[] } }) {
595-
let overwrite = false
597+
onDropFiles(ev: { dataTransfer: { files: File[] } }) {
596598
const exist: FileModel[] = this.files.filter((x: FileModel) =>
597-
[...ev.dataTransfer.files].some((f) => f.name.toLowerCase() === x.name.toLowerCase())
599+
[...ev.dataTransfer.files].some((f) => f.name.normalize().toLowerCase() === x.name.normalize().toLowerCase())
598600
)
599-
if (exist.length > 0) {
600-
overwrite = await this.filesService.openOverwriteDialog(exist)
601-
if (!overwrite) return
602-
}
603-
this.filesUpload.onDropFiles(ev, overwrite)
601+
this.filesUpload.onDropFiles(ev, exist)
604602
}
605603

606604
decompressFile() {

0 commit comments

Comments
 (0)