@zhouchangju/standard-chart
Version:
标准范式组件
146 lines (145 loc) • 5.17 kB
TypeScript
import type SeriesModelType from 'echarts/types/src/model/Series';
import SeriesModel from 'echarts/lib/model/Series';
import type { default as TreeType, TreeNode } from 'echarts/types/src/data/Tree';
import type SeriesData from 'echarts/types/src/data/SeriesData';
import type { SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin } from 'echarts/types/src/util/types';
import type { LayoutRect } from 'echarts/types/src/util/layout';
import type { GroupProps, PathProps, PathState, TextProps } from 'zrender';
import { NODE_TYPE, STATE } from './twoWayTreeLayout';
type State = {
[key in typeof STATE[keyof typeof STATE]]: PathState;
};
export type RootNodeRenderOption = {
/** 项目(节点)的渲染配置 */
item?: GroupProps & {
/** 子元素节点 */
children?: {
[name: string]: PathProps & {
type?: string;
} & {
states?: State;
};
/** 主文本元素 */
text?: TextProps & {
states?: State;
};
/** 副文本元素 */
attachment?: TextProps & {
states?: State;
};
};
};
/** 线(边)的渲染配置 */
line?: {
/** 子元素节点 */
children?: {
[name: string]: PathProps & {
type?: string;
} & {
states?: State;
};
line?: PathProps & {
states?: State;
};
};
};
};
export type NormalNodeRenderOption = RootNodeRenderOption;
export type GroupNodeRenderOption = {
/** 项目(节点)的渲染配置 */
item?: GroupProps & {
/** 子元素节点 */
children?: {
[name: string]: PathProps & {
type?: string;
} & {
states?: State;
};
/** 标签文本元素 */
labelText?: TextProps & {
states?: State;
};
};
};
/** 线(边)的渲染配置 */
line?: {
/** 子元素节点 */
children?: {
[name: string]: PathProps & {
type?: string;
} & {
states?: State;
};
line?: PathProps & {
states?: State;
};
};
};
};
type RenderOption = {
[NODE_TYPE.ROOT]?: RootNodeRenderOption;
[NODE_TYPE.NORMAL]?: NormalNodeRenderOption;
[NODE_TYPE.GROUP]?: GroupNodeRenderOption;
};
export interface TwoWayTreeSeriesNodeItemOption {
type: typeof NODE_TYPE[keyof typeof NODE_TYPE];
/** 节点的位置(左子树,还是右子树) */
position?: 'left' | 'right';
/** 节点的名称,用来标识每一个节点 */
name?: string;
/** 节点的值,在 tooltip 中显示 */
value?: string;
/** 是否折叠起来(只对 type = 'group' 的节点有效) */
collapsed?: boolean;
/** v0.0.23+ 是否默认选中(只对 type = 'root' | 'normal' 的节点有效),且只在该节点的父节点默认展开时有效 */
selected?: boolean;
/** 渲染配置 */
render: RootNodeRenderOption | NormalNodeRenderOption | GroupNodeRenderOption;
/** 孩子节点 */
children?: TwoWayTreeSeriesNodeItemOption[];
}
export interface TwoWayTreeSeriesOption extends SeriesOption, BoxLayoutOptionMixin, RoamOptionMixin {
type: 'dvTwoWayTree';
data: TwoWayTreeSeriesNodeItemOption;
/** 画布的背景色 */
backgroundColor?: string;
/** 是否支持折叠和展开 */
expandAndCollapse?: boolean;
/** 初始展开的树深度(根节点的深度可认为为 0) */
initialTreeDepth?: number;
/** 选中时高亮祖先节点 */
selectedHighlightAncestor?: boolean;
/** v0.2.2+ 点击 group 类型节点之后清除选中状态 */
clearSelectedAfterClickGroupNode?: boolean;
/** v0.2.2+ 点击交互后聚焦的画布视区中心位置 */
viewCenterAfterClick?: [number, number] | ((arg: {
node: TreeNode;
data: TwoWayTreeSeriesNodeItemOption;
isExpand?: boolean;
isSelected?: boolean;
}) => [number, number]);
/** 节点的渲染配置 */
render?: RenderOption;
}
export type TwoWayTreeSeriesModelClazz = TwoWayTreeSeriesModel & SeriesModelType<TwoWayTreeSeriesOption>;
/**
* 设置为初始状态
*/
export declare function setToInitialState(seriesModel: TwoWayTreeSeriesModelClazz): void;
export default class TwoWayTreeSeriesModel extends SeriesModel<TwoWayTreeSeriesOption> {
static readonly type = "series.dvTwoWayTree";
readonly type = "series.dvTwoWayTree";
static defaultOption: TwoWayTreeSeriesOption;
/**
* Prevent from auto set z, zlevel, z2 by the framework.
*/
preventAutoZ: boolean;
layoutInfo: LayoutRect;
leftTree: TreeType<TwoWayTreeSeriesModelClazz>;
rightTree: TreeType<TwoWayTreeSeriesModelClazz>;
/**
* Init a tree data structure from data in option series
*/
getInitialData(this: TwoWayTreeSeriesModelClazz, option: TwoWayTreeSeriesOption): SeriesData;
}
export {};