xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 13.3 kB
Source Map (JSON)
{"version":3,"file":"image-card.mjs","sources":["../../../src/upload/themes/image-card.tsx"],"sourcesContent":["import { defineComponent, PropType, toRefs, computed } from 'vue';\nimport Loading from '../../loading';\nimport ImageViewer from '../../image-viewer';\nimport { CommonDisplayFileProps } from '../interface';\nimport { commonProps } from '../constants';\nimport { TdUploadProps, UploadFile } from '../type';\nimport { abridgeName } from '../../_common/js/upload/utils';\nimport { UploadConfig } from '../../config-provider';\nimport { useTNodeJSX } from '../../hooks';\nimport Link from '../../link';\nimport Image from '../../image';\n\nexport interface ImageCardUploadProps extends CommonDisplayFileProps {\n multiple: TdUploadProps['multiple'];\n max: TdUploadProps['max'];\n disabled?: TdUploadProps['disabled'];\n showUploadProgress: TdUploadProps['showUploadProgress'];\n triggerUpload?: (e: MouseEvent) => void;\n uploadFiles?: (toFiles?: UploadFile[]) => void;\n cancelUpload?: (context: { e: MouseEvent; file: UploadFile }) => void;\n onPreview?: TdUploadProps['onPreview'];\n}\n\nexport default defineComponent({\n name: 'UploadImageCard',\n\n props: {\n ...commonProps,\n multiple: Boolean,\n max: Number,\n disabled: Boolean,\n showUploadProgress: Boolean,\n triggerUpload: Function as PropType<ImageCardUploadProps['triggerUpload']>,\n uploadFiles: Function as PropType<ImageCardUploadProps['uploadFiles']>,\n cancelUpload: Function as PropType<ImageCardUploadProps['cancelUpload']>,\n onPreview: Function as PropType<ImageCardUploadProps['onPreview']>,\n },\n\n setup(props) {\n const { displayFiles, classPrefix, multiple, max } = toRefs(props);\n const locale = computed(() => props.locale as UploadConfig);\n const renderTNodeJSX = useTNodeJSX();\n\n const showTrigger = computed(() => {\n if (multiple.value) {\n return !max.value || displayFiles.value.length < max.value;\n }\n return !displayFiles.value?.[0];\n });\n\n const renderMainContent = (file: UploadFile, index: number) => {\n return (\n <div class={`${classPrefix.value}-upload__card-content ${classPrefix.value}-upload__card-box`}>\n <Image class={`${classPrefix.value}-upload__card-image`} src={file.url || file.raw} error=\"\" />\n <div class={`${classPrefix.value}-upload__card-mask`}>\n <span class={`${classPrefix.value}-upload__card-mask-item`} onClick={(e) => e.stopPropagation()}>\n <ImageViewer\n images={displayFiles.value.map((t: UploadFile) => t.url || t.raw)}\n defaultIndex={index}\n trigger={(h, { open }) => {\n return (\n <icon-ri-eye-line\n onClick={({ e }: { e: MouseEvent }) => {\n props.onPreview?.({ file, index, e });\n open();\n }}\n />\n );\n }}\n ></ImageViewer>\n </span>\n {!props.disabled && (\n <>\n <span class={`${classPrefix.value}-upload__card-mask-item-divider`} />\n <span class={`${classPrefix.value}-upload__card-mask-item`} onClick={(e) => e.stopPropagation()}>\n <icon-ri-delete-bin-2-line onClick={({ e }: { e: MouseEvent }) => props?.onRemove?.({ e, file, index })} />\n </span>\n </>\n )}\n </div>\n </div>\n );\n };\n\n const renderProgressFile = (file: UploadFile, loadCard: string) => {\n return (\n <div class={[loadCard, `${classPrefix.value}-upload__${props.theme}-${file.status}`]}>\n <Loading loading={true} size=\"medium\" />\n <p>\n {locale.value?.progress?.uploadingText}\n {props.showUploadProgress ? ` ${file.percent}%` : ''}\n </p>\n </div>\n );\n };\n\n const renderFailFile = (file: UploadFile, index: number, loadCard: string) => {\n return (\n <div class={loadCard}>\n <icon-ri-error-warning-fill />\n <p>{file.response?.error || locale.value?.progress?.failText}</p>\n <div class={`${classPrefix.value}-upload__card-mask`}>\n <span class={`${classPrefix.value}-upload__card-mask-item`} onClick={(e) => e.stopPropagation()}>\n <icon-ri-delete-bin-2-line onClick={({ e }: { e: MouseEvent }) => props?.onRemove?.({ e, file, index })} />\n </span>\n </div>\n </div>\n );\n };\n\n return () => {\n // render custom UI with fileListDisplay\n const customList = renderTNodeJSX('fileListDisplay', {\n params: {\n files: displayFiles.value,\n },\n });\n if (customList) return customList;\n\n const cardItemClasses = `${classPrefix.value}-upload__card-item ${classPrefix.value}-is-background`;\n return (\n <div>\n <ul class={`${classPrefix.value}-upload__card`}>\n {displayFiles.value?.map((file: UploadFile, index: number) => {\n const fileNameClassName = `${classPrefix.value}-upload__card-name`;\n\n const loadCard = `${classPrefix.value}-upload__card-container ${classPrefix.value}-upload__card-box`;\n const fileName = props.abridgeName ? abridgeName(file.name, ...props.abridgeName) : file.name;\n return (\n <li class={cardItemClasses} key={index}>\n {file.status === 'progress' && renderProgressFile(file, loadCard)}\n {file.status === 'fail' && renderFailFile(file, index, loadCard)}\n {!['progress', 'fail'].includes(file.status) && renderMainContent(file, index)}\n {fileName &&\n (file.url ? (\n <Link href={file.url} class={fileNameClassName} target=\"_blank\" hover=\"color\" size=\"small\">\n {fileName}\n </Link>\n ) : (\n <span class={fileNameClassName}>{fileName}</span>\n ))}\n </li>\n );\n })}\n\n {showTrigger.value && !props.disabled && (\n <li class={cardItemClasses} onClick={props.triggerUpload}>\n <div\n class={[\n `${classPrefix.value}-upload__image-add`,\n `${classPrefix.value}-upload__card-container`,\n `${classPrefix.value}-upload__card-box`,\n ]}\n >\n <icon-ri-add-line />\n <p class={`${classPrefix.value}-size-s`}>{locale.value?.triggerUploadText?.image}</p>\n </div>\n </li>\n )}\n </ul>\n </div>\n );\n };\n },\n});\n"],"names":["_isVNode","name","props","multiple","max","disabled","showUploadProgress","triggerUpload","uploadFiles","cancelUpload","onPreview","_createVNode","_resolveComponent","file","index","e","open","params"],"mappings":"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"}