{"version":3,"file":"tree.mjs","sources":["../../../components/tree/tree.tsx"],"sourcesContent":["import { isFunction, upperFirst } from 'lodash-es';\nimport {\n  defineComponent,\n  getCreateElement,\n  getScopedSlots,\n  TransitionGroup,\n  TreeNode,\n  TypeCreateElement,\n  TypeStyles,\n  TypeTNodeReturnValue,\n  TypeTreeOptionData,\n  useConfig,\n  usePrefixClass,\n} from './utils/adapt';\nimport useDragHandle from './hooks/useDragHandle';\nimport useTreeAction from './hooks/useTreeAction';\nimport useTreeNodes from './hooks/useTreeNodes';\nimport useTreeScroll from './hooks/useTreeScroll';\nimport useTreeState from './hooks/useTreeState';\nimport useTreeStore from './hooks/useTreeStore';\nimport useTreeStyles from './hooks/useTreeStyles';\nimport props from './props';\nimport { TreeNodeState, TreeNodeValue, TypeTreeNodeModel } from './types';\nimport { getNode } from './utils';\nimport { useTNodeJSX } from '@tdesign/shared-hooks';\n\n// 2022.11.02 tabliang 备注\n// 之前尝试实现了嵌套布局，原本预期嵌套布局能够提升大数据量下，全部渲染节点时的性能表现\n// 实测性能提升有限，不如使用虚拟滚动的收益高，反而导致了组件的维护困难与混乱\n// 自 2022 年初首次提出嵌套布局要求，大半年以来，对嵌套布局的需求也不是很高\n// 因此废弃嵌套布局方案，之后重点解决虚拟滚动能力\n\nexport default defineComponent({\n  name: 'TTree',\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  props,\n  setup(props, context) {\n    const { t, global } = useConfig('tree');\n    const classPrefix = usePrefixClass();\n    const componentName = usePrefixClass('tree');\n    const renderTNodeJSX = useTNodeJSX();\n\n    // 用于 hooks 传递数据\n    const { state } = useTreeState(props, context);\n    const { treeContentRef, isScrolling } = state;\n    const { store, updateStoreConfig, rebuild } = useTreeStore(state);\n\n    useDragHandle(state);\n    const { setActived, setExpanded, setChecked } = useTreeAction(state);\n    const { onInnerVirtualScroll, virtualConfig, scrollToElement } = useTreeScroll(state);\n    const { renderTreeNodes, nodesEmpty } = useTreeNodes(state);\n    const { treeClasses, treeContentStyles, scrollStyles, cursorStyles } = useTreeStyles(state);\n\n    // 不想暴露给用户的属性与方法，统一挂载到 setup 返回的对象上\n    // 实例上无法直接访问这些方法与属性\n    return {\n      t,\n      global,\n      classPrefix,\n      componentName,\n      state,\n      store,\n      treeClasses,\n      treeContentRef,\n      renderTNodeJSX,\n\n      rebuild,\n      updateStoreConfig,\n      setActived,\n      setExpanded,\n      setChecked,\n      renderTreeNodes,\n      nodesEmpty,\n\n      isScrolling,\n      onInnerVirtualScroll,\n      treeContentStyles,\n      scrollStyles,\n      cursorStyles,\n      virtualConfig,\n      scrollToElement: scrollToElement, // deprecated\n      scrollTo: scrollToElement,\n    };\n  },\n\n  watch: {\n    // 实测发现，composition api 中的 refsProps watch ，回调时间迟于 $nextTick 回调\n    // 因此改为在这里绑定 data 属性监听，实测这里的 watch 回调，早于 $nextTick 回调发生\n    data(list) {\n      this.rebuild(list);\n    },\n  },\n  // 在 methods 提供公共方法\n  // 实例上可以直接访问\n  methods: {\n    // 刷新树节点状态\n    refresh(): void {\n      this.store.refreshState();\n    },\n    // 设置目标节点状态\n    setItem(value: TreeNodeValue, options: TreeNodeState): void {\n      const node: TreeNode = this.store.getNode(value);\n      const spec = options;\n      const keys = Object.keys(spec);\n      if (node && spec) {\n        ['expanded', 'actived', 'checked'].forEach((name) => {\n          if (keys.includes(name)) {\n            const val = spec[name as keyof typeof spec];\n            delete spec[name as keyof typeof spec];\n            const methodName = `set${upperFirst(name)}`;\n            // @ts-ignore TODO\n            const setupMethod = this[methodName];\n            if (isFunction(setupMethod)) {\n              setupMethod.call(this, node, val);\n            }\n          }\n        });\n        node.set(spec);\n      }\n    },\n    // 获取目标节点\n    getItem(value: TreeNodeValue): TypeTreeNodeModel {\n      const node: TreeNode = this.store.getNode(value);\n      return node?.getModel();\n    },\n    // 无 value 参数: 获取 tree 所有节点，一维结构\n    // 传递 value 参数: 获取节点值对应的目标节点下，包含自己在内的所有子节点\n    getItems(value?: TreeNodeValue): TypeTreeNodeModel[] {\n      const nodes = this.store.getNodes(value);\n      return nodes.map((node: TreeNode) => node.getModel());\n    },\n    // 将节点数据插入到目标节点\n    // 无目标节点，则插入为根节点\n    appendTo(para?: TreeNodeValue, item?: TypeTreeOptionData | TypeTreeOptionData[]) {\n      const { store } = this;\n      let list = [];\n      if (Array.isArray(item)) {\n        list = item;\n      } else {\n        list = [item];\n      }\n      list.forEach((item) => {\n        const val = item?.value || '';\n        const node = getNode(store, val);\n        if (node) {\n          store.appendNodes(para, node);\n        } else {\n          store.appendNodes(para, item);\n        }\n      });\n    },\n    // 在指定节点之前插入单个节点数据\n    insertBefore(value: TreeNodeValue, item: TypeTreeOptionData) {\n      const { store } = this;\n      const val = item?.value || '';\n      const node = getNode(store, val);\n      if (node) {\n        store.insertBefore(value, node);\n      } else {\n        store.insertBefore(value, item);\n      }\n    },\n    // 在指定节点之后插入单个节点数据\n    insertAfter(value: TreeNodeValue, item: TypeTreeOptionData) {\n      const { store } = this;\n      const val = item?.value || '';\n      const node = getNode(store, val);\n      if (node) {\n        store.insertAfter(value, node);\n      } else {\n        store.insertAfter(value, item);\n      }\n    },\n    // 移除目标节点\n    remove(value?: TreeNodeValue) {\n      return this.store.remove(value);\n    },\n    // 获取节点在当前层级的 index\n    getIndex(value: TreeNodeValue): number {\n      return this.store.getNodeIndex(value);\n    },\n    // 获取父节点\n    getParent(value: TreeNodeValue): TypeTreeNodeModel {\n      const node = this.store.getParent(value);\n      return node?.getModel();\n    },\n    // 获取父节点列表\n    getParents(value: TreeNodeValue): TypeTreeNodeModel[] {\n      const nodes = this.store.getParents(value);\n      return nodes.map((node: TreeNode) => node.getModel());\n    },\n    // 获取路径节点列表\n    getPath(value: TreeNodeValue): TypeTreeNodeModel[] {\n      const node = this.store.getNode(value);\n      let pathNodes: TypeTreeNodeModel[] = [];\n      if (node) {\n        pathNodes = node.getPath().map((node: TreeNode) => node.getModel());\n      }\n      return pathNodes;\n    },\n    // 提供树结构原始数据\n    getTreeData(value?: TreeNodeValue): TypeTreeOptionData[] {\n      let list: TreeNode[] = [];\n      if (value) {\n        const node = this.store.getNode(value);\n        if (!node) return [];\n        list = this.store.getNodes(value);\n      } else {\n        list = this.store.getNodes();\n      }\n      // 一维结构树节点转树结构数据\n      const nodeMap: Record<string, TreeNodeState & { value: string; children?: TreeNodeState[] | boolean }> = {};\n      const treeNodes: TypeTreeOptionData[] = [];\n      list.forEach((item: TreeNode) => {\n        const { value } = item;\n        const itemData = {\n          ...item.data,\n          value,\n        };\n        if (itemData.children !== true) {\n          delete itemData.children;\n        }\n        nodeMap[value] = itemData;\n        const parent = item.getParent();\n        if (!parent) {\n          // 是根节点\n          treeNodes.push(itemData);\n        } else {\n          const parentData = nodeMap[parent.value];\n          if (!parentData) {\n            // 为目标节点范围内的根节点\n            treeNodes.push(itemData);\n          } else {\n            if (!Array.isArray(parentData.children)) {\n              parentData.children = [];\n            }\n            parentData.children.push(itemData);\n          }\n        }\n      });\n      return treeNodes;\n    },\n  },\n  render(h: TypeCreateElement) {\n    const {\n      state,\n      treeClasses,\n      updateStoreConfig,\n      renderTreeNodes,\n      nodesEmpty,\n      isScrolling,\n      virtualConfig,\n      treeContentStyles,\n      scrollStyles,\n      cursorStyles,\n    } = this;\n\n    const createElement = getCreateElement(h);\n\n    const { scope, allNodes, refProps } = state;\n    // 更新 scopedSlots\n    scope.scopedSlots = getScopedSlots(this);\n\n    updateStoreConfig();\n\n    const treeNodeViews = renderTreeNodes(createElement);\n    const cname = this.componentName;\n    const isVirtual = virtualConfig.isVirtualScroll.value;\n\n    // 空数据判定\n    let emptyNode: TypeTNodeReturnValue = null;\n    if (nodesEmpty) {\n      const useLocale = !this.empty && !this.$slots.empty;\n      const emptyContent = useLocale ? this.t(this.global.empty) : this.renderTNodeJSX('empty');\n      emptyNode = <div class={`${cname}__empty`}>{emptyContent}</div>;\n    } else if (treeNodeViews.length <= 0) {\n      // 数据切换时，有闪现的缓存节点呈现\n      // 用这个替换内容置空\n      emptyNode = <div></div>;\n    }\n\n    // 构造列表\n    const { $props } = this;\n    const { transition } = $props;\n\n    let treeNodeList = null;\n    if (!transition || (isVirtual && isScrolling)) {\n      // vue3 不使用 transition group 会导致展开收起动作异常\n      treeNodeList = (\n        <div class={`${cname}__list`} style={scrollStyles}>\n          {treeNodeViews}\n        </div>\n      );\n    } else {\n      // 启用动画时，需要确保滚动中动画样式失效\n      treeNodeList = (\n        <TransitionGroup\n          tag=\"div\"\n          // @ts-ignore\n          class={`${cname}__list`}\n          enter-active-class={`${cname}__item--enter-active`}\n          leave-active-class={`${cname}__item--leave-active`}\n          style={scrollStyles}\n        >\n          {treeNodeViews}\n        </TransitionGroup>\n      );\n    }\n\n    const topValue =\n      (allNodes.value?.filter((node) => node.visible).length ?? 0) * (refProps.scroll.value?.rowHeight ?? 34);\n    const placeholderStyles: TypeStyles = {\n      width: '1px',\n      height: '1px',\n      opacity: 0,\n      pointerEvents: 'none',\n      position: 'absolute',\n      left: 0,\n      top: `${topValue}px`,\n    };\n\n    const placeholderEl = <div style={placeholderStyles} />;\n\n    const treeNode = (\n      <div class={treeClasses} ref=\"treeContentRef\" onScroll={this.onInnerVirtualScroll} style={treeContentStyles}>\n        {isVirtual && <div class={`${cname}__vscroll-cursor`} style={cursorStyles} />}\n        {emptyNode || treeNodeList}\n        {isVirtual && placeholderEl}\n      </div>\n    );\n\n    return treeNode;\n  },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","model","prop","event","props","setup","context","_useConfig","useConfig","t","global","classPrefix","usePrefixClass","componentName","renderTNodeJSX","useTNodeJSX","_useTreeState","useTreeState","state","treeContentRef","isScrolling","_useTreeStore","useTreeStore","store","updateStoreConfig","rebuild","useDragHandle","_useTreeAction","useTreeAction","setActived","setExpanded","setChecked","_useTreeScroll","useTreeScroll","onInnerVirtualScroll","virtualConfig","scrollToElement","_useTreeNodes","useTreeNodes","renderTreeNodes","nodesEmpty","_useTreeStyles","useTreeStyles","treeClasses","treeContentStyles","scrollStyles","cursorStyles","scrollTo","watch","data","list","methods","refresh","refreshState","setItem","value","options","_this","node","getNode","spec","keys","forEach","includes","val","methodName","concat","upperFirst","setupMethod","isFunction","set","getItem","getModel","getItems","nodes","getNodes","map","appendTo","para","item","Array","isArray","appendNodes","insertBefore","insertAfter","remove","getIndex","getNodeIndex","getParent","getParents","getPath","pathNodes","getTreeData","nodeMap","treeNodes","itemData","_objectSpread","children","parent","push","parentData","render","h","_allNodes$value$filte","_allNodes$value","_refProps$scroll$valu","_refProps$scroll$valu2","createElement","getCreateElement","scope","allNodes","refProps","scopedSlots","getScopedSlots","treeNodeViews","cname","isVirtual","isVirtualScroll","emptyNode","useLocale","empty","$slots","emptyContent","_createVNode","length","$props","transition","treeNodeList","TransitionGroup","topValue","filter","visible","scroll","rowHeight","placeholderStyles","width","height","opacity","pointerEvents","position","left","top","placeholderEl","treeNode"],"mappings":"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"}