UNPKG

tdesign-vue-next

Version:
1 lines 15.1 kB
{"version":3,"file":"alert.mjs","sources":["../../../components/alert/alert.tsx"],"sourcesContent":["import { defineComponent, VNode, ref, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';\nimport {\n CheckCircleFilledIcon as TdCheckCircleFilledIcon,\n CloseIcon as TdCloseIcon,\n ErrorCircleFilledIcon as TdErrorCircleFilledIcon,\n HelpCircleFilledIcon as TdHelpCircleFilledIcon,\n InfoCircleFilledIcon as TdInfoCircleFilledIcon,\n} from 'tdesign-icons-vue-next';\nimport { isArray, isString } from 'lodash-es';\n\nimport { on, off, addClass } from '@tdesign/shared-utils';\nimport props from './props';\nimport { SlotReturnValue } from '../common';\nimport {\n useIcon,\n useConfig,\n useTNodeJSX,\n useGlobalIcon,\n usePrefixClass,\n filterCommentNode,\n} from '@tdesign/shared-hooks';\nimport log from '@tdesign/common-js/log/index';\n\nexport default defineComponent({\n name: 'TAlert',\n props,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const { globalConfig, classPrefix } = useConfig('alert');\n const { CheckCircleFilledIcon, CloseIcon, ErrorCircleFilledIcon, HelpCircleFilledIcon, InfoCircleFilledIcon } =\n useGlobalIcon({\n CheckCircleFilledIcon: TdCheckCircleFilledIcon,\n CloseIcon: TdCloseIcon,\n ErrorCircleFilledIcon: TdErrorCircleFilledIcon,\n HelpCircleFilledIcon: TdHelpCircleFilledIcon,\n InfoCircleFilledIcon: TdInfoCircleFilledIcon,\n });\n const COMPONENT_NAME = usePrefixClass('alert');\n const renderTNodeJSX = useTNodeJSX();\n\n const renderIconTNode = useIcon();\n // alert的dom引用\n const alertRef = ref<HTMLElement | null>(null);\n // description的dom引用\n const descriptionRef = ref<HTMLElement | null>(null);\n // desc高度\n const descHeight = ref(0);\n // 是否可见,关闭后置为false\n const visible = ref(true);\n // 是否已收起,使用折叠功能时有效,用于表示是否已折叠;默认折叠\n const collapsed = ref(true);\n\n const renderIcon = () => {\n const Component = {\n info: InfoCircleFilledIcon,\n success: CheckCircleFilledIcon,\n warning: ErrorCircleFilledIcon,\n error: ErrorCircleFilledIcon,\n question: HelpCircleFilledIcon,\n };\n const iconContent = renderIconTNode('icon', Component);\n return iconContent ? <div class={`${COMPONENT_NAME.value}__icon`}>{iconContent}</div> : null;\n };\n\n const renderClose = () => {\n // close属性变更为closeBtn过渡期使用,close废弃后可删除。(需兼容标签上直接写close和closeBtn的场景)\n const { closeBtn } = props;\n const isUsingClose = Object.prototype.hasOwnProperty.call(instance.vnode.props || {}, 'close') || slots.close;\n const close = isUsingClose ? props.close : closeBtn;\n if (isUsingClose) {\n log.warnOnce('TAlert', 'prop `close` is going to be deprecated, please use `closeBtn` instead.');\n }\n let closeContent = null;\n if (close === true || close === '') {\n closeContent = <CloseIcon />;\n } else if (isString(close)) {\n closeContent = close;\n } else {\n closeContent = renderTNodeJSX(isUsingClose ? 'close' : 'closeBtn');\n }\n return closeContent ? (\n <div class={`${COMPONENT_NAME.value}__close`} onClick={handleClose}>\n {closeContent}\n </div>\n ) : null;\n };\n\n const renderTitle = () => {\n const titleContent = renderTNodeJSX('title');\n return titleContent ? <div class={`${COMPONENT_NAME.value}__title`}> {titleContent}</div> : null;\n };\n\n const renderMessage = () => {\n const operationContent = renderTNodeJSX('operation');\n return (\n <div class={`${COMPONENT_NAME.value}__message`}>\n {renderDescription()}\n {operationContent ? <div class={`${COMPONENT_NAME.value}__operation`}>{operationContent}</div> : null}\n </div>\n );\n };\n\n const renderDescription = () => {\n let messageContent = renderTNodeJSX('default') || renderTNodeJSX('message');\n\n if (isArray(messageContent)) {\n messageContent = filterCommentNode(messageContent);\n }\n\n const contentLength = isArray(messageContent) ? (messageContent as Array<SlotReturnValue>).length : 1;\n const hasCollapse = props.maxLine > 0 && props.maxLine < contentLength;\n const height = (descriptionRef.value?.children[0] as HTMLElement)?.offsetHeight;\n if (hasCollapse && collapsed.value) {\n // 折叠\n messageContent = (messageContent as Array<SlotReturnValue>).slice(0, props.maxLine as number);\n height && (descriptionRef.value.style.height = `${descHeight.value}px`);\n } else if (hasCollapse) {\n // 展开\n height &&\n (descriptionRef.value.style.height = `${height * (contentLength - props.maxLine) + descHeight.value}px`);\n }\n\n // 如果需要折叠,则元素之间补<br/>;否则不补\n return (\n <div class={`${COMPONENT_NAME.value}__description`} ref={descriptionRef}>\n {hasCollapse\n ? (messageContent as Array<string | VNode>).map((content) => <div>{content}</div>)\n : messageContent}\n {hasCollapse ? (\n <div\n class={`${COMPONENT_NAME.value}__collapse`}\n onClick={() => {\n collapsed.value = !collapsed.value;\n }}\n >\n {collapsed.value ? globalConfig.value.expandText : globalConfig.value.collapseText}\n </div>\n ) : null}\n </div>\n );\n };\n const renderContent = () => {\n return (\n <div class={`${COMPONENT_NAME.value}__content`}>\n {renderTitle()}\n {renderMessage()}\n </div>\n );\n };\n const handleClose = (e: MouseEvent) => {\n props.onClose?.({ e });\n addClass(alertRef.value, `${COMPONENT_NAME.value}--closing`);\n };\n\n const handleCloseEnd = (e: TransitionEvent) => {\n const isTransitionTarget = e.target === alertRef.value;\n // 防止子元素冒泡触发\n if (e.propertyName === 'opacity' && isTransitionTarget) {\n visible.value = false;\n props.onClosed?.({ e });\n }\n };\n\n onMounted(() => {\n on(alertRef.value, 'transitionend', handleCloseEnd);\n descHeight.value = descriptionRef.value.offsetHeight;\n });\n onBeforeUnmount(() => {\n off(alertRef.value, 'transitionend', handleCloseEnd);\n });\n\n return () => (\n <div\n ref={alertRef}\n class={[\n `${COMPONENT_NAME.value}`,\n `${COMPONENT_NAME.value}--${props.theme}`,\n {\n [`${classPrefix.value}-is-hidden`]: !visible.value,\n },\n ]}\n >\n {renderIcon()}\n {renderContent()}\n {renderClose()}\n </div>\n );\n },\n});\n"],"names":["defineComponent","name","props","setup","slots","_ref","instance","getCurrentInstance","_useConfig","useConfig","globalConfig","classPrefix","_useGlobalIcon","useGlobalIcon","CheckCircleFilledIcon","TdCheckCircleFilledIcon","CloseIcon","TdCloseIcon","ErrorCircleFilledIcon","TdErrorCircleFilledIcon","HelpCircleFilledIcon","TdHelpCircleFilledIcon","InfoCircleFilledIcon","TdInfoCircleFilledIcon","COMPONENT_NAME","usePrefixClass","renderTNodeJSX","useTNodeJSX","renderIconTNode","useIcon","alertRef","ref","descriptionRef","descHeight","visible","collapsed","renderIcon","Component","info","success","warning","error","question","iconContent","_createVNode","concat","value","renderClose","closeBtn","isUsingClose","Object","prototype","hasOwnProperty","call","vnode","close","log","warnOnce","closeContent","isString","handleClose","renderTitle","titleContent","renderMessage","operationContent","renderDescription","_descriptionRef$value","messageContent","isArray","filterCommentNode","contentLength","length","hasCollapse","maxLine","height","children","offsetHeight","slice","style","map","content","onClick","expandText","collapseText","renderContent","e","_props2$onClose","onClose","addClass","handleCloseEnd","isTransitionTarget","target","propertyName","_props2$onClosed","onClosed","onMounted","on","onBeforeUnmount","off","theme","_defineProperty"],"mappings":"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"}