element-plus
Version:
A Component Library for Vue 3
1 lines • 10 kB
Source Map (JSON)
{"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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"}