UNPKG

echarts

Version:

Apache ECharts is a powerful, interactive charting and data visualization library for browser

169 lines (168 loc) 5.78 kB
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;