* data node format: * { * name: ... * value: ... * children: [ * { * name: ... * value: ... * children: ... * }, * ... * ] * }
(
dataRoot: T,
hostModel: HostModel,
beforeLink?: (data: SeriesData) => void
)
| 414 | * } |
| 415 | */ |
| 416 | static createTree<T extends TreeNodeOption, HostModel extends Model>( |
| 417 | dataRoot: T, |
| 418 | hostModel: HostModel, |
| 419 | beforeLink?: (data: SeriesData) => void |
| 420 | ) { |
| 421 | |
| 422 | const tree = new Tree(hostModel); |
| 423 | const listData: TreeNodeOption[] = []; |
| 424 | let dimMax = 1; |
| 425 | |
| 426 | buildHierarchy(dataRoot); |
| 427 | |
| 428 | function buildHierarchy(dataNode: TreeNodeOption, parentNode?: TreeNode) { |
| 429 | const value = dataNode.value; |
| 430 | dimMax = Math.max(dimMax, zrUtil.isArray(value) ? value.length : 1); |
| 431 | |
| 432 | listData.push(dataNode); |
| 433 | |
| 434 | const node = new TreeNode(convertOptionIdName(dataNode.name, ''), tree); |
| 435 | parentNode |
| 436 | ? addChild(node, parentNode) |
| 437 | : (tree.root = node); |
| 438 | |
| 439 | tree._nodes.push(node); |
| 440 | |
| 441 | const children = dataNode.children; |
| 442 | if (children) { |
| 443 | for (let i = 0; i < children.length; i++) { |
| 444 | buildHierarchy(children[i], node); |
| 445 | } |
| 446 | } |
| 447 | } |
| 448 | |
| 449 | tree.root.updateDepthAndHeight(0); |
| 450 | |
| 451 | const { dimensions } = prepareSeriesDataSchema(listData, { |
| 452 | coordDimensions: ['value'], |
| 453 | dimensionsCount: dimMax |
| 454 | }); |
| 455 | |
| 456 | const list = new SeriesData(dimensions, hostModel); |
| 457 | list.initData(listData); |
| 458 | |
| 459 | beforeLink && beforeLink(list); |
| 460 | |
| 461 | linkSeriesData({ |
| 462 | mainData: list, |
| 463 | struct: tree, |
| 464 | structAttr: 'tree' |
| 465 | }); |
| 466 | |
| 467 | tree.update(); |
| 468 | |
| 469 | return tree; |
| 470 | } |
| 471 | |
| 472 | } |
| 473 |
no test coverage detected