xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 10.9 kB
Source Map (JSON)
{"version":3,"file":"upload.mjs","sources":["../../src/upload/upload.tsx"],"sourcesContent":["import { computed, defineComponent } from 'vue';\nimport props from './props';\nimport NormalFile from './themes/normal-file';\nimport DraggerFile from './themes/dragger-file';\nimport ImageCard from './themes/image-card';\nimport MultipleFlowList from './themes/multiple-flow-list';\nimport useUpload from './hooks/useUpload';\nimport Button from '../button';\nimport { CommonDisplayFileProps, UploadProps } from './interface';\nimport { UploadDragEvents } from './hooks/useDrag';\nimport CustomFile from './themes/custom-file';\nimport { useContent, useTNodeJSX } from '../hooks/tnode';\nimport { useFormDisabled } from '../form/hooks';\n\nexport default defineComponent({\n name: 'XUpload',\n\n props,\n\n setup(props: UploadProps, { slots, expose }) {\n const renderContent = useContent();\n const renderTNodeJSX = useTNodeJSX();\n const {\n locale,\n classPrefix,\n triggerUploadText,\n toUploadFiles,\n displayFiles,\n uploadValue,\n sizeOverLimitMessage,\n uploading,\n tipsClasses,\n errorClasses,\n placeholderClass,\n inputRef,\n onInnerRemove,\n uploadFiles,\n onNormalFileChange,\n onDragFileChange,\n onPasteFileChange,\n triggerUpload,\n cancelUpload,\n uploadFilePercent,\n } = useUpload(props);\n const disabled = useFormDisabled();\n\n expose({\n upload: inputRef.value,\n uploading,\n triggerUpload,\n uploadFiles,\n cancelUpload,\n uploadFilePercent,\n });\n\n const renderTrigger = () => {\n const getDefaultTrigger = () => {\n if (props.theme === 'file-input') {\n return (\n <Button disabled={disabled.value} variant=\"outline\" {...props.triggerButtonProps}>\n {triggerUploadText.value}\n </Button>\n );\n }\n return (\n <Button disabled={disabled.value} variant=\"outline\" icon={() => <icon-ri-upload-2-line />} {...props.triggerButtonProps}>\n {triggerUploadText.value}\n </Button>\n );\n };\n return (\n renderContent('default', 'trigger', {\n params: { dragActive: false, files: uploadValue.value },\n }) || getDefaultTrigger()\n );\n };\n\n const commonDisplayFileProps = computed<CommonDisplayFileProps>(() => ({\n accept: props.accept,\n files: uploadValue.value,\n toUploadFiles: toUploadFiles.value,\n displayFiles: displayFiles.value,\n theme: props.theme,\n placeholder: props.placeholder,\n disabled: disabled.value,\n tips: props.tips,\n status: props.status,\n sizeOverLimitMessage: sizeOverLimitMessage.value,\n uploading: uploading.value,\n classPrefix: classPrefix.value,\n tipsClasses,\n errorClasses,\n placeholderClass,\n locale: locale.value,\n autoUpload: props.autoUpload,\n abridgeName: props.abridgeName,\n showUploadProgress: props.showUploadProgress,\n fileListDisplay: props.fileListDisplay,\n onRemove: onInnerRemove,\n uploadPastedFiles: props.uploadPastedFiles,\n onPasteFileChange: onPasteFileChange,\n }));\n\n const dragProps: UploadDragEvents = {\n onDragFileChange,\n onDragenter: props.onDragenter,\n onDragleave: props.onDragleave,\n onDrop: props.onDrop,\n };\n\n const getNormalFileNode = () => (\n <NormalFile\n {...commonDisplayFileProps.value}\n multiple={props.multiple}\n v-slots={{\n fileListDisplay: slots.fileListDisplay,\n 'file-list-display': slots['file-list-display'],\n }}\n >\n <div class={`${classPrefix.value}-upload__trigger`} onClick={triggerUpload}>\n {renderTrigger()}\n </div>\n </NormalFile>\n );\n\n const getSingleFileDraggerUploadNode = () => (\n <DraggerFile\n {...commonDisplayFileProps.value}\n dragEvents={dragProps}\n trigger={props.trigger}\n cancelUpload={cancelUpload}\n triggerUpload={triggerUpload}\n uploadFiles={uploadFiles}\n onCancelUpload={props.onCancelUpload}\n v-slots={{\n fileListDisplay: slots.fileListDisplay,\n 'file-list-display': slots['file-list-display'],\n }}\n />\n );\n\n const getImageCardUploadNode = () => (\n <ImageCard\n {...commonDisplayFileProps.value}\n multiple={props.multiple}\n max={props.max}\n showUploadProgress={props.showUploadProgress}\n triggerUpload={triggerUpload}\n uploadFiles={uploadFiles}\n cancelUpload={cancelUpload}\n onPreview={props.onPreview}\n v-slots={{\n fileListDisplay: slots.fileListDisplay,\n 'file-list-display': slots['file-list-display'],\n }}\n />\n );\n\n const getFlowListNode = () => (\n <MultipleFlowList\n {...commonDisplayFileProps.value}\n isBatchUpload={props.isBatchUpload}\n draggable={props.draggable}\n dragEvents={dragProps}\n uploadFiles={uploadFiles}\n cancelUpload={cancelUpload}\n onPreview={props.onPreview}\n showThumbnail={props.showThumbnail}\n v-slots={{\n fileListDisplay: slots.fileListDisplay,\n 'file-list-display': slots['file-list-display'],\n }}\n >\n <div class={`${classPrefix.value}-upload__trigger`} onClick={triggerUpload}>\n {!props.draggable && renderTrigger()}\n </div>\n </MultipleFlowList>\n );\n\n const getCustomFile = () => (\n <CustomFile\n {...commonDisplayFileProps.value}\n draggable={props.draggable}\n dragContent={props.dragContent}\n dragEvents={dragProps}\n triggerUpload={triggerUpload}\n trigger={props.trigger}\n childrenNode={slots.default}\n v-slots={{\n dragContent: slots.dragContent,\n 'drag-content': slots['drag-content'],\n trigger: slots.trigger,\n }}\n >\n {renderTrigger()}\n </CustomFile>\n );\n\n return () => (\n <div class={`${classPrefix.value}-upload`} onPaste={props.uploadPastedFiles && onPasteFileChange}>\n <input\n ref={inputRef}\n type=\"file\"\n disabled={disabled.value}\n onChange={onNormalFileChange}\n multiple={props.multiple}\n accept={props.accept}\n hidden\n {...(props.inputAttributes ? { ...props.inputAttributes } : {})}\n />\n {['file', 'file-input'].includes(props.theme) && !props.draggable && getNormalFileNode()}\n {['file', 'image'].includes(props.theme) && props.draggable && getSingleFileDraggerUploadNode()}\n {props.theme === 'image' && !props.draggable && getImageCardUploadNode()}\n {['image-flow', 'file-flow'].includes(props.theme) && getFlowListNode()}\n {props.theme === 'custom' && getCustomFile()}\n\n {Boolean(props.tips || slots.tips) && (\n <small class={[tipsClasses, { [`${classPrefix.value}-upload__tips-${props.status}`]: props.status }]}>\n {renderTNodeJSX('tips')}\n </small>\n )}\n </div>\n );\n },\n});\n"],"names":["name","props","setup","expose","uploading","triggerUpload","uploadFiles","cancelUpload","uploadFilePercent","_createVNode","_mergeProps","_resolveComponent","params","dragActive","tipsClasses","errorClasses","placeholderClass","onRemove","onPasteFileChange","onDragFileChange"],"mappings":"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"}