{"version":3,"file":"useHandlers.mjs","sources":["../../../../../packages/components/upload/src/useHandlers.ts"],"sourcesContent":["import { ref, watch } from 'vue'\nimport { NOOP } from '@vue/shared'\nimport { cloneDeep } from 'lodash-unified'\n\n// Inline types\nimport type {\n  ListType,\n  UploadFile,\n  UploadStatus,\n  ElFile,\n  ElUploadProgressEvent,\n  IUseHandlersProps,\n} from './upload.type'\ntype UploadRef = {\n  abort: (file: UploadFile) => void\n  upload: (file: ElFile) => void\n}\n// helpers\nfunction getFile(rawFile: ElFile, uploadFiles: UploadFile[]) {\n  return uploadFiles.find((file) => file.uid === rawFile.uid)\n}\n\nfunction genUid(seed: number) {\n  return Date.now() + seed\n}\n\nexport default (props: IUseHandlersProps) => {\n  const uploadFiles = ref<UploadFile[]>([])\n  const uploadRef = ref<UploadRef>(null)\n\n  let tempIndex = 1\n\n  function abort(file: UploadFile) {\n    uploadRef.value.abort(file)\n  }\n\n  function clearFiles(\n    status: UploadStatus[] = ['ready', 'uploading', 'success', 'fail']\n  ) {\n    uploadFiles.value = uploadFiles.value.filter((row) => {\n      return !status.includes(row.status)\n    })\n  }\n\n  function handleError(err: Error, rawFile: ElFile) {\n    const file = getFile(rawFile, uploadFiles.value)\n    file.status = 'fail'\n    uploadFiles.value.splice(uploadFiles.value.indexOf(file), 1)\n    props.onError(err, file, uploadFiles.value)\n    props.onChange(file, uploadFiles.value)\n  }\n\n  function handleProgress(ev: ElUploadProgressEvent, rawFile: ElFile) {\n    const file = getFile(rawFile, uploadFiles.value)\n    props.onProgress(ev, file, uploadFiles.value)\n    file.status = 'uploading'\n    file.percentage = ev.percent || 0\n  }\n\n  function handleSuccess(res: any, rawFile: ElFile) {\n    const file = getFile(rawFile, uploadFiles.value)\n    if (file) {\n      file.status = 'success'\n      file.response = res\n      props.onSuccess(res, file, uploadFiles.value)\n      props.onChange(file, uploadFiles.value)\n    }\n  }\n\n  function handleStart(rawFile: ElFile) {\n    const uid = genUid(tempIndex++)\n    rawFile.uid = uid\n    const file: UploadFile = {\n      name: rawFile.name,\n      percentage: 0,\n      status: 'ready',\n      size: rawFile.size,\n      raw: rawFile,\n      uid,\n    }\n    if (props.listType === 'picture-card' || props.listType === 'picture') {\n      try {\n        file.url = URL.createObjectURL(rawFile)\n      } catch (err) {\n        console.error('[Element Error][Upload]', err)\n        props.onError(err, file, uploadFiles.value)\n      }\n    }\n    uploadFiles.value.push(file)\n    props.onChange(file, uploadFiles.value)\n  }\n\n  function handleRemove(file: UploadFile, raw: ElFile) {\n    if (raw) {\n      file = getFile(raw, uploadFiles.value)\n    }\n    const revokeObjectURL = () => {\n      if (file.url && file.url.indexOf('blob:') === 0) {\n        URL.revokeObjectURL(file.url)\n      }\n    }\n    const doRemove = () => {\n      abort(file)\n      const fileList = uploadFiles.value\n      fileList.splice(fileList.indexOf(file), 1)\n      props.onRemove(file, fileList)\n      revokeObjectURL()\n    }\n    if (!props.beforeRemove) {\n      doRemove()\n    } else if (typeof props.beforeRemove === 'function') {\n      const before = props.beforeRemove(file, uploadFiles.value)\n      if (before instanceof Promise) {\n        before\n          .then(() => {\n            doRemove()\n          })\n          .catch(NOOP)\n      } else if (before !== false) {\n        doRemove()\n      }\n    }\n  }\n\n  function submit() {\n    uploadFiles.value\n      .filter((file) => file.status === 'ready')\n      .forEach((file) => {\n        uploadRef.value.upload(file.raw)\n      })\n  }\n\n  watch(\n    () => props.listType,\n    (val: ListType) => {\n      if (val === 'picture-card' || val === 'picture') {\n        uploadFiles.value = uploadFiles.value.map((file) => {\n          if (!file.url && file.raw) {\n            try {\n              file.url = URL.createObjectURL(file.raw)\n            } catch (err) {\n              props.onError(err, file, uploadFiles.value)\n            }\n          }\n          return file\n        })\n      }\n    }\n  )\n\n  watch(\n    () => props.fileList,\n    (fileList: UploadFile[]) => {\n      uploadFiles.value = fileList.map((file) => {\n        const cloneFile = cloneDeep(file)\n        return {\n          ...cloneFile,\n          uid: file.uid || genUid(tempIndex++),\n          status: file.status || 'success',\n        }\n      })\n    },\n    {\n      immediate: true,\n      deep: true,\n    }\n  )\n\n  return {\n    abort,\n    clearFiles,\n    handleError,\n    handleProgress,\n    handleStart,\n    handleSuccess,\n    handleRemove,\n    submit,\n    uploadFiles,\n    uploadRef,\n  }\n}\n"],"names":[],"mappings":"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"}