{"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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"}