eyzy-tree
Version:
React tree component
46 lines (38 loc) • 1.14 kB
text/typescript
import { TreeNode } from '../types/Node'
import uuid from './uuid'
import { isArray, isString } from './index'
export function parseNode(data: any, parentNode?: TreeNode | null): TreeNode[] {
if (!isArray(data)) {
return parseNode([data], parentNode)
}
const parent = parentNode || null
return data
.reduce((result: TreeNode[], node: TreeNode): TreeNode[] => {
if ('number' === typeof node || !node) {
return result
}
if ('string' === typeof node) {
result.push({
id: uuid(),
text: node,
parent,
child: [],
data: {}
})
} else if (isArray(node)) {
result.push(...parseNode(node, parentNode))
} else {
node.id = node.id || uuid()
node.child = isArray(node.child)
? parseNode(node.child, node)
: []
if (!node.data) {
node.data = {}
}
node.parent = parent
result.push(node)
}
return result
}, [])
.filter((node: TreeNode) => node.text && isString(node.text))
}