UNPKG

ngx-dropzone-next

Version:

A highly configurable dropzone component for Angular.

1 lines 7.6 kB
{"version":3,"file":"ngx-dropzone-next-on-drop-DVJ8FboQ.mjs","sources":["../../../projects/ngx-dropzone/src/lib/ngx-dropzone/on-drop.ts"],"sourcesContent":["import type { NgxDropzoneComponent } from './ngx-dropzone.component';\n\nexport async function onDrop(\n ctx: NgxDropzoneComponent,\n { dataTransfer }: DragEvent\n) {\n if (!dataTransfer) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n throw new Error('dataTransfer is not defined on the event object.');\n }\n\n return;\n }\n\n // if processDirectoryDrop is not enabled or webkitGetAsEntry is not supported we handle the drop as usual\n if (\n !ctx.processDirectoryDrop() ||\n !DataTransferItem.prototype.webkitGetAsEntry\n ) {\n await handleFileDrop(ctx, dataTransfer.files);\n // if processDirectoryDrop is enabled and webkitGetAsEntry is supported we can extract files from a dropped directory\n } else if (dataTransfer.items.length > 0) {\n const droppedItems: DataTransferItemList = dataTransfer!.items;\n\n const droppedFiles: File[] = [];\n const droppedDirectories: FileSystemEntry[] = [];\n\n // seperate dropped files from dropped directories for easier handling\n for (let index = 0; index < droppedItems.length; index++) {\n const entry = droppedItems[index].webkitGetAsEntry();\n\n if (!entry) {\n continue;\n }\n\n if (entry.isFile) {\n droppedFiles.push(dataTransfer.files[index]);\n } else if (entry.isDirectory) {\n droppedDirectories.push(entry);\n }\n }\n\n // create a DataTransfer\n const droppedFilesList = new DataTransfer();\n droppedFiles.forEach((droppedFile) => {\n droppedFilesList.items.add(droppedFile);\n });\n\n // if no directory is dropped we are done and can call handleFileDrop\n if (!droppedDirectories.length && droppedFilesList.items.length) {\n handleFileDrop(ctx, droppedFilesList.files);\n }\n\n // if directories are dropped we extract the files from these directories one-by-one and add it to droppedFilesList\n if (droppedDirectories.length) {\n const extractFilesFromDirectoryCalls: Promise<File[]>[] = [];\n\n for (const droppedDirectory of droppedDirectories) {\n extractFilesFromDirectoryCalls.push(\n extractFilesFromDirectory(droppedDirectory)\n );\n }\n\n // wait for all directories to be proccessed to add the extracted files afterwards\n await Promise.all(extractFilesFromDirectoryCalls).then(\n (allExtractedFiles: File[][]) => {\n allExtractedFiles\n .reduce((a, b) => [...a, ...b])\n .forEach((extractedFile: File) => {\n droppedFilesList.items.add(extractedFile);\n });\n }\n );\n\n await handleFileDrop(ctx, droppedFilesList.files);\n }\n }\n}\n\nasync function getFileFromFileEntry(entry: FileSystemEntry) {\n try {\n const fileSystemFileEntry = <FileSystemFileEntry>entry;\n\n return await new Promise<File>((resolve, reject) =>\n fileSystemFileEntry.file(resolve, reject)\n );\n } catch (error) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n console.log('Error converting a fileEntry to a File: ', error);\n }\n return null;\n }\n}\n\nfunction extractFilesFromDirectory(directory: FileSystemEntry) {\n return new Promise<File[]>((resolve) => {\n const files: File[] = [];\n\n const reader = (directory as FileSystemDirectoryEntry).createReader();\n\n // we need this to be a recursion because of this issue: https://bugs.chromium.org/p/chromium/issues/detail?id=514087\n const readEntries = () => {\n reader.readEntries(async (entries: FileSystemEntry[]) => {\n if (entries.length > 0) {\n for (const entry of entries.filter(({ isFile }) => isFile)) {\n const file = await getFileFromFileEntry(entry);\n file && files.push(file);\n }\n\n readEntries();\n } else {\n resolve(files);\n }\n });\n };\n\n readEntries();\n });\n}\n\nexport async function handleFileDrop(\n ctx: NgxDropzoneComponent,\n files: FileList\n) {\n const { NgxDropzoneService } = await import('./ngx-dropzone.service');\n\n const service = ctx.injector.get(NgxDropzoneService);\n\n const result = service.parseFileList(\n files,\n ctx.accept(),\n ctx.maxFileSize(),\n ctx.multiple()\n );\n\n ctx.change.emit({\n addedFiles: result.addedFiles,\n rejectedFiles: result.rejectedFiles,\n source: ctx,\n });\n}\n"],"names":[],"mappings":"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"}