refactor: strengthen upload boundary types

This commit is contained in:
Tom Boullay
2026-04-27 17:21:44 +02:00
parent d049318a73
commit fd586f4185
7 changed files with 96 additions and 39 deletions
+17 -6
View File
@@ -28,12 +28,22 @@ function readDirectoryEntries(reader: FileSystemDirectoryReader) {
})
}
function isFileEntry(entry: FileSystemEntry): entry is FileSystemFileEntry {
return entry.isFile
}
function isDirectoryEntry(entry: FileSystemEntry): entry is FileSystemDirectoryEntry {
return entry.isDirectory
}
async function collectEntryFiles(entry: FileSystemEntry): Promise<File[]> {
if (entry.isFile) {
return [await readDroppedFile(entry as FileSystemFileEntry)]
if (isFileEntry(entry)) {
return [await readDroppedFile(entry)]
}
const reader = (entry as FileSystemDirectoryEntry).createReader()
if (!isDirectoryEntry(entry)) return []
const reader = entry.createReader()
const files: File[] = []
while (true) {
@@ -109,7 +119,8 @@ export default function FolderDropzone({
}
const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {
if (!e.currentTarget.contains(e.relatedTarget as Node | null)) {
const relatedTarget = e.relatedTarget
if (!(relatedTarget instanceof Node) || !e.currentTarget.contains(relatedTarget)) {
setIsDragActive(false)
}
}
@@ -127,7 +138,7 @@ export default function FolderDropzone({
.map((item) => item.webkitGetAsEntry?.())
.filter((entry): entry is FileSystemEntry => entry !== null)
const directoryEntries = rootEntries.filter((entry) => entry.isDirectory)
const directoryEntries = rootEntries.filter(isDirectoryEntry)
if (directoryEntries.length > 0) {
if (directoryEntries.length > 1) {
@@ -135,7 +146,7 @@ export default function FolderDropzone({
return
}
const rootEntry = directoryEntries[0] as FileSystemDirectoryEntry
const rootEntry = directoryEntries[0]
const files = await collectEntryFiles(rootEntry)
processFiles(files, rootEntry.name)
return