You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 lines
16 KiB

{"ast":null,"code":"import { defineComponent, shallowRef, openBlock, createElementBlock, normalizeClass, unref, withKeys, withModifiers, createBlock, withCtx, renderSlot, createElementVNode } from 'vue';\nimport { cloneDeep, isEqual } from 'lodash-unified';\nimport UploadDragger from './upload-dragger2.mjs';\nimport { uploadContentProps } from './upload-content.mjs';\nimport { genFileId } from './upload.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { entriesOf } from '../../../utils/objects.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { isPlainObject, isFunction } from '@vue/shared';\nconst __default__ = defineComponent({\n name: \"ElUploadContent\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */defineComponent({\n ...__default__,\n props: uploadContentProps,\n setup(__props, {\n expose\n }) {\n const props = __props;\n const ns = useNamespace(\"upload\");\n const disabled = useFormDisabled();\n const requests = shallowRef({});\n const inputRef = shallowRef();\n const uploadFiles = files => {\n if (files.length === 0) return;\n const {\n autoUpload,\n limit,\n fileList,\n multiple,\n onStart,\n onExceed\n } = props;\n if (limit && fileList.length + files.length > limit) {\n onExceed(files, fileList);\n return;\n }\n if (!multiple) {\n files = files.slice(0, 1);\n }\n for (const file of files) {\n const rawFile = file;\n rawFile.uid = genFileId();\n onStart(rawFile);\n if (autoUpload) upload(rawFile);\n }\n };\n const upload = async rawFile => {\n inputRef.value.value = \"\";\n if (!props.beforeUpload) {\n return doUpload(rawFile);\n }\n let hookResult;\n let beforeData = {};\n try {\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 (e) {\n hookResult = false;\n }\n if (hookResult === false) {\n props.onRemove(rawFile);\n return;\n }\n let 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 doUpload(Object.assign(file, {\n uid: rawFile.uid\n }), beforeData);\n };\n const resolveData = async (data, rawFile) => {\n if (isFunction(data)) {\n return data(rawFile);\n }\n return data;\n };\n const doUpload = async (rawFile, beforeData) => {\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 try {\n beforeData = await resolveData(beforeData != null ? beforeData : data, rawFile);\n } catch (e) {\n props.onRemove(rawFile);\n return;\n }\n const {\n uid\n } = rawFile;\n const options = {\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 const handleChange = e => {\n const files = e.target.files;\n if (!files) return;\n uploadFiles(Array.from(files));\n };\n const handleClick = () => {\n if (!disabled.value) {\n inputRef.value.value = \"\";\n inputRef.value.click();\n }\n };\n const handleKeydown = () => {\n handleClick();\n };\n const abort = file => {\n const _reqs = entriesOf(requests.value).filter(file ? ([uid]) => String(file.uid) === uid : () => true);\n _reqs.forEach(([uid, req]) => {\n if (req instanceof XMLHttpRequest) req.abort();\n delete requests.value[uid];\n });\n };\n expose({\n abort,\n upload\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([unref(ns).b(), unref(ns).m(_ctx.listType), unref(ns).is(\"drag\", _ctx.drag), unref(ns).is(\"disabled\", unref(disabled))]),\n tabindex: unref(disabled) ? \"-1\" : \"0\",\n onClick: handleClick,\n onKeydown: withKeys(withModifiers(handleKeydown, [\"self\"]), [\"enter\", \"space\"])\n }, [_ctx.drag ? (openBlock(), createBlock(UploadDragger, {\n key: 0,\n disabled: unref(disabled),\n onFile: uploadFiles\n }, {\n default: withCtx(() => [renderSlot(_ctx.$slots, \"default\")]),\n _: 3\n }, 8, [\"disabled\"])) : renderSlot(_ctx.$slots, \"default\", {\n key: 1\n }), createElementVNode(\"input\", {\n ref_key: \"inputRef\",\n ref: inputRef,\n class: normalizeClass(unref(ns).e(\"input\")),\n name: _ctx.name,\n disabled: unref(disabled),\n multiple: _ctx.multiple,\n accept: _ctx.accept,\n type: \"file\",\n onChange: handleChange,\n onClick: withModifiers(() => {}, [\"stop\"])\n }, null, 42, [\"name\", \"disabled\", \"multiple\", \"accept\", \"onClick\"])], 42, [\"tabindex\", \"onKeydown\"]);\n };\n }\n});\nvar UploadContent = /* @__PURE__ */_export_sfc(_sfc_main, [[\"__file\", \"upload-content.vue\"]]);\nexport { UploadContent as default };","map":{"version":3,"names":["name","inheritAttrs","ns","useNamespace","disabled","useFormDisabled","requests","shallowRef","inputRef","uploadFiles","files","length","autoUpload","limit","fileList","multiple","onStart","onExceed","props","slice","file","rawFile","uid","genFileId","upload","value","beforeUpload","doUpload","hookResult","beforeData","originData","data","beforeUploadPromise","isPlainObject","cloneDeep","isEqual","e","onRemove","Blob","File","type","Object","assign","resolveData","isFunction","headers","method","withCredentials","filename","action","onProgress","onSuccess","onError","httpRequest","options","evt","res","err","request","Promise","then","handleChange","target","Array","from","handleClick","click","handleKeydown","abort","_reqs","entriesOf","filter","String","forEach","req","XMLHttpRequest","expose","_ctx","_cache","openBlock","createElementBlock","class","normalizeClass"],"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 ? '-1' : '0'\"\n @click=\"handleClick\"\n @keydown.self.enter.space=\"handleKeydown\"\n >\n <template v-if=\"drag\">\n <upload-dragger :disabled=\"disabled\" @file=\"uploadFiles\">\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 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 { uploadContentProps } from './upload-content'\nimport { genFileId } from './upload'\nimport type { UploadContentProps } from './upload-content'\n\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 = defineProps(uploadContentProps)\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"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}