UNPKG

tdesign-mobile-vue

Version:
1 lines 12.6 kB
{"version":3,"file":"upload.mjs","sources":["../../src/upload/upload.tsx"],"sourcesContent":["import { defineComponent, ref, computed } from 'vue';\nimport type { InputHTMLAttributes } from 'vue';\nimport { AddIcon, LoadingIcon, CloseIcon, CloseCircleIcon } from 'tdesign-icons-vue-next';\nimport { isBoolean } from 'lodash-es';\nimport TImage from '../image';\nimport TImageViewer from '../image-viewer';\nimport { TdUploadProps, UploadFile } from './type';\nimport UploadProps from './props';\nimport config from '../config';\nimport useUpload from './hooks/useUpload';\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../hooks/useClass';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-upload`,\n components: {\n TImage,\n },\n props: UploadProps,\n emits: [\n 'update:files',\n 'update:modelValue',\n 'change',\n 'fail',\n 'preview',\n 'progress',\n 'remove',\n 'success',\n 'select-change',\n 'validate',\n 'click-upload',\n ],\n setup(props, { expose }) {\n const uploadClass = usePrefixClass('upload');\n const { globalConfig } = useConfig('upload');\n\n const {\n disabled,\n displayFiles,\n uploading,\n inputRef,\n uploadFilePercent,\n uploadFiles,\n onNormalFileChange,\n onInnerRemove,\n cancelUpload,\n } = useUpload(props);\n\n const renderTNodeJSX = useTNodeJSX();\n\n const showViewer = ref(false);\n const initialIndex = ref(0);\n\n const handlePreview = (e: MouseEvent, file: UploadFile, index: number) => {\n initialIndex.value = index;\n showViewer.value = props.preview;\n props.onPreview?.({\n e,\n file,\n index,\n });\n };\n\n const triggerUpload = (e: MouseEvent) => {\n const input = inputRef.value as HTMLInputElement;\n if (disabled?.value) return;\n input.click();\n props.onClickUpload?.({\n e,\n });\n };\n\n const previewImgs = computed(() => {\n return displayFiles.value.map((item) => item.url as string);\n });\n\n const handleImageClose = ({ visible }: { visible: boolean }) => {\n showViewer.value = visible;\n };\n\n const renderStatus = (file: UploadFile) => {\n if (file.status === 'fail' || file.status === 'progress') {\n return (\n <div class={`${uploadClass.value}__progress-mask`}>\n {file.status === 'progress' ? (\n <>\n <LoadingIcon class={`${uploadClass.value}__progress-loading`} size=\"24\" />\n <div class={`${uploadClass.value}__progress-text`}>\n {file.percent ? `${file.percent}%` : globalConfig.value.progress.uploadingText}\n </div>\n </>\n ) : (\n <CloseCircleIcon size=\"24\" />\n )}\n {file.status === 'fail' && (\n <div class={`${uploadClass.value}__progress-text`}>{globalConfig.value.progress.failText}</div>\n )}\n </div>\n );\n }\n };\n\n const renderAddContent = () => {\n if (!props.addBtn) return null;\n\n if (props.max === 0 || (props.max > 0 && displayFiles.value?.length < props.max)) {\n const addBtnNode = renderTNodeJSX('addBtn', <AddIcon />);\n const addContentNode = renderTNodeJSX('addContent');\n return (\n <div class={`${uploadClass.value}__item ${uploadClass.value}__item--add`} onClick={triggerUpload}>\n {<div class={`${uploadClass.value}__add-icon`}>{addContentNode || addBtnNode}</div>}\n </div>\n );\n }\n return null;\n };\n expose({\n upload: inputRef.value,\n uploading,\n triggerUpload,\n uploadFiles,\n cancelUpload,\n uploadFilePercent,\n });\n return () => {\n return (\n <div class={`${uploadClass.value}`}>\n {displayFiles.value.map((file, index) => (\n <div key={index} class={`${uploadClass.value}__item`}>\n {file.url && (\n <t-image\n class={`${uploadClass.value}__image`}\n shape=\"round\"\n {...(props.imageProps as TdUploadProps['imageProps'])}\n src={file.url}\n onClick={(e: MouseEvent) => handlePreview(e, file, index)}\n />\n )}\n {renderStatus(file)}\n {(isBoolean(file.removeBtn) ? file.removeBtn : props.removeBtn) && (\n <CloseIcon\n class={`${uploadClass.value}__delete-btn`}\n onClick={({ e }: any) => onInnerRemove({ e, file, index })}\n />\n )}\n </div>\n ))}\n {renderAddContent()}\n <input\n ref={inputRef}\n value={props.files}\n type=\"file\"\n multiple={props.multiple}\n hidden\n {...(props.capture ? { capture: props.capture as InputHTMLAttributes['capture'] } : {})}\n accept={props.accept}\n onChange={onNormalFileChange}\n />\n <TImageViewer\n visible={showViewer.value}\n images={previewImgs.value}\n index={initialIndex.value}\n onClose={handleImageClose}\n />\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","components","TImage","props","UploadProps","emits","setup","_ref","expose","uploadClass","usePrefixClass","_useConfig","useConfig","globalConfig","_useUpload","useUpload","disabled","displayFiles","uploading","inputRef","uploadFilePercent","uploadFiles","onNormalFileChange","onInnerRemove","cancelUpload","renderTNodeJSX","useTNodeJSX","showViewer","ref","initialIndex","handlePreview","e","file","index","_props$onPreview","value","preview","onPreview","call","triggerUpload","_props$onClickUpload","input","click","onClickUpload","previewImgs","computed","map","item","url","handleImageClose","_ref2","visible","renderStatus","status","_createVNode","concat","_Fragment","LoadingIcon","percent","progress","uploadingText","failText","renderAddContent","_displayFiles$value","addBtn","max","length","addBtnNode","AddIcon","addContentNode","upload","imageProps","onClick","isBoolean","removeBtn","CloseIcon","_ref3","_mergeProps","files","multiple","capture","accept","TImageViewer"],"mappings":"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"}