UNPKG

4.27 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.getSmoothViolinPath = exports.getViolinPath = exports.getPathPoints = void 0;
4var util_1 = require("@antv/util");
5var path_1 = require("./path");
6function isValueEmpty(value) {
7 if (value) {
8 return false;
9 }
10 return value === null || value === undefined || isNaN(value);
11}
12function isYNil(point) {
13 if ((0, util_1.isArray)(point)) {
14 // 特殊处理 area 的关键点数据,其关键点结构为 [{x: 0, y: 1}, {x: 0, y: 2}]
15 return isValueEmpty(point[1].y);
16 }
17 var value = point.y;
18 return (0, util_1.isArray)(value) ? isValueEmpty(value[0]) : isValueEmpty(value);
19}
20/**
21 * @ignore
22 * 分割数据,用于处理在一组点数据中,y 对应的数值存在 null/undefined/NaN 的情况
23 * 应用于折线图、区域图以及路径图
24 *
25 * ```typescript
26 * // return [[{x: 1, y: 2}, {x: 3, y: 3}]]
27 * getPathPoints([{x: 1, y: 2}, {x: 2, y: null}, {x: 3, y: 3}], true);
28 * // return [[{x: 1, y: 2}], [{x: 3, y: 3}]]
29 * getPathPoints([{x: 1, y: 2}, {x: 2, y: null}, {x: 3, y: 3}], false);
30 * // return [[[{ x: 1, y: 10 }, { x: 2, y: 2 }], [{ x: 9, y: 34 }, { x: 1, y: 1 }]]]
31 * getPathPoints([
32 * [{ x: 1, y: 10 }, { x: 2, y: 2 }],
33 * [{ x: 4, y: 2 }, { x: 8, y: NaN }],
34 * [{ x: 9, y: 34 }, { x: 1, y: 1 }],
35 * ], true);
36 * ```
37 *
38 * @param points 要进行处理点集合
39 * @param connectNulls 是否连接空值数据
40 * @param showSinglePoint 是否展示孤立点
41 * @returns 返回处理后的点集合
42 */
43function getPathPoints(points, connectNulls, showSinglePoint) {
44 if (connectNulls === void 0) { connectNulls = false; }
45 if (showSinglePoint === void 0) { showSinglePoint = true; }
46 if (!points.length || (points.length === 1 && !showSinglePoint)) {
47 // 空或者只有一个点并配置不展示时
48 return [];
49 }
50 if (connectNulls) {
51 // 即 y 值为空的场景
52 var filtered = [];
53 for (var i = 0, len = points.length; i < len; i++) {
54 var point = points[i];
55 if (!isYNil(point)) {
56 filtered.push(point);
57 }
58 }
59 return [filtered];
60 }
61 var result = [];
62 var tmp = [];
63 for (var i = 0, len = points.length; i < len; i++) {
64 var point = points[i];
65 if (isYNil(point)) {
66 if (tmp.length) {
67 if (!(tmp.length === 1 && !showSinglePoint)) {
68 // 如果前段数据只有一个字段并且不需要展示时则不加入
69 result.push(tmp);
70 }
71 tmp = [];
72 }
73 }
74 else {
75 tmp.push(point);
76 }
77 }
78 if (tmp.length) {
79 result.push(tmp);
80 }
81 return result;
82}
83exports.getPathPoints = getPathPoints;
84/**
85 * 获取小提琴图的边界 path
86 * @param points
87 * @returns
88 */
89function getViolinPath(points) {
90 var path = [];
91 for (var i = 0; i < points.length; i++) {
92 var point = points[i];
93 if (point) {
94 var action = i === 0 ? 'M' : 'L';
95 path.push([action, point.x, point.y]);
96 }
97 }
98 var first = points[0];
99 if (first) {
100 path.push(['L', first.x, first.y]);
101 path.push(['z']);
102 }
103 return path;
104}
105exports.getViolinPath = getViolinPath;
106/**
107 * 获取小提琴图 平滑的边界 path
108 * @param points
109 * @returns
110 */
111function getSmoothViolinPath(points) {
112 var half = points.length / 2;
113 var leftPoints = [];
114 var rightPoints = [];
115 for (var i = 0; i < points.length; i++) {
116 if (i < half) {
117 leftPoints.push(points[i]);
118 }
119 else {
120 rightPoints.push(points[i]);
121 }
122 }
123 var leftPath = (0, path_1.getSplinePath)(leftPoints, false);
124 var rightPath = (0, path_1.getSplinePath)(rightPoints, false);
125 if (rightPoints.length) {
126 leftPath.push(['L', rightPoints[0].x, rightPoints[0].y]);
127 }
128 rightPath.shift();
129 var path = leftPath.concat(rightPath);
130 if (leftPoints.length) {
131 path.push(['L', leftPoints[0].x, leftPoints[0].y]);
132 }
133 path.push(['z']);
134 return path;
135}
136exports.getSmoothViolinPath = getSmoothViolinPath;
137//# sourceMappingURL=get-path-points.js.map
\No newline at end of file