UNPKG

tdesign-mobile-vue

Version:
1 lines 37.8 kB
{"version":3,"file":"useUpload.mjs","sources":["../../../src/upload/hooks/useUpload.ts"],"sourcesContent":["import { computed, h, ref, shallowRef, toRefs, onBeforeUnmount, 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, IMAGE_REGEXP } 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 isImageFile: (file: UploadFile) => boolean;\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 const objectUrls: string[] = [];\n\n const isImageFile = (file: UploadFile): boolean => {\n const fileType = file.raw?.type || file.type || '';\n const url = file.url || '';\n return /^image\\//.test(fileType) || IMAGE_REGEXP.test(fileType) || IMAGE_REGEXP.test(url);\n };\n\n const createObjectUrl = (file: UploadFile): UploadFile => {\n if (file.raw && isImageFile(file) && !file.url) {\n const objectUrl = URL.createObjectURL(file.raw);\n objectUrls.push(objectUrl);\n return { ...file, url: objectUrl };\n }\n return file;\n };\n\n onBeforeUnmount(() => {\n objectUrls.forEach((url) => URL.revokeObjectURL(url));\n });\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 operationUploadFiles = autoUpload?.value ? toUploadFiles : (uploadValue as Ref<UploadFile[]>);\n const index = operationUploadFiles.value.findIndex((item) => file.raw === item.raw);\n if (index < 0) return;\n operationUploadFiles.value[index] = { ...operationUploadFiles.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 // 使用 URL.createObjectURL 为图片文件生成即时预览 URL\n const filesWithUrl = tmpFiles.map((file) => {\n if (file.url) return file;\n return createObjectUrl(file);\n });\n setUploadValue(filesWithUrl as UploadFile[], {\n trigger: 'add',\n index: (uploadValue.value as UploadFile[]).length,\n file: toFiles[0],\n files: toFiles,\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.multiple ? props.max : 0,\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 // 自动上传模式下,为图片文件生成 objectUrl 以实现选择后立即回显预览\n const filesWithPreview = autoUpload?.value ? toFiles.map(createObjectUrl) : toFiles;\n const tmpWaitingFiles = autoUpload?.value ? filesWithPreview : toUploadFiles.value.concat(filesWithPreview);\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 isImageFile,\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","objectUrls","isImageFile","file","_file$raw","fileType","raw","type","url","test","IMAGE_REGEXP","createObjectUrl","objectUrl","URL","createObjectURL","push","_objectSpread","onBeforeUnmount","forEach","revokeObjectURL","displayFiles","computed","getDisplayFiles","uploadFilePercent","params","percent","operationUploadFiles","index","findIndex","item","updateFilesProgress","_toConsumableArray","onResponseError","p","_props$onOneFileFail","response","event","onOneFileFail","call","e","currentFiles","failedFiles","trigger","onResponseProgress","_props$onProgress","onProgress","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","filesWithUrl","map","onFileChange","_props$onSelectChange","currentSelectedFiles","formatToUploadFile","format","onSelectChange","validateFile","allowUploadDuplicateFile","capture","max","beforeUpload","beforeAllFilesUpload","then","_args$validateResult","validateResult","_props$onValidate","onValidate","lengthOverLimit","_props$onValidate2","hasSameNameFile","_props$onValidate3","fileValidateList","_props$onWaitingUploa","_getFilesAndErrors","getFilesAndErrors","sizeLimitErrors","beforeUploadErrorFiles","filesWithPreview","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","list","_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","_item$xhrReq","abort","onCancelUpload"],"mappings":"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"}