tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 24 kB
Source Map (JSON)
{"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 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 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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"}