3580b6a87f1bf09495154b378678c5a054b5658ea065abc9ec21fc3319626c5a2b75f138caffdf59de6e12709e9860445e4074df955af0a9d8c53b45ca686c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import Model from '../model/Model.js';
  2. import SeriesData from './SeriesData.js';
  3. import { DimensionLoose, ParsedValue, OptionDataValue, OptionDataItemObject } from '../util/types.js';
  4. import { Dictionary } from 'zrender/lib/core/types.js';
  5. declare type TreeTraverseOrder = 'preorder' | 'postorder';
  6. declare type TreeTraverseCallback<Ctx> = (this: Ctx, node: TreeNode) => boolean | void;
  7. declare type TreeTraverseOption = {
  8. order?: TreeTraverseOrder;
  9. attr?: 'children' | 'viewChildren';
  10. };
  11. interface TreeNodeOption extends Pick<OptionDataItemObject<OptionDataValue>, 'name' | 'value'> {
  12. children?: TreeNodeOption[];
  13. }
  14. export declare class TreeNode {
  15. name: string;
  16. depth: number;
  17. height: number;
  18. parentNode: TreeNode;
  19. /**
  20. * Reference to list item.
  21. * Do not persistent dataIndex outside,
  22. * besause it may be changed by list.
  23. * If dataIndex -1,
  24. * this node is logical deleted (filtered) in list.
  25. */
  26. dataIndex: number;
  27. children: TreeNode[];
  28. viewChildren: TreeNode[];
  29. isExpand: boolean;
  30. readonly hostTree: Tree<Model>;
  31. constructor(name: string, hostTree: Tree<Model>);
  32. /**
  33. * The node is removed.
  34. */
  35. isRemoved(): boolean;
  36. /**
  37. * Travel this subtree (include this node).
  38. * Usage:
  39. * node.eachNode(function () { ... }); // preorder
  40. * node.eachNode('preorder', function () { ... }); // preorder
  41. * node.eachNode('postorder', function () { ... }); // postorder
  42. * node.eachNode(
  43. * {order: 'postorder', attr: 'viewChildren'},
  44. * function () { ... }
  45. * ); // postorder
  46. *
  47. * @param options If string, means order.
  48. * @param options.order 'preorder' or 'postorder'
  49. * @param options.attr 'children' or 'viewChildren'
  50. * @param cb If in preorder and return false,
  51. * its subtree will not be visited.
  52. */
  53. eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
  54. eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
  55. eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
  56. /**
  57. * Update depth and height of this subtree.
  58. */
  59. updateDepthAndHeight(depth: number): void;
  60. getNodeById(id: string): TreeNode;
  61. contains(node: TreeNode): boolean;
  62. /**
  63. * @param includeSelf Default false.
  64. * @return order: [root, child, grandchild, ...]
  65. */
  66. getAncestors(includeSelf?: boolean): TreeNode[];
  67. getAncestorsIndices(): number[];
  68. getDescendantIndices(): number[];
  69. getValue(dimension?: DimensionLoose): ParsedValue;
  70. setLayout(layout: any, merge?: boolean): void;
  71. /**
  72. * @return {Object} layout
  73. */
  74. getLayout(): any;
  75. getModel<T = unknown>(): Model<T>;
  76. getLevelModel(): Model;
  77. /**
  78. * @example
  79. * setItemVisual('color', color);
  80. * setItemVisual({
  81. * 'color': color
  82. * });
  83. */
  84. setVisual(key: string, value: any): void;
  85. setVisual(obj: Dictionary<any>): void;
  86. /**
  87. * Get item visual
  88. * FIXME: make return type better
  89. */
  90. getVisual(key: string): unknown;
  91. getRawIndex(): number;
  92. getId(): string;
  93. /**
  94. * index in parent's children
  95. */
  96. getChildIndex(): number;
  97. /**
  98. * if this is an ancestor of another node
  99. *
  100. * @param node another node
  101. * @return if is ancestor
  102. */
  103. isAncestorOf(node: TreeNode): boolean;
  104. /**
  105. * if this is an descendant of another node
  106. *
  107. * @param node another node
  108. * @return if is descendant
  109. */
  110. isDescendantOf(node: TreeNode): boolean;
  111. }
  112. declare class Tree<HostModel extends Model = Model, LevelOption = any> {
  113. type: 'tree';
  114. root: TreeNode;
  115. data: SeriesData;
  116. hostModel: HostModel;
  117. levelModels: Model<LevelOption>[];
  118. private _nodes;
  119. constructor(hostModel: HostModel);
  120. /**
  121. * Travel this subtree (include this node).
  122. * Usage:
  123. * node.eachNode(function () { ... }); // preorder
  124. * node.eachNode('preorder', function () { ... }); // preorder
  125. * node.eachNode('postorder', function () { ... }); // postorder
  126. * node.eachNode(
  127. * {order: 'postorder', attr: 'viewChildren'},
  128. * function () { ... }
  129. * ); // postorder
  130. *
  131. * @param options If string, means order.
  132. * @param options.order 'preorder' or 'postorder'
  133. * @param options.attr 'children' or 'viewChildren'
  134. * @param cb
  135. * @param context
  136. */
  137. eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
  138. eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
  139. eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
  140. getNodeByDataIndex(dataIndex: number): TreeNode;
  141. getNodeById(name: string): TreeNode;
  142. /**
  143. * Update item available by list,
  144. * when list has been performed options like 'filterSelf' or 'map'.
  145. */
  146. update(): void;
  147. /**
  148. * Clear all layouts
  149. */
  150. clearLayouts(): void;
  151. /**
  152. * data node format:
  153. * {
  154. * name: ...
  155. * value: ...
  156. * children: [
  157. * {
  158. * name: ...
  159. * value: ...
  160. * children: ...
  161. * },
  162. * ...
  163. * ]
  164. * }
  165. */
  166. static createTree<T extends TreeNodeOption, HostModel extends Model>(dataRoot: T, hostModel: HostModel, beforeLink?: (data: SeriesData) => void): Tree<HostModel, any>;
  167. }
  168. export default Tree;