vxe-pc-ui
Version:
A vue based PC component library
46 lines (40 loc) • 1.64 kB
text/typescript
import XEUtils from 'xe-utils'
import type { VxeTreeConstructor } from '../../../types'
export function enNodeValue (nodeid: string | number | null) {
return XEUtils.eqNull(nodeid) ? '' : encodeURIComponent(`${nodeid}`)
}
export function deNodeValue (nodeid: string | number | null) {
return nodeid ? decodeURIComponent(`${nodeid}`) : nodeid
}
function countTreeExpand ($xeTree: VxeTreeConstructor, prevNode: any) {
let count = 1
if (!prevNode) {
return count
}
const props = $xeTree.props
const { transform } = props
const reactData = $xeTree.reactData
const { updateExpandedFlag } = reactData
const internalData = $xeTree.internalData
const { treeExpandedMaps } = internalData
const { computeChildrenField, computeMapChildrenField } = $xeTree.getComputeMaps()
const childrenField = computeChildrenField.value
const mapChildrenField = computeMapChildrenField.value
const nodeChildren = prevNode[transform ? mapChildrenField : childrenField]
if (nodeChildren && updateExpandedFlag && treeExpandedMaps[$xeTree.getNodeId(prevNode)]) {
for (let index = 0; index < nodeChildren.length; index++) {
count += countTreeExpand($xeTree, nodeChildren[index])
}
}
return count
}
export function calcTreeLine ($xeTree: VxeTreeConstructor, node: any, prevNode: any) {
const internalData = $xeTree.internalData
const { scrollYStore } = internalData
const { rowHeight } = scrollYStore
let expandSize = 1
if (prevNode) {
expandSize = countTreeExpand($xeTree, prevNode)
}
return (rowHeight || 28) * expandSize - (prevNode ? 1 : 12)
}