xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 31.8 kB
Source Map (JSON)
{"version":3,"file":"guide.mjs","sources":["../../src/guide/guide.tsx"],"sourcesContent":["import { defineComponent, computed, nextTick, onMounted, ref, toRefs, watch, h, Teleport } from 'vue';\nimport isFunction from 'lodash/isFunction';\nimport props from './props';\nimport { GuideCrossProps } from './interface';\nimport { TdGuideProps, GuideStep } from './type';\nimport { scrollToParentVisibleArea, getRelativePosition, getTargetElm, scrollToElm } from './utils';\nimport setStyle from '../_common/js/utils/set-style';\nimport { addClass, removeClass, isFixed, getWindowScroll } from '../utils/dom';\nimport useVModel from '../hooks/useVModel';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../hooks/useConfig';\nimport Button from '../button';\nimport Popup, { PopupProps } from '../popup';\n\nexport default defineComponent({\n name: 'XGuide',\n props,\n setup(props: TdGuideProps, context) {\n const renderTNodeJSX = useTNodeJSX();\n const COMPONENT_NAME = usePrefixClass('guide');\n const LOCK_CLASS = usePrefixClass('guide--lock');\n const { globalConfig } = useConfig('guide');\n\n const { current, modelValue, hideCounter, hidePrev, hideSkip, steps, zIndex } = toRefs(props);\n const [innerCurrent, setInnerCurrent] = useVModel(\n current,\n modelValue,\n props.defaultCurrent,\n props.onChange,\n 'current',\n );\n\n // 覆盖层,用于覆盖所有元素\n const overlayLayerRef = ref<HTMLElement>();\n // 高亮层,用于高亮元素\n const highlightLayerRef = ref<HTMLElement>();\n // 提示层,用于高亮元素\n const referenceLayerRef = ref<HTMLElement>();\n // 当前高亮的元素\n const currentHighlightLayerElm = ref<HTMLElement>();\n // dialog wrapper ref\n const dialogWrapperRef = ref<HTMLElement>();\n // dialog ref\n const dialogTooltipRef = ref<HTMLElement>();\n // ! popup ref 不确定这里的类型是否完全正确\n const popupTooltipRef = ref<InstanceType<typeof Popup>>();\n // 是否开始展示\n const actived = ref<boolean>(false);\n // 步骤总数\n const stepsTotal = computed(() => steps.value.length);\n // 当前步骤的信息\n const currentStepInfo = computed<GuideStep>(() => steps.value[innerCurrent.value]);\n // 当前是否为 popup\n const isPopup = computed(() => getCurrentCrossProps('mode') === 'popup');\n // 当前元素位置状态\n const currentElmIsFixed = computed(() => isFixed(currentHighlightLayerElm.value || document.body));\n // 获取当前步骤的属性值 用户当前步骤设置 > 用户组件设置的\n const getCurrentCrossProps = <Key extends keyof GuideCrossProps>(propsName: Key) =>\n currentStepInfo.value[propsName] ?? props[propsName];\n // 获取当前步骤的用户设定的高亮内容\n const currentCustomHighlightContent = computed(() => {\n const { highlightContent } = currentStepInfo.value;\n\n let node: any = highlightContent;\n if (isFunction(highlightContent)) {\n // 支持函数\n node = highlightContent(hWithParams());\n } else if (context.slots.highlightContent) {\n // 支持插槽\n node = context.slots.highlightContent(hWithParams());\n } else if (context.slots['highlight-content']) {\n // 支持插槽\n node = context.slots['highlight-content'](hWithParams());\n } else if (!!highlightContent) {\n // 支持组件\n node = <node />;\n }\n\n // 给自定义元素添加类名\n if (node) {\n if (!node.props) node.props = {};\n node.props.class = node.props.class || '';\n }\n return node;\n });\n\n // 是否展示高亮区域\n const showCustomHighlightContent = computed(() => Boolean(currentCustomHighlightContent.value && isPopup.value));\n //\n const popupVisible = ref(false);\n const hWithParams = (params: Record<string, any> = { currentStepInfo: currentStepInfo.value }) => {\n const newH = new Function('return ' + h.toString())();\n return Object.assign({}, newH, params);\n };\n\n // 设置高亮层的位置\n const setHighlightLayerPosition = (highlightLayer: HTMLElement, isReference = false) => {\n // 这里预留了一个相对元素的功能,暂未使用,也是这里导致了 fix #2111\n let { top, left } = getRelativePosition(currentHighlightLayerElm.value);\n let { width, height } = currentHighlightLayerElm.value.getBoundingClientRect();\n const highlightPadding = getCurrentCrossProps('highlightPadding');\n\n if (isPopup.value) {\n width += highlightPadding * 2;\n height += highlightPadding * 2;\n top -= highlightPadding;\n left -= highlightPadding;\n } else {\n const { scrollTop, scrollLeft } = getWindowScroll();\n top += scrollTop;\n left += scrollLeft;\n }\n\n const style = {\n top: `${top}px`,\n left: `${left}px`,\n };\n\n // 展示自定义高亮\n if (showCustomHighlightContent.value) {\n // 高亮框本身不设定宽高,引用用框的宽高设定为用户自定义的宽高\n if (isReference) {\n const { width, height } = highlightLayerRef.value.getBoundingClientRect();\n Object.assign(style, {\n width: `${width}px`,\n height: `${height}px`,\n });\n } else {\n Object.assign(style, {\n width: 'auto',\n height: 'auto',\n });\n }\n } else {\n Object.assign(style, {\n width: `${width}px`,\n height: `${height}px`,\n });\n }\n setStyle(highlightLayer, style);\n };\n\n const showPopupGuide = () => {\n nextTick(() => {\n currentHighlightLayerElm.value = getTargetElm(currentStepInfo.value.element);\n if (!currentHighlightLayerElm.value) return;\n scrollToParentVisibleArea(currentHighlightLayerElm.value);\n setHighlightLayerPosition(highlightLayerRef.value);\n setHighlightLayerPosition(referenceLayerRef.value, true);\n scrollToElm(currentHighlightLayerElm.value);\n // fix: https://github.com/Tencent/tdesign-vue-next/issues/2536\n // 这里其实是一个临时解决方案,最合理的是 popup 内部处理\n popupTooltipRef.value?.update();\n });\n };\n\n const destroyTooltipElm = () => {\n referenceLayerRef.value?.parentNode.removeChild(referenceLayerRef.value);\n };\n\n const showDialogGuide = () => {\n nextTick(() => {\n currentHighlightLayerElm.value = dialogTooltipRef.value;\n scrollToParentVisibleArea(currentHighlightLayerElm.value);\n setHighlightLayerPosition(highlightLayerRef.value);\n scrollToElm(currentHighlightLayerElm.value);\n });\n };\n\n const destroyDialogTooltipElm = () => {\n dialogTooltipRef.value?.parentNode.removeChild(dialogTooltipRef.value);\n dialogWrapperRef.value?.parentNode.removeChild(dialogWrapperRef.value);\n };\n\n const showGuide = () => {\n if (isPopup.value) {\n destroyDialogTooltipElm();\n showPopupGuide();\n } else {\n destroyTooltipElm();\n showDialogGuide();\n }\n popupVisible.value = true;\n };\n\n const destroyGuide = () => {\n destroyTooltipElm();\n destroyDialogTooltipElm();\n highlightLayerRef.value?.parentNode.removeChild(highlightLayerRef.value);\n overlayLayerRef.value?.parentNode.removeChild(overlayLayerRef.value);\n removeClass(document.body, LOCK_CLASS.value);\n };\n\n const handleSkip = (e: MouseEvent) => {\n const total = stepsTotal.value;\n actived.value = false;\n setInnerCurrent(-1, { e, total });\n props.onSkip?.({ e, current: innerCurrent.value, total });\n };\n\n const handlePrev = (e: MouseEvent) => {\n const total = stepsTotal.value;\n setInnerCurrent(innerCurrent.value - 1, { e, total });\n props.onPrevStepClick?.({\n e,\n prev: innerCurrent.value - 1,\n current: innerCurrent.value,\n total,\n });\n };\n\n const handleNext = (e: MouseEvent) => {\n const total = stepsTotal.value;\n setInnerCurrent(innerCurrent.value + 1, { e, total });\n props.onNextStepClick?.({\n e,\n next: innerCurrent.value + 1,\n current: innerCurrent.value,\n total,\n });\n };\n\n const handleFinish = (e: MouseEvent) => {\n const total = stepsTotal.value;\n actived.value = false;\n setInnerCurrent(-1, { e, total });\n props.onFinish?.({ e, current: innerCurrent.value, total });\n };\n\n const initGuide = () => {\n if (innerCurrent.value >= 0 && innerCurrent.value < steps.value.length) {\n if (!actived.value) {\n actived.value = true;\n addClass(document.body, LOCK_CLASS.value);\n }\n showGuide();\n }\n };\n\n watch(innerCurrent, (val) => {\n if (val >= 0 && val < steps.value.length) {\n popupVisible.value = false;\n initGuide();\n } else {\n actived.value = false;\n destroyGuide();\n }\n });\n\n onMounted(() => {\n initGuide();\n });\n\n return () => {\n const renderOverlayLayer = () => (\n <div ref={overlayLayerRef} class={`${COMPONENT_NAME.value}__overlay`} style={{ zIndex: zIndex.value - 2 }} />\n );\n\n const renderHighlightLayer = () => {\n const style = { zIndex: zIndex.value - 1 };\n const highlightClass = [\n `${COMPONENT_NAME.value}__highlight`,\n `${COMPONENT_NAME.value}__highlight--${isPopup.value ? 'popup' : 'dialog'}`,\n `${COMPONENT_NAME.value}--${currentElmIsFixed.value && isPopup.value ? 'fixed' : 'absolute'}`,\n ];\n const showOverlay = getCurrentCrossProps('showOverlay');\n const maskClass = [`${COMPONENT_NAME.value}__highlight--${showOverlay ? 'mask' : 'nomask'}`];\n\n return (\n <div ref={highlightLayerRef} class={[...highlightClass, ...maskClass]} style={style}>\n {showCustomHighlightContent.value && currentCustomHighlightContent.value}\n </div>\n );\n };\n\n const renderCounter = () => {\n const popupSlotCounter = renderTNodeJSX('counter', {\n params: { total: stepsTotal.value, current: innerCurrent.value },\n });\n\n const popupDefaultCounter = (\n <div class={`${COMPONENT_NAME.value}__counter`}>\n {popupSlotCounter || `${innerCurrent.value + 1}/${stepsTotal.value}`}\n </div>\n );\n return <>{!hideCounter.value && popupDefaultCounter}</>;\n };\n\n const renderAction = (mode: TdGuideProps['mode']) => {\n const isLast = innerCurrent.value === stepsTotal.value - 1;\n const isFirst = innerCurrent.value === 0;\n const buttonSize = mode === 'popup' ? 'small' : 'medium';\n\n return (\n <div class={`${COMPONENT_NAME.value}__action`}>\n {!hideSkip.value && !isLast && (\n <Button\n key=\"skip\"\n class={`${COMPONENT_NAME.value}__skip`}\n theme=\"default\"\n size={buttonSize}\n variant=\"base\"\n onClick={handleSkip}\n {...(getCurrentCrossProps('skipButtonProps') ?? globalConfig.value.skipButtonProps)}\n />\n )}\n {!hidePrev.value && !isFirst && (\n <Button\n key=\"prev\"\n class={`${COMPONENT_NAME.value}__prev`}\n theme=\"default\"\n size={buttonSize}\n variant=\"base\"\n onClick={handlePrev}\n {...(getCurrentCrossProps('prevButtonProps') ?? globalConfig.value.prevButtonProps)}\n />\n )}\n {!isLast && (\n <Button\n key=\"next\"\n class={`${COMPONENT_NAME.value}__next`}\n theme=\"primary\"\n size={buttonSize}\n variant=\"base\"\n onClick={handleNext}\n {...(getCurrentCrossProps('nextButtonProps') ?? globalConfig.value.nextButtonProps)}\n />\n )}\n {isLast && (\n <Button\n key=\"finish\"\n class={`${COMPONENT_NAME.value}__finish`}\n theme=\"primary\"\n size={buttonSize}\n variant=\"base\"\n onClick={handleFinish}\n {...(props.finishButtonProps ?? globalConfig.value.finishButtonProps)}\n />\n )}\n </div>\n );\n };\n\n const renderTitle = () => {\n const functionTitle = isFunction(currentStepInfo.value.title) ? currentStepInfo.value.title() : undefined;\n const slotTitle = context.slots.title ? context.slots.title(hWithParams()) : undefined;\n return functionTitle || slotTitle || currentStepInfo.value.title;\n };\n\n const renderTooltipBody = () => {\n const title = <div class={`${COMPONENT_NAME.value}__title`}>{renderTitle()}</div>;\n const bodyRender = currentStepInfo.value.body;\n\n let descBody: any;\n if (isFunction(bodyRender)) {\n descBody = bodyRender(hWithParams());\n } else if (context.slots.body) {\n descBody = context.slots.body({ currentStepInfo: currentStepInfo.value });\n } else if (typeof bodyRender === 'string') {\n descBody = bodyRender;\n } else {\n descBody = <bodyRender />;\n }\n const desc = <div class={`${COMPONENT_NAME.value}__desc`}>{descBody}</div>;\n\n return (\n <>\n {title}\n {desc}\n </>\n );\n };\n\n const renderPopupContent = () => {\n const footerClasses = [`${COMPONENT_NAME.value}__footer`, `${COMPONENT_NAME.value}__footer--popup`];\n const action = (\n <div class={footerClasses}>\n {renderCounter()}\n {renderAction('popup')}\n </div>\n );\n\n return (\n <div class={`${COMPONENT_NAME.value}__tooltip`}>\n {renderTooltipBody()}\n {action}\n </div>\n );\n };\n\n const renderPopupGuide = () => {\n const { content } = currentStepInfo.value;\n const contentProps = {\n handlePrev,\n handleNext,\n handleSkip,\n handleFinish,\n current: innerCurrent.value,\n total: stepsTotal.value,\n };\n let renderBody;\n if (isFunction(content)) {\n renderBody = () => content(hWithParams(contentProps));\n } else if (context.slots.content) {\n renderBody = () => context.slots.content(hWithParams(contentProps));\n } else if (content) {\n renderBody = () => <content {...contentProps} />;\n } else {\n renderBody = renderPopupContent;\n }\n const classes = [\n `${COMPONENT_NAME.value}__reference`,\n `${COMPONENT_NAME.value}--${currentElmIsFixed.value ? 'fixed' : 'absolute'}`,\n ];\n\n const innerClassName: PopupProps['overlayInnerClassName'] = [\n {\n [`${COMPONENT_NAME.value}__popup--content`]: !!content,\n },\n ];\n\n return (\n <Popup\n ref={popupTooltipRef}\n visible={popupVisible.value}\n show-arrow={!content}\n zIndex={zIndex.value}\n placement={currentStepInfo.value.placement as any}\n {...currentStepInfo.value.popupProps}\n content={renderBody}\n overlayClassName={[`${COMPONENT_NAME.value}__popup`, currentStepInfo.value.stepOverlayClass]}\n overlayInnerClassName={innerClassName.concat(currentStepInfo.value.popupProps?.overlayInnerClassName)}\n >\n <div ref={referenceLayerRef} class={classes} />\n </Popup>\n );\n };\n\n const renderDialogGuide = () => {\n const style = { zIndex: zIndex.value };\n const wrapperClasses = [\n `${COMPONENT_NAME.value}__wrapper`,\n { [`${COMPONENT_NAME.value}__wrapper--center`]: currentStepInfo.value.placement === 'center' },\n ];\n const dialogClasses = [\n `${COMPONENT_NAME.value}__reference`,\n `${COMPONENT_NAME.value}--absolute`,\n `${COMPONENT_NAME.value}__dialog`,\n {\n [`${COMPONENT_NAME.value}__dialog--nomask`]: !getCurrentCrossProps('showOverlay'),\n [currentStepInfo.value.stepOverlayClass]: !!currentStepInfo.value.stepOverlayClass,\n },\n ];\n const footerClasses = [`${COMPONENT_NAME.value}__footer`, `${COMPONENT_NAME.value}__footer--popup`];\n return (\n <>\n <div ref={dialogWrapperRef} class={wrapperClasses} style={style}>\n <div ref={dialogTooltipRef} class={dialogClasses}>\n {renderTooltipBody()}\n <div class={footerClasses}>\n {renderCounter()}\n {renderAction('dialog')}\n </div>\n </div>\n </div>\n </>\n );\n };\n\n const renderGuide = () => {\n return (\n <>\n <Teleport to=\"body\">\n {renderOverlayLayer()}\n {renderHighlightLayer()}\n {isPopup.value ? renderPopupGuide() : renderDialogGuide()}\n </Teleport>\n </>\n );\n };\n\n return <>{actived.value && renderGuide()}</>;\n };\n },\n});\n"],"names":["name","props","setup","innerCurrent","setInnerCurrent","isFunction","node","top","left","Object","width","height","setStyle","nextTick","scrollToParentVisibleArea","setHighlightLayerPosition","scrollToElm","currentHighlightLayerElm","destroyDialogTooltipElm","showPopupGuide","destroyTooltipElm","showDialogGuide","e","total","prev","next","showGuide","watch","initGuide","destroyGuide","onMounted","zIndex","_createVNode","params","_mergeProps","descBody","_Fragment","handlePrev","handleNext","handleSkip","handleFinish","renderBody"],"mappings":"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"}