xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 22.3 kB
Source Map (JSON)
{"version":3,"file":"tree-item.mjs","sources":["../../src/tree/tree-item.tsx"],"sourcesContent":["import { computed, h, defineComponent, ref, PropType, inject, reactive } from 'vue';\nimport isFunction from 'lodash/isFunction';\nimport isBoolean from 'lodash/isBoolean';\n\nimport TCheckBox from '../checkbox';\nimport TLoading from '../loading';\n\nimport { getTNode } from './util';\nimport { useCLASSNAMES, injectKey } from './constants';\nimport TreeNode from '../_common/js/tree/tree-node';\n\nimport useRipple from '../hooks/useRipple';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\nimport useDraggable from './hooks/useDraggable';\n\nimport type { TypeEventState, TreeNodeModel } from './interface';\n\nexport default defineComponent({\n name: 'XTreeNode',\n props: {\n node: {\n type: Object as PropType<TreeNode>,\n },\n onClick: Function as PropType<(e: TypeEventState) => void>,\n onChange: Function as PropType<(e: TypeEventState) => void>,\n onDrop: Function as PropType<(node: TreeNode, val: number, e: DragEvent) => void>,\n onDragStart: Function as PropType<(node: TreeNode, e: DragEvent) => void>,\n expandOnClickNode: Boolean,\n },\n setup(props) {\n const treeScope = inject(injectKey);\n const isClicked = ref(false);\n const label = ref<HTMLElement>();\n useRipple(label);\n\n const CLASS_NAMES = useCLASSNAMES();\n\n const { globalConfig } = useConfig('tree');\n const classPrefix = usePrefixClass();\n\n const handleClick = (evt: MouseEvent) => {\n const { node, expandOnClickNode } = props;\n const state: TypeEventState = {\n mouseEvent: evt,\n event: evt,\n node,\n path: node.getPath(),\n };\n\n const srcTarget = evt.target as HTMLElement;\n const isBranchTrigger =\n node.children &&\n props.expandOnClickNode &&\n (srcTarget.className === `${classPrefix.value}-checkbox__input` || srcTarget.tagName.toLowerCase() === 'input');\n // checkbox 上也有 click 事件, 避免重复的 click 事件触发\n if (isClicked.value || isBranchTrigger) return;\n\n // 处理expandOnClickNode时与checkbox的选中的逻辑冲突\n if (\n expandOnClickNode &&\n node.children &&\n srcTarget.className?.indexOf?.(`${classPrefix.value}-tree__label`) !== -1\n )\n evt.preventDefault();\n\n isClicked.value = true;\n setTimeout(() => {\n isClicked.value = false;\n });\n\n props.onClick?.(state);\n };\n const nodeRef = ref<HTMLElement>();\n const { isDragOver, isDragging, dropPosition, setDragStatus } = useDraggable(\n reactive({ nodeRef, node: props.node }) as { nodeRef: HTMLElement; node: TreeNode },\n );\n\n const handleDragStart = (evt: DragEvent) => {\n const { node } = props;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n setDragStatus('dragStart', evt);\n evt.dataTransfer.effectAllowed = 'move';\n\n try {\n // ie throw error firefox-need-it\n evt.dataTransfer?.setData('text/plain', '');\n } catch (e) {\n // empty\n }\n props.onDragStart?.(node, evt);\n };\n\n const handleDragEnd = (evt: DragEvent) => {\n const { node } = props;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n setDragStatus('dragEnd', evt);\n };\n\n const handleDragOver = (evt: DragEvent) => {\n const { node } = props;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n evt.preventDefault();\n setDragStatus('dragOver', evt);\n };\n\n const handleDragLeave = (evt: DragEvent) => {\n const { node } = props;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n setDragStatus('dragLeave', evt);\n };\n\n const handleDrop = (evt: DragEvent) => {\n const { node } = props;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n evt.preventDefault();\n setDragStatus('drop', evt);\n props.onDrop?.(node, dropPosition.value, evt);\n };\n\n const handleChange = () => {\n const { node } = props;\n const event = new Event('change');\n const state: TypeEventState = {\n event,\n node,\n };\n props.onChange?.(state);\n };\n\n const itemStyles = computed(() => {\n const { level } = props.node;\n const styles = `--level: ${level};`;\n return styles;\n });\n\n const itemClassList = computed(() => {\n const { node } = props;\n const list = [];\n list.push(CLASS_NAMES.value.treeNode);\n list.push({\n [CLASS_NAMES.value.treeNodeOpen]: node.expanded,\n [CLASS_NAMES.value.actived]: node.isActivable() ? node.actived : false,\n [CLASS_NAMES.value.disabled]: node.isDisabled(),\n });\n // 拖拽相关 class\n list.push({\n [CLASS_NAMES.value.treeNodeDraggable]: node.isDraggable(),\n [CLASS_NAMES.value.treeNodeDragging]: isDragging.value,\n [CLASS_NAMES.value.treeNodeDragTipTop]: isDragOver.value && dropPosition.value < 0,\n [CLASS_NAMES.value.treeNodeDragTipBottom]: isDragOver.value && dropPosition.value > 0,\n [CLASS_NAMES.value.treeNodeDragTipHighlight]: !isDragging.value && isDragOver.value && dropPosition.value === 0,\n });\n return list;\n });\n\n const renderLine = () => {\n const { node } = props;\n const { line, scopedSlots } = treeScope.value;\n const iconVisible = !!treeScope.value.icon;\n\n let lineNode = null;\n if (line === true) {\n if (scopedSlots?.line) {\n lineNode = scopedSlots.line({\n node: node?.getModel(),\n });\n } else if (node.parent && node.tree) {\n const { vmIsLeaf, vmIsFirst, level } = node;\n\n const lineClasses = [];\n\n // 每个节点绘制抵达上一层级的折线\n lineClasses.push(CLASS_NAMES.value.line);\n\n // 叶子节点,折线宽度延长,因为没有 icon 呈现\n // 任意节点,icon 不呈现时也是要延长折线宽度\n if (vmIsLeaf || !iconVisible) {\n lineClasses.push(CLASS_NAMES.value.lineIsLeaf);\n }\n\n // 分支首节点,到上一节点的折线高度要缩短,让位给 icon 呈现\n // 如果 icon 隐藏了,则不必缩短折线高度\n if (vmIsFirst && iconVisible) {\n lineClasses.push(CLASS_NAMES.value.lineIsFirst);\n }\n\n // 如果节点的父节点,不是最后的节点\n // 则需要绘制节点延长线\n const shadowStyles: string[] = [];\n const parents = node.getParents();\n parents.pop();\n parents.forEach((pNode: TreeNode, index: number) => {\n if (!pNode.vmIsLast) {\n shadowStyles.push(`calc(-${index + 1} * var(--space)) 0 var(--color)`);\n }\n });\n\n const styles = {\n '--level': level,\n 'box-shadow': shadowStyles.join(','),\n };\n\n lineNode = <span class={lineClasses} style={styles}></span>;\n }\n } else {\n lineNode = getTNode(line, {\n node,\n });\n }\n return lineNode;\n };\n\n const renderIcon = () => {\n const getFolderIcon = () => {\n if (isFunction(globalConfig.value.folderIcon)) {\n return globalConfig.value.folderIcon(h);\n }\n return <icon-ri-arrow-right-s-fill />;\n };\n\n const { node } = props;\n const { icon, scopedSlots } = treeScope.value;\n let isDefaultIcon = false;\n\n let iconNode = null;\n if (icon === true) {\n if (scopedSlots?.icon) {\n iconNode = scopedSlots.icon({\n node: node?.getModel(),\n });\n } else if (!node.vmIsLeaf) {\n isDefaultIcon = true;\n iconNode = getFolderIcon();\n if (node.loading && node.expanded) {\n iconNode = <TLoading />;\n }\n } else {\n iconNode = '';\n }\n } else {\n iconNode = getTNode(icon, {\n node,\n });\n }\n iconNode = (\n <span\n class={[\n CLASS_NAMES.value.treeIcon,\n CLASS_NAMES.value.folderIcon,\n isDefaultIcon ? CLASS_NAMES.value.treeIconDefault : '',\n ]}\n trigger=\"expand\"\n ignore=\"active\"\n >\n {iconNode}\n </span>\n );\n\n return iconNode;\n };\n\n const renderLabel = () => {\n const { node } = props;\n const { label, scopedSlots, disableCheck } = treeScope.value;\n const checkProps = treeScope.value.checkProps || {};\n\n let labelNode = null;\n if (label === true) {\n if (scopedSlots.label) {\n labelNode = scopedSlots.label({\n node: node.getModel(),\n });\n } else {\n labelNode = node.label || '';\n }\n } else {\n labelNode = getTNode(label, {\n node,\n });\n }\n\n const labelClasses = [\n CLASS_NAMES.value.treeLabel,\n CLASS_NAMES.value.treeLabelStrictly,\n {\n [CLASS_NAMES.value.actived]: node.isActivable() ? node.actived : false,\n },\n ];\n\n if (node.vmCheckable) {\n let checkboxDisabled = false;\n if (isFunction(disableCheck)) {\n checkboxDisabled = disableCheck(node as TreeNodeModel & TreeNode);\n } else {\n checkboxDisabled = !!disableCheck || node.data?.checkable === false;\n }\n if (node.isDisabled()) {\n checkboxDisabled = true;\n }\n const itemCheckProps = {\n ...checkProps,\n disabled: checkboxDisabled,\n };\n\n // 当开启expandOnClickNode且为非叶子节点时 点击label不选中选项\n const shouldStopLabelTrigger = computed(() => {\n const isNormalBranchNode = Array.isArray(node.children) && node.children?.length > 0;\n const isLazyLoadChildBranchNode = isBoolean(node.children) && node.children; // 懒加载子节点场景\n\n const isBranchNode = isNormalBranchNode || isLazyLoadChildBranchNode;\n\n return props.expandOnClickNode && isBranchNode;\n });\n\n labelNode = (\n <TCheckBox\n class={labelClasses}\n checked={node.checked}\n indeterminate={node.indeterminate}\n disabled={node.isDisabled()}\n name={node.value.toString()}\n onChange={() => handleChange()}\n ignore=\"expand\"\n stopLabelTrigger={shouldStopLabelTrigger.value}\n needRipple={true}\n {...itemCheckProps}\n >\n {labelNode}\n </TCheckBox>\n );\n } else {\n const inner = <span style=\"position: relative\">{labelNode}</span>;\n labelNode = node.isActivable() ? ( // 使用key是为了避免元素复用,从而顺利移除ripple指令\n <span key=\"1\" ref=\"label\" class={labelClasses} title={node.label}>\n {inner}\n </span>\n ) : (\n <span key=\"2\" class={labelClasses} title={node.label}>\n {inner}\n </span>\n );\n }\n\n return labelNode;\n };\n\n const renderOperations = () => {\n const { node } = props;\n const { operations, scopedSlots } = treeScope.value;\n\n let opNode = null;\n if (scopedSlots?.operations) {\n opNode = scopedSlots.operations({\n node: node?.getModel(),\n });\n } else {\n opNode = getTNode(operations, {\n node,\n });\n }\n if (opNode) {\n opNode = (\n <span class={CLASS_NAMES.value.treeOperations} ignore=\"active,expand\">\n {opNode}\n </span>\n );\n }\n return opNode;\n };\n\n return () => {\n const { node } = props;\n\n return (\n <div\n ref={nodeRef}\n class={itemClassList.value}\n data-value={node.value}\n data-level={node.level}\n style={itemStyles.value}\n onClick={(evt: MouseEvent) => handleClick(evt)}\n draggable={node.isDraggable()}\n onDragstart={(evt: DragEvent) => handleDragStart(evt)}\n onDragend={(evt: DragEvent) => handleDragEnd(evt)}\n onDragover={(evt: DragEvent) => handleDragOver(evt)}\n onDragleave={(evt: DragEvent) => handleDragLeave(evt)}\n onDrop={(evt: DragEvent) => handleDrop(evt)}\n >\n {renderLine()}\n {renderIcon()}\n {renderLabel()}\n {renderOperations()}\n </div>\n );\n };\n },\n});\n"],"names":["_isVNode","name","props","node","type","onClick","onChange","onDrop","onDragStart","expandOnClickNode","mouseEvent","event","path","setTimeout","nodeRef","setDragStatus","evt","lineNode","parents","_resolveComponent","iconNode","isDefaultIcon","labelNode","isFunction","checkboxDisabled","disabled","opNode","_createVNode"],"mappings":"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"}