{"version":3,"file":"useUpload.mjs","sources":["../../../src/upload/hooks/useUpload.ts"],"sourcesContent":["import { computed, h, ref, shallowRef, toRefs, ComputedRef, Ref, ShallowRef } from 'vue';\nimport { isFunction, isString } from 'lodash-es';\nimport { SizeLimitObj, TdUploadProps, UploadChangeContext, UploadFile, UploadRemoveContext } from '../type';\nimport useVModel from '../../hooks/useVModel';\nimport {\n  formatToUploadFile,\n  getDisplayFiles,\n  validateFile,\n  upload,\n  getFilesAndErrors,\n} from '../../_common/js/upload/main';\nimport {\n  FileChangeReturn,\n  InnerProgressContext,\n  OnResponseErrorContext,\n  SuccessContext,\n} from '../../_common/js/upload/types';\nimport { getFileList, getFileUrlByFileRaw } from '../../_common/js/upload/utils';\n\n// @ts-ignore\nexport type ValidateParams = Parameters<TdUploadProps['onValidate']>[0];\n\nexport default function useUpload(props: TdUploadProps): {\n  toUploadFiles: ShallowRef<UploadFile[]>;\n  uploadValue: Ref<UploadFile[]>;\n  displayFiles: ComputedRef<UploadFile[]>;\n  sizeOverLimitMessage: Ref<string>;\n  uploading: Ref<boolean>;\n  inputRef: Ref<HTMLInputElement>;\n  disabled: Ref<boolean>;\n  xhrReq: ShallowRef<{ files: UploadFile[]; xhrReq: XMLHttpRequest }[]>;\n  uploadFilePercent: (params: { file: UploadFile; percent: number }) => void;\n  uploadFiles: (toFiles?: UploadFile[]) => void;\n  onFileChange: (files: File[]) => void;\n  onNormalFileChange: (e: Event) => void;\n  onInnerRemove: (context: UploadRemoveContext) => void;\n  cancelUpload: (context?: { file?: UploadFile; e?: MouseEvent }) => void;\n} {\n  const inputRef = ref<HTMLInputElement>();\n  const { disabled, autoUpload, isBatchUpload, multiple, files, modelValue, defaultFiles } = toRefs(props);\n  const [uploadValue, setUploadValue] = useVModel(files, modelValue, defaultFiles.value, props.onChange, 'files');\n  const xhrReq = shallowRef<{ files: UploadFile[]; xhrReq: XMLHttpRequest }[]>([]);\n  const toUploadFiles = shallowRef<UploadFile[]>([]);\n  const sizeOverLimitMessage = ref('');\n\n  const uploading = ref(false);\n\n  // 文件列表显示的内容（自动上传和非自动上传有所不同）\n  const displayFiles: ComputedRef<UploadFile[]> = computed(() => {\n    return getDisplayFiles({\n      multiple: multiple?.value || false,\n      toUploadFiles: toUploadFiles.value,\n      uploadValue: uploadValue.value as UploadFile[],\n      autoUpload: autoUpload?.value || false,\n      isBatchUpload: isBatchUpload?.value || false,\n    });\n  });\n\n  const uploadFilePercent = (params: { file: UploadFile; percent: number }) => {\n    const { file, percent } = params;\n    const index = toUploadFiles.value.findIndex((item) => file.raw === item.raw);\n    toUploadFiles.value[index] = { ...toUploadFiles.value[index], percent };\n  };\n\n  const updateFilesProgress = () => {\n    if (props.autoUpload) {\n      toUploadFiles.value = [...toUploadFiles.value];\n    }\n  };\n\n  const onResponseError = (p: OnResponseErrorContext) => {\n    if (!p || !p.files || !p.files[0]) return;\n    const { response, event, files } = p;\n    updateFilesProgress();\n    props.onOneFileFail?.({\n      e: event,\n      file: files?.[0],\n      currentFiles: files,\n      failedFiles: files,\n      response,\n    });\n    // 单选或多文件替换，需要清空上一次上传成功的文件\n    if (!props.multiple || props.isBatchUpload) {\n      setUploadValue([], {\n        trigger: 'progress-fail',\n        e: p.event,\n        file: p.files[0],\n      });\n    }\n  };\n\n  // 多文件上传场景，单个文件进度\n  const onResponseProgress = (p: InnerProgressContext) => {\n    updateFilesProgress();\n    props.onProgress?.({\n      e: p.event,\n      file: p.file,\n      currentFiles: p.files as UploadFile[],\n      percent: p.percent,\n      type: p.type,\n      XMLHttpRequest: p.XMLHttpRequest,\n    });\n  };\n\n  // 多文件上传场景，单个文件上传成功后\n  const onResponseSuccess = (p: SuccessContext) => {\n    // 只有多个上传请求同时触发时才需 onOneFileSuccess\n    if (props.multiple && !props.uploadAllFilesInOneRequest) {\n      updateFilesProgress();\n      props.onOneFileSuccess?.({\n        e: p.event,\n        file: (p.files as UploadFile[])[0],\n        response: p.response,\n      });\n    }\n  };\n\n  // 处理正则表达式\n  const t = function <T>(pattern: T, ...args: any[]) {\n    const [data] = args;\n    if (isString(pattern)) {\n      if (!data) return pattern;\n      const regular = /\\{\\s*([\\w-]+)\\s*\\}/g;\n      const translated = pattern.replace(regular, (match, key) => {\n        if (data) {\n          return String(data[key]);\n        }\n        return '';\n      });\n      return translated;\n    }\n    if (isFunction(pattern)) {\n      // 重要：组件的渲染必须存在参数 h，不能移除\n      if (!args.length) return pattern(h);\n      return pattern(...args);\n    }\n    return '';\n  };\n\n  function getSizeLimitError(sizeLimitObj: SizeLimitObj): string {\n    const limit = sizeLimitObj;\n    return limit.message\n      ? t(limit.message, { sizeLimit: limit.size })\n      : `${t('', { sizeLimit: limit.size })} ${limit.unit}`;\n  }\n\n  const handleNotAutoUpload = (toFiles: UploadFile[]) => {\n    const tmpFiles =\n      props.multiple && !isBatchUpload?.value ? (uploadValue?.value as UploadFile[]).concat(toFiles) : toFiles;\n    if (!tmpFiles.length) return;\n    const list = tmpFiles.map(\n      (file) =>\n        new Promise((resolve) => {\n          getFileUrlByFileRaw(file.raw as File).then((url) => {\n            resolve({ ...file, url: file.url || url });\n          });\n        }),\n    );\n    Promise.all(list).then((files) => {\n      setUploadValue(files as UploadFile[], {\n        trigger: 'add',\n        index: (uploadValue.value as UploadFile[]).length,\n        file: toFiles[0],\n        files: toFiles,\n      });\n    });\n    toUploadFiles.value = [];\n  };\n\n  const onFileChange = (files: File[]) => {\n    if (disabled?.value) return;\n    const params = { currentSelectedFiles: formatToUploadFile([...files], props.format) };\n    props.onSelectChange?.([...files], params);\n    validateFile({\n      uploadValue: uploadValue.value as UploadFile[],\n      files: [...files],\n      allowUploadDuplicateFile: props.allowUploadDuplicateFile,\n      capture: props.capture,\n      max: props.max,\n      sizeLimit: props.sizeLimit,\n      isBatchUpload: isBatchUpload?.value,\n      autoUpload: autoUpload?.value,\n      format: props.format,\n      beforeUpload: props.beforeUpload,\n      beforeAllFilesUpload: props.beforeAllFilesUpload,\n    }).then((args) => {\n      // 自定义全文件校验不通过\n      if (args.validateResult?.type === 'BEFORE_ALL_FILES_UPLOAD') {\n        const params: ValidateParams = { type: 'BEFORE_ALL_FILES_UPLOAD', files: args.files as UploadFile[] };\n        props.onValidate?.(params);\n        return;\n      }\n      // 文件数量校验不通过\n      if (args.lengthOverLimit) {\n        const params: ValidateParams = { type: 'FILES_OVER_LENGTH_LIMIT', files: args.files as UploadFile[] };\n        props.onValidate?.(params);\n        if (!(args.files as UploadFile[]).length) return;\n      }\n      // 过滤相同的文件名\n      if (args.hasSameNameFile) {\n        const params: ValidateParams = { type: 'FILTER_FILE_SAME_NAME', files: args.files as UploadFile[] };\n        props.onValidate?.(params);\n      }\n      // 文件大小校验结果处理（已过滤超出限制的文件）\n      if (args.fileValidateList instanceof Array) {\n        const { sizeLimitErrors, beforeUploadErrorFiles, toFiles } = getFilesAndErrors(\n          args.fileValidateList,\n          // @ts-ignore\n          getSizeLimitError,\n        );\n        const tmpWaitingFiles = autoUpload?.value ? toFiles : toUploadFiles.value.concat(toFiles);\n        toUploadFiles.value = tmpWaitingFiles;\n        props.onWaitingUploadFilesChange?.({ files: tmpWaitingFiles, trigger: 'validate' });\n        // 文件大小处理\n        if (sizeLimitErrors[0]) {\n          sizeOverLimitMessage.value = sizeLimitErrors[0]?.file?.response?.error;\n          props.onValidate?.({\n            type: 'FILE_OVER_SIZE_LIMIT',\n            files: sizeLimitErrors.map((t) => t.file) as FileChangeReturn[],\n          });\n        } else {\n          sizeOverLimitMessage.value = '';\n          // 自定义方法 beforeUpload 拦截的文件\n          if (beforeUploadErrorFiles.length) {\n            const params: ValidateParams = { type: 'CUSTOM_BEFORE_UPLOAD', files: beforeUploadErrorFiles };\n            props.onValidate?.(params);\n          }\n        }\n        // 如果是自动上传\n        if (autoUpload?.value) {\n          uploadFiles(tmpWaitingFiles);\n        } else {\n          handleNotAutoUpload(tmpWaitingFiles);\n        }\n      }\n    });\n\n    // 清空 <input type=\"file\"> 元素的文件，避免出现重复文件无法选择的情况\n    if (inputRef.value) {\n      inputRef.value.value = '';\n    }\n  };\n\n  const onNormalFileChange = (e: Event) => {\n    const fileList = getFileList((e.target as HTMLInputElement).files as FileList);\n    onFileChange?.(fileList);\n  };\n\n  /**\n   * 上传文件。对外暴露方法，修改时需谨慎\n   * @param toFiles 本地上传的文件列表\n   */\n  function uploadFiles(toFiles?: UploadFile[]) {\n    const notUploadedFiles = (uploadValue.value as UploadFile[]).filter((t) => t.status !== 'success');\n    const files = autoUpload?.value ? toFiles || toUploadFiles.value : notUploadedFiles;\n    if (!files || !files.length) return;\n    uploading.value = true;\n    xhrReq.value = [];\n    upload({\n      action: props.action,\n      headers: props.headers,\n      method: props.method,\n      name: props.name,\n      withCredentials: props.withCredentials,\n      uploadedFiles: uploadValue.value as UploadFile[],\n      toUploadFiles: files,\n      multiple: props.multiple,\n      isBatchUpload: isBatchUpload?.value,\n      autoUpload: props.autoUpload,\n      uploadAllFilesInOneRequest: props.uploadAllFilesInOneRequest,\n      useMockProgress: props.useMockProgress,\n      data: props.data,\n      mockProgressDuration: props.mockProgressDuration,\n      requestMethod: props.requestMethod,\n      formatRequest: props.formatRequest,\n      formatResponse: props.formatResponse,\n      onResponseProgress,\n      onResponseSuccess,\n      onResponseError,\n      setXhrObject: (xhr) => {\n        if (xhr.files[0]?.raw && xhrReq.value.find((item) => item.files[0]?.raw === xhr.files[0].raw)) return;\n        xhrReq.value = xhrReq.value.concat(xhr);\n      },\n    }).then(\n      // 多文件场景时，全量文件完成后\n      ({ status, data, list, failedFiles }) => {\n        uploading.value = false;\n        if (status === 'success') {\n          if (props.autoUpload) {\n            setUploadValue([...(data?.files as UploadFile[])], {\n              trigger: 'add',\n              file: (data?.files as UploadFile[])[0],\n            });\n          }\n          xhrReq.value = [];\n          props.onSuccess?.({\n            fileList: data?.files,\n            currentFiles: files,\n            file: files[0],\n            // 只有全部请求完成后，才会存在该字段\n            // @ts-ignore\n            results: list?.map((t) => t.data),\n            // 单文件单请求有一个 response，多文件多请求有多个 response\n            response: data?.response || list?.map((t) => t.data?.response),\n            XMLHttpRequest: data?.XMLHttpRequest,\n          });\n        } else if (failedFiles?.[0]) {\n          props.onFail?.({\n            e: data?.event,\n            file: failedFiles[0],\n            failedFiles,\n            currentFiles: files,\n            response: data?.response,\n            XMLHttpRequest: data?.XMLHttpRequest,\n          });\n        }\n\n        // 非自动上传，文件都在 uploadValue，不涉及 toUploadFiles\n        if (autoUpload?.value) {\n          toUploadFiles.value = failedFiles as UploadFile[];\n          props.onWaitingUploadFilesChange?.({ files: failedFiles as UploadFile[], trigger: 'uploaded' });\n        }\n      },\n    );\n  }\n\n  function onInnerRemove(p: UploadRemoveContext) {\n    sizeOverLimitMessage.value = '';\n    p.e.stopPropagation?.();\n    const changePrams: UploadChangeContext = {\n      e: p.e,\n      trigger: 'remove',\n      index: p.index,\n      file: p.file,\n    };\n    // remove all files for batchUpload\n    if (props.isBatchUpload || !props.multiple) {\n      toUploadFiles.value = [];\n      props.onWaitingUploadFilesChange?.({ files: [], trigger: 'remove' });\n      setUploadValue([], changePrams);\n    } else if (!props.autoUpload) {\n      (uploadValue.value as UploadFile[]).splice(p.index, 1);\n      setUploadValue([...(uploadValue.value as UploadFile[])], changePrams);\n    } else {\n      // autoUpload 场景下， p.index < uploadValue.length 表示移除已经上传成功的文件；反之表示移除待上传列表文件\n      // eslint-disable-next-line\n      if (p.index < (uploadValue.value as UploadFile[]).length) {\n        (uploadValue.value as UploadFile[]).splice(p.index, 1);\n        setUploadValue([...(uploadValue.value as UploadFile[])], changePrams);\n      } else {\n        // @ts-ignore\n        toUploadFiles.value.splice(p.index - uploadValue.value.length, 1);\n        toUploadFiles.value = [...toUploadFiles.value];\n        props.onWaitingUploadFilesChange?.({ files: [...toUploadFiles.value], trigger: 'remove' });\n      }\n    }\n    props.onRemove?.(p);\n  }\n\n  const cancelUpload = (context?: { file?: UploadFile; e?: MouseEvent }) => {\n    xhrReq.value?.forEach((item) => {\n      item.xhrReq?.abort();\n    });\n    uploading.value = false;\n\n    if (autoUpload?.value) {\n      toUploadFiles.value = toUploadFiles.value.map((item) => ({ ...item, status: 'waiting' }));\n    } else {\n      setUploadValue(\n        (uploadValue.value as UploadFile[]).map((item) => {\n          if (item.status !== 'success') {\n            return { ...item, status: 'waiting' };\n          }\n          return item;\n        }),\n        { trigger: 'abort' },\n      );\n    }\n\n    if (context?.file && !autoUpload?.value) {\n      onInnerRemove?.({ file: context.file, e: context.e as MouseEvent, index: 0 });\n    }\n\n    props.onCancelUpload?.();\n  };\n\n  return {\n    toUploadFiles,\n    uploadValue,\n    displayFiles,\n    sizeOverLimitMessage,\n    uploading,\n    inputRef,\n    disabled,\n    xhrReq,\n    uploadFilePercent,\n    uploadFiles,\n    onFileChange,\n    onNormalFileChange,\n    onInnerRemove,\n    cancelUpload,\n  };\n}\n"],"names":["useUpload","props","inputRef","ref","_toRefs","toRefs","disabled","autoUpload","isBatchUpload","multiple","files","modelValue","defaultFiles","_useVModel","useVModel","value","onChange","_useVModel2","_slicedToArray","uploadValue","setUploadValue","xhrReq","shallowRef","toUploadFiles","sizeOverLimitMessage","uploading","displayFiles","computed","getDisplayFiles","uploadFilePercent","params","file","percent","index","findIndex","item","raw","_objectSpread","updateFilesProgress","_toConsumableArray","onResponseError","p","_props$onOneFileFail","response","event","onOneFileFail","call","e","currentFiles","failedFiles","trigger","onResponseProgress","_props$onProgress","onProgress","type","XMLHttpRequest","onResponseSuccess","uploadAllFilesInOneRequest","_props$onOneFileSucce","onOneFileSuccess","t","pattern","_len","arguments","length","args","Array","_key","data","isString","regular","translated","replace","match","key","String","isFunction","h","apply","getSizeLimitError","sizeLimitObj","limit","message","sizeLimit","size","unit","handleNotAutoUpload","toFiles","tmpFiles","concat","list","map","Promise","resolve","getFileUrlByFileRaw","then","url","all","onFileChange","_props$onSelectChange","currentSelectedFiles","formatToUploadFile","format","onSelectChange","validateFile","allowUploadDuplicateFile","capture","max","beforeUpload","beforeAllFilesUpload","_args$validateResult","validateResult","_props$onValidate","onValidate","lengthOverLimit","_props$onValidate2","hasSameNameFile","_props$onValidate3","fileValidateList","_props$onWaitingUploa","_getFilesAndErrors","getFilesAndErrors","sizeLimitErrors","beforeUploadErrorFiles","tmpWaitingFiles","onWaitingUploadFilesChange","_sizeLimitErrors$","_props$onValidate4","error","_props$onValidate5","uploadFiles","onNormalFileChange","fileList","getFileList","target","notUploadedFiles","filter","status","upload","action","headers","method","name","withCredentials","uploadedFiles","useMockProgress","mockProgressDuration","requestMethod","formatRequest","formatResponse","setXhrObject","xhr","_xhr$files$","find","_item$files$","_ref","_props$onSuccess","onSuccess","results","_t2$data","_props$onFail","onFail","_props$onWaitingUploa2","onInnerRemove","_p$e$stopPropagation","_p$e","_props$onRemove","stopPropagation","changePrams","_props$onWaitingUploa3","splice","_props$onWaitingUploa4","onRemove","cancelUpload","context","_xhrReq$value","_props$onCancelUpload","forEach","_item$xhrReq","abort","onCancelUpload"],"mappings":"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"}