echarts
Version:
Apache ECharts is a powerful, interactive charting and data visualization library for browser
169 lines (168 loc) • 5.78 kB
TypeScript
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;