element-plus
Version:
A Component Library for Vue 3
1 lines • 7.3 kB
Source Map (JSON)
{"version":3,"file":"upload-dragger.vue2.mjs","sources":["../../../../../../packages/components/upload/src/upload-dragger.vue"],"sourcesContent":["<template>\n <div\n :class=\"[ns.b('dragger'), ns.is('dragover', dragover)]\"\n @drop.prevent=\"onDrop\"\n @dragover.prevent=\"onDragover\"\n @dragleave.prevent=\"onDragleave\"\n >\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject, ref } from 'vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { useFormDisabled } from '@element-plus/components/form'\nimport { throwError } from '@element-plus/utils/error'\nimport { flatten } from 'lodash-unified'\nimport { uploadContextKey } from './constants'\nimport { uploadDraggerEmits } from './upload-dragger'\n\nimport type { UploadDraggerProps } from './upload-dragger'\nimport type { UploadRawFile } from './upload'\n\nconst COMPONENT_NAME = 'ElUploadDrag'\n\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = withDefaults(defineProps<UploadDraggerProps>(), {\n disabled: undefined,\n})\nconst emit = defineEmits(uploadDraggerEmits)\n\nconst uploaderContext = inject(uploadContextKey)\nif (!uploaderContext) {\n throwError(\n COMPONENT_NAME,\n 'usage: <el-upload><el-upload-dragger /></el-upload>'\n )\n}\n\nconst ns = useNamespace('upload')\nconst dragover = ref(false)\nconst disabled = useFormDisabled()\n\nconst getFile = (entry: FileSystemFileEntry): Promise<File> => {\n return new Promise((resolve, reject) => entry.file(resolve, reject))\n}\n\nconst getAllFiles = async (\n entry: FileSystemEntry\n): Promise<UploadRawFile[]> => {\n try {\n if (entry.isFile) {\n const file = (await getFile(\n entry as FileSystemFileEntry\n )) as UploadRawFile\n file.isDirectory = false\n return [file]\n }\n if (entry.isDirectory) {\n const dirReader = (entry as FileSystemDirectoryEntry).createReader()\n const getEntries = (): Promise<FileSystemEntry[]> => {\n return new Promise((resolve, reject) =>\n dirReader.readEntries(resolve, reject)\n )\n }\n\n const entries: FileSystemEntry[] = []\n let readEntries = await getEntries()\n /**\n * In Chromium-based browsers, readEntries() will only return the first 100 FileSystemEntry instances.\n * https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries#:~:text=In%20Chromium%2Dbased%20browsers%2C%20readEntries()%20will%20only%20return%20the%20first%20100%20FileSystemEntry%20instances.%20In%20order%20to%20obtain%20all%20of%20the%20instances%2C%20readEntries()%20must%20be%20called%20multiple%20times.\n */\n while (readEntries.length > 0) {\n entries.push(...readEntries)\n readEntries = await getEntries()\n }\n\n const filePromises = entries.map((entry) =>\n getAllFiles(entry).catch(() => [])\n )\n\n const files = await Promise.all(filePromises)\n return flatten(files)\n }\n } catch {\n return []\n }\n return []\n}\n\nconst onDrop = async (e: DragEvent) => {\n if (disabled.value) return\n dragover.value = false\n\n e.stopPropagation()\n\n const files = Array.from(e.dataTransfer!.files) as UploadRawFile[]\n const items = e.dataTransfer!.items || []\n\n if (props.directory) {\n const entries = Array.from(items)\n .map((item) => item?.webkitGetAsEntry?.())\n .filter((entry) => entry) as FileSystemEntry[]\n\n const allFiles = await Promise.all(entries.map(getAllFiles))\n emit('file', flatten(allFiles))\n return\n }\n\n files.forEach((file, index) => {\n const item = items[index]\n const entry = item?.webkitGetAsEntry?.()\n if (entry) {\n file.isDirectory = entry.isDirectory\n }\n })\n emit('file', files)\n}\n\nconst onDragover = () => {\n if (!disabled.value) dragover.value = true\n}\n\nconst onDragleave = (e: DragEvent) => {\n if (!(e.currentTarget as Element).contains(e.relatedTarget as Element))\n dragover.value = false\n}\n</script>\n"],"names":["entry","_createElementBlock","_normalizeClass","_unref","_renderSlot"],"mappings":"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"}