{"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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"}