{"version":3,"file":"upload.vue2.mjs","sources":["../../../../../packages/components/upload/src/upload.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[ns.b(), ns.m(listType)]\"\n    tabindex=\"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></slot>\n      </upload-dragger>\n    </template>\n    <template v-else>\n      <slot></slot>\n    </template>\n    <input\n      ref=\"inputRef\"\n      :class=\"ns.e('input')\"\n      type=\"file\"\n      :name=\"name\"\n      :multiple=\"multiple\"\n      :accept=\"accept\"\n      @change=\"handleChange\"\n    />\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport { hasOwn } from '@element-ultra/utils'\n\nimport { useNamespace } from '@element-ultra/hooks'\nimport ajax from './ajax'\nimport UploadDragger from './upload-dragger.vue'\n\nimport type { PropType } from 'vue'\nimport type { Nullable } from '@element-ultra/utils'\nimport type { ListType, UploadFile, ElFile } from './upload.type'\n\ntype IFileHanlder = (\n  file: Nullable<ElFile[]>,\n  fileList?: UploadFile[]\n) => unknown\n\ntype AjaxEventListener = (e: ProgressEvent, file: ElFile) => unknown\n\nexport default defineComponent({\n  components: {\n    UploadDragger,\n  },\n  props: {\n    type: {\n      type: String,\n      default: '',\n    },\n    action: {\n      type: String,\n      required: true,\n    },\n    name: {\n      type: String,\n      default: 'file',\n    },\n    data: {\n      type: Object as PropType<Record<string, any>>,\n      default: () => null,\n    },\n    headers: {\n      type: Object as PropType<Nullable<Partial<Headers>>>,\n      default: () => null,\n    },\n    method: {\n      type: String,\n      default: 'post',\n    },\n    withCredentials: {\n      type: Boolean,\n      default: false,\n    },\n    multiple: {\n      type: Boolean as PropType<Nullable<boolean>>,\n      default: null,\n    },\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers\n    accept: {\n      type: String,\n      default: '',\n    },\n    onStart: {\n      type: Function as PropType<(file: File) => void>,\n      default: NOOP as (file: File) => void,\n    },\n    onProgress: {\n      type: Function as PropType<AjaxEventListener>,\n      default: NOOP as AjaxEventListener,\n    },\n    onSuccess: {\n      type: Function as PropType<AjaxEventListener>,\n      default: NOOP as AjaxEventListener,\n    },\n    onError: {\n      type: Function as PropType<AjaxEventListener>,\n      default: NOOP as AjaxEventListener,\n    },\n    beforeUpload: {\n      type: Function as PropType<\n        (file: File) => Promise<File | Blob> | boolean | unknown\n      >,\n      default: NOOP as (file: File) => void,\n    },\n    drag: {\n      type: Boolean,\n      default: false,\n    },\n    onPreview: {\n      type: Function as PropType<IFileHanlder>,\n      default: NOOP as IFileHanlder,\n    },\n    onRemove: {\n      type: Function as PropType<\n        (file: Nullable<FileList>, rawFile: ElFile) => void\n      >,\n      default: NOOP as (file: Nullable<FileList>, rawFile: ElFile) => void,\n    },\n    fileList: {\n      type: Array as PropType<UploadFile[]>,\n      default: () => [] as UploadFile[],\n    },\n    autoUpload: {\n      type: Boolean,\n      default: true,\n    },\n    listType: {\n      type: String as PropType<ListType>,\n      default: 'text',\n    },\n    httpRequest: {\n      type: Function as\n        | PropType<typeof ajax>\n        | PropType<(...args: unknown[]) => Promise<unknown>>,\n      default: () => ajax,\n    },\n    disabled: {\n      type: Boolean,\n      default: undefined\n    },\n    limit: {\n      type: Number as PropType<Nullable<number>>,\n      default: null,\n    },\n    onExceed: {\n      type: Function as PropType<\n        (files: FileList, fileList: UploadFile[]) => void\n      >,\n      default: NOOP,\n    },\n  },\n  setup(props) {\n    const reqs = ref({} as Record<string, XMLHttpRequest | Promise<any>>)\n    const ns = useNamespace('upload')\n    const mouseover = ref(false)\n    const inputRef = ref(null as Nullable<HTMLInputElement>)\n\n    function uploadFiles(files: FileList) {\n      if (props.limit && props.fileList.length + files.length > props.limit) {\n        props.onExceed(files, props.fileList)\n        return\n      }\n      let postFiles = Array.from(files)\n      if (!props.multiple) {\n        postFiles = postFiles.slice(0, 1)\n      }\n      if (postFiles.length === 0) {\n        return\n      }\n      postFiles.forEach((rawFile) => {\n        props.onStart(rawFile)\n        if (props.autoUpload) upload(rawFile as ElFile)\n      })\n    }\n\n    function upload(rawFile: ElFile) {\n      inputRef.value.value = null\n      if (!props.beforeUpload) {\n        return post(rawFile)\n      }\n      const before = props.beforeUpload(rawFile)\n      if (before instanceof Promise) {\n        before\n          .then((processedFile) => {\n            const fileType = Object.prototype.toString.call(processedFile)\n            if (fileType === '[object File]' || fileType === '[object Blob]') {\n              if (fileType === '[object Blob]') {\n                processedFile = new File([processedFile], rawFile.name, {\n                  type: rawFile.type,\n                })\n              }\n              for (const p in rawFile) {\n                if (hasOwn(rawFile, p)) {\n                  processedFile[p] = rawFile[p]\n                }\n              }\n              post(processedFile)\n            } else {\n              post(rawFile)\n            }\n          })\n          .catch(() => {\n            props.onRemove(null, rawFile)\n          })\n      } else if (before !== false) {\n        post(rawFile)\n      } else {\n        props.onRemove(null, rawFile)\n      }\n    }\n    function abort(file) {\n      const _reqs = reqs.value\n      if (file) {\n        let uid = file\n        if (file.uid) uid = file.uid\n        if (_reqs[uid]) {\n          ;(_reqs[uid] as XMLHttpRequest).abort()\n        }\n      } else {\n        Object.keys(_reqs).forEach((uid) => {\n          if (_reqs[uid]) (_reqs[uid] as XMLHttpRequest).abort()\n          delete _reqs[uid]\n        })\n      }\n    }\n\n    function post(rawFile: ElFile) {\n      const { uid } = rawFile\n      const options = {\n        headers: props.headers,\n        withCredentials: props.withCredentials,\n        file: rawFile,\n        data: props.data,\n        method: props.method,\n        filename: props.name,\n        action: props.action,\n        onProgress: (e) => {\n          props.onProgress(e, rawFile)\n        },\n        onSuccess: (res) => {\n          props.onSuccess(res, rawFile)\n          delete reqs.value[uid]\n        },\n        onError: (err) => {\n          props.onError(err, rawFile)\n          delete reqs.value[uid]\n        },\n      }\n      const req = props.httpRequest(options)\n      reqs.value[uid] = req\n      if (req instanceof Promise) {\n        req.then(options.onSuccess, options.onError)\n      }\n    }\n\n    function handleChange(e: DragEvent) {\n      const files = (e.target as HTMLInputElement).files\n      if (!files) return\n      uploadFiles(files)\n    }\n\n    function handleClick() {\n      if (!props.disabled) {\n        inputRef.value.value = null\n        inputRef.value.click()\n      }\n    }\n\n    function handleKeydown() {\n      handleClick()\n    }\n\n    return {\n      ns,\n      reqs,\n      mouseover,\n      inputRef,\n      abort,\n      post,\n      handleChange,\n      handleClick,\n      handleKeydown,\n      upload,\n      uploadFiles,\n    }\n  },\n})\n</script>\n"],"names":["ajax"],"mappings":"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"}