@antv/g2plot
Version:
An interactive and responsive charting library
59 lines (52 loc) • 1.36 kB
text/typescript
import { Element, Geometry, View } from '@antv/g2';
import { get, reduce } from '@antv/util';
/**
* 在 View 中查找第一个指定 type 类型的 geometry
* @param view
* @param type
*/
export function findGeometry(view: View, type: string): Geometry {
return view.geometries.find((g: Geometry) => g.type === type);
}
/**
* 获取 View 的 所有 elements
*/
export function getAllElements(view: View): Element[] {
return reduce(
view.geometries,
(r: Element[], geometry: Geometry) => {
return r.concat(geometry.elements);
},
[]
);
}
/**
* 递归获取 View 的 所有 elements, 包括 View 的子 View
*/
export function getAllElementsRecursively(view: View): Element[] {
if (get(view, ['views', 'length'], 0) <= 0) {
return getAllElements(view);
}
return reduce(
view.views,
(ele: Element[], subView: View) => {
return ele.concat(getAllElementsRecursively(subView));
},
getAllElements(view)
);
}
/**
* 递归获取 View 的 所有 geometries, 包括 View 的子 View
*/
export function getAllGeometriesRecursively(view: View): Geometry[] {
if (get(view, ['views', 'length'], 0) <= 0) {
return view.geometries;
}
return reduce(
view.views,
(ele: Geometry[], subView: View) => {
return ele.concat(subView.geometries);
},
view.geometries
);
}