{"version":3,"file":"upload-content.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 ? '-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 '@hd-front-end/utils'\nimport { useNamespace } from '@hd-front-end/hooks'\nimport { useFormDisabled } from '@hd-front-end/components/form'\nimport UploadDragger from './upload-dragger.vue'\nimport { uploadContentProps } from './upload-content'\nimport { genFileId } from './upload'\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 = 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"],"names":["_createElementBlock","_normalizeClass","_unref","listType","drag","_withKeys","_createBlock","_renderSlot","_createElementVNode","name","multiple","accept","_withModifiers"],"mappings":"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"}