element-plus
Version:
A Component Library for Vue 3
1 lines • 11.3 kB
Source Map (JSON)
{"version":3,"file":"upload-content.vue2.mjs","sources":["../../../../../../packages/components/upload/src/upload-content.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n ns.b(),\n ns.m(listType),\n ns.is('drag', drag),\n ns.is('disabled', disabled),\n ]\"\n :tabindex=\"disabled ? undefined : 0\"\n :aria-disabled=\"disabled\"\n role=\"button\"\n @click=\"handleClick\"\n @keydown.self.enter.space=\"handleKeydown\"\n >\n <template v-if=\"drag\">\n <upload-dragger\n :disabled=\"disabled\"\n :directory=\"directory\"\n @file=\"uploadFiles\"\n >\n <slot />\n </upload-dragger>\n </template>\n <template v-else>\n <slot />\n </template>\n <input\n ref=\"inputRef\"\n :class=\"ns.e('input')\"\n :name=\"name\"\n :disabled=\"disabled\"\n :multiple=\"multiple\"\n :accept=\"accept\"\n :webkitdirectory=\"directory || undefined\"\n type=\"file\"\n @change=\"handleChange\"\n @click.stop\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { shallowRef } from 'vue'\nimport { cloneDeep, isEqual } from 'lodash-unified'\nimport { entriesOf, isFunction, isPlainObject } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { useFormDisabled } from '@element-plus/components/form'\nimport UploadDragger from './upload-dragger.vue'\nimport { genFileId } from './upload'\nimport { uploadContentPropsDefaults } from './upload-content'\n\nimport type { UploadContentProps } from './upload-content'\nimport type {\n UploadFile,\n UploadHooks,\n UploadRawFile,\n UploadRequestOptions,\n} from './upload'\n\ndefineOptions({\n name: 'ElUploadContent',\n inheritAttrs: false,\n})\n\nconst props = withDefaults(\n defineProps<UploadContentProps>(),\n uploadContentPropsDefaults\n)\nconst ns = useNamespace('upload')\nconst disabled = useFormDisabled()\n\nconst requests = shallowRef<Record<string, XMLHttpRequest | Promise<unknown>>>(\n {}\n)\nconst inputRef = shallowRef<HTMLInputElement>()\n\nconst uploadFiles = (files: File[]) => {\n if (files.length === 0) return\n\n const { autoUpload, limit, fileList, multiple, onStart, onExceed } = props\n\n if (limit && fileList.length + files.length > limit) {\n onExceed(files, fileList)\n return\n }\n\n if (!multiple) {\n files = files.slice(0, 1)\n }\n\n for (const file of files) {\n const rawFile = file as UploadRawFile\n rawFile.uid = genFileId()\n onStart(rawFile)\n if (autoUpload) upload(rawFile)\n }\n}\n\nconst upload = async (rawFile: UploadRawFile): Promise<void> => {\n inputRef.value!.value = ''\n\n if (!props.beforeUpload) {\n return doUpload(rawFile)\n }\n\n let hookResult: Exclude<ReturnType<UploadHooks['beforeUpload']>, Promise<any>>\n let beforeData: UploadContentProps['data'] = {}\n\n try {\n // origin data: Handle data changes after synchronization tasks are executed\n const originData = props.data\n const beforeUploadPromise = props.beforeUpload(rawFile)\n beforeData = isPlainObject(props.data) ? cloneDeep(props.data) : props.data\n hookResult = await beforeUploadPromise\n if (isPlainObject(props.data) && isEqual(originData, beforeData)) {\n beforeData = cloneDeep(props.data)\n }\n } catch {\n hookResult = false\n }\n\n if (hookResult === false) {\n props.onRemove(rawFile)\n return\n }\n\n let file: File = rawFile\n if (hookResult instanceof Blob) {\n if (hookResult instanceof File) {\n file = hookResult\n } else {\n file = new File([hookResult], rawFile.name, {\n type: rawFile.type,\n })\n }\n }\n\n doUpload(\n Object.assign(file, {\n uid: rawFile.uid,\n }),\n beforeData\n )\n}\n\nconst resolveData = async (\n data: UploadContentProps['data'],\n rawFile: UploadRawFile\n): Promise<Record<string, any>> => {\n if (isFunction(data)) {\n return data(rawFile)\n }\n\n return data!\n}\n\nconst doUpload = async (\n rawFile: UploadRawFile,\n beforeData?: UploadContentProps['data']\n) => {\n const {\n headers,\n data,\n method,\n withCredentials,\n name: filename,\n action,\n onProgress,\n onSuccess,\n onError,\n httpRequest,\n } = props\n\n try {\n beforeData = await resolveData(beforeData ?? data, rawFile)\n } catch {\n props.onRemove(rawFile)\n return\n }\n\n const { uid } = rawFile\n const options: UploadRequestOptions = {\n headers: headers || {},\n withCredentials,\n file: rawFile,\n data: beforeData,\n method,\n filename,\n action,\n onProgress: (evt) => {\n onProgress(evt, rawFile)\n },\n onSuccess: (res) => {\n onSuccess(res, rawFile)\n delete requests.value[uid]\n },\n onError: (err) => {\n onError(err, rawFile)\n delete requests.value[uid]\n },\n }\n const request = httpRequest(options)\n requests.value[uid] = request\n if (request instanceof Promise) {\n request.then(options.onSuccess, options.onError)\n }\n}\n\nconst handleChange = (e: Event) => {\n const files = (e.target as HTMLInputElement).files\n if (!files) return\n uploadFiles(Array.from(files))\n}\n\nconst handleClick = () => {\n if (!disabled.value) {\n inputRef.value!.value = ''\n inputRef.value!.click()\n }\n}\n\nconst handleKeydown = () => {\n handleClick()\n}\n\nconst abort = (file?: UploadFile) => {\n const _reqs = entriesOf(requests.value).filter(\n file ? ([uid]) => String(file.uid) === uid : () => true\n )\n _reqs.forEach(([uid, req]) => {\n if (req instanceof XMLHttpRequest) req.abort()\n delete requests.value[uid]\n })\n}\n\ndefineExpose({\n abort,\n upload,\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_unref","_createBlock","UploadDragger","_renderSlot","_createElementVNode"],"mappings":"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"}