123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- import Model from '../model/Model.js';
- import SeriesData from './SeriesData.js';
- import { DimensionLoose, ParsedValue, OptionDataValue, OptionDataItemObject } from '../util/types.js';
- import { Dictionary } from 'zrender/lib/core/types.js';
- declare type TreeTraverseOrder = 'preorder' | 'postorder';
- declare type TreeTraverseCallback<Ctx> = (this: Ctx, node: TreeNode) => boolean | void;
- declare type TreeTraverseOption = {
- order?: TreeTraverseOrder;
- attr?: 'children' | 'viewChildren';
- };
- interface TreeNodeOption extends Pick<OptionDataItemObject<OptionDataValue>, 'name' | 'value'> {
- children?: TreeNodeOption[];
- }
- export declare class TreeNode {
- name: string;
- depth: number;
- height: number;
- parentNode: TreeNode;
- /**
- * Reference to list item.
- * Do not persistent dataIndex outside,
- * besause it may be changed by list.
- * If dataIndex -1,
- * this node is logical deleted (filtered) in list.
- */
- dataIndex: number;
- children: TreeNode[];
- viewChildren: TreeNode[];
- isExpand: boolean;
- readonly hostTree: Tree<Model>;
- constructor(name: string, hostTree: Tree<Model>);
- /**
- * The node is removed.
- */
- isRemoved(): boolean;
- /**
- * Travel this subtree (include this node).
- * Usage:
- * node.eachNode(function () { ... }); // preorder
- * node.eachNode('preorder', function () { ... }); // preorder
- * node.eachNode('postorder', function () { ... }); // postorder
- * node.eachNode(
- * {order: 'postorder', attr: 'viewChildren'},
- * function () { ... }
- * ); // postorder
- *
- * @param options If string, means order.
- * @param options.order 'preorder' or 'postorder'
- * @param options.attr 'children' or 'viewChildren'
- * @param cb If in preorder and return false,
- * its subtree will not be visited.
- */
- eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
- eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
- eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
- /**
- * Update depth and height of this subtree.
- */
- updateDepthAndHeight(depth: number): void;
- getNodeById(id: string): TreeNode;
- contains(node: TreeNode): boolean;
- /**
- * @param includeSelf Default false.
- * @return order: [root, child, grandchild, ...]
- */
- getAncestors(includeSelf?: boolean): TreeNode[];
- getAncestorsIndices(): number[];
- getDescendantIndices(): number[];
- getValue(dimension?: DimensionLoose): ParsedValue;
- setLayout(layout: any, merge?: boolean): void;
- /**
- * @return {Object} layout
- */
- getLayout(): any;
- getModel<T = unknown>(): Model<T>;
- getLevelModel(): Model;
- /**
- * @example
- * setItemVisual('color', color);
- * setItemVisual({
- * 'color': color
- * });
- */
- setVisual(key: string, value: any): void;
- setVisual(obj: Dictionary<any>): void;
- /**
- * Get item visual
- * FIXME: make return type better
- */
- getVisual(key: string): unknown;
- getRawIndex(): number;
- getId(): string;
- /**
- * index in parent's children
- */
- getChildIndex(): number;
- /**
- * if this is an ancestor of another node
- *
- * @param node another node
- * @return if is ancestor
- */
- isAncestorOf(node: TreeNode): boolean;
- /**
- * if this is an descendant of another node
- *
- * @param node another node
- * @return if is descendant
- */
- isDescendantOf(node: TreeNode): boolean;
- }
- declare class Tree<HostModel extends Model = Model, LevelOption = any> {
- type: 'tree';
- root: TreeNode;
- data: SeriesData;
- hostModel: HostModel;
- levelModels: Model<LevelOption>[];
- private _nodes;
- constructor(hostModel: HostModel);
- /**
- * Travel this subtree (include this node).
- * Usage:
- * node.eachNode(function () { ... }); // preorder
- * node.eachNode('preorder', function () { ... }); // preorder
- * node.eachNode('postorder', function () { ... }); // postorder
- * node.eachNode(
- * {order: 'postorder', attr: 'viewChildren'},
- * function () { ... }
- * ); // postorder
- *
- * @param options If string, means order.
- * @param options.order 'preorder' or 'postorder'
- * @param options.attr 'children' or 'viewChildren'
- * @param cb
- * @param context
- */
- eachNode<Ctx>(options: TreeTraverseOrder, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
- eachNode<Ctx>(options: TreeTraverseOption, cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
- eachNode<Ctx>(cb: TreeTraverseCallback<Ctx>, context?: Ctx): void;
- getNodeByDataIndex(dataIndex: number): TreeNode;
- getNodeById(name: string): TreeNode;
- /**
- * Update item available by list,
- * when list has been performed options like 'filterSelf' or 'map'.
- */
- update(): void;
- /**
- * Clear all layouts
- */
- clearLayouts(): void;
- /**
- * data node format:
- * {
- * name: ...
- * value: ...
- * children: [
- * {
- * name: ...
- * value: ...
- * children: ...
- * },
- * ...
- * ]
- * }
- */
- static createTree<T extends TreeNodeOption, HostModel extends Model>(dataRoot: T, hostModel: HostModel, beforeLink?: (data: SeriesData) => void): Tree<HostModel, any>;
- }
- export default Tree;
|