@visactor/vchart 1.9.3-alpha.2 → 1.9.3-hotfix.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.js +179 -312
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/base/base-chart.d.ts +1 -1
- package/cjs/chart/base/base-chart.js.map +1 -1
- package/cjs/component/axis/cartesian/axis.js +4 -4
- package/cjs/component/axis/cartesian/axis.js.map +1 -1
- package/cjs/component/axis/polar/axis.js +17 -9
- package/cjs/component/axis/polar/axis.js.map +1 -1
- package/cjs/component/axis/polar/util/common.d.ts +1 -5
- package/cjs/component/axis/polar/util/common.js +4 -8
- package/cjs/component/axis/polar/util/common.js.map +1 -1
- package/cjs/component/custom-mark/custom-mark.d.ts +2 -1
- package/cjs/component/custom-mark/custom-mark.js.map +1 -1
- package/cjs/component/label/util.js +3 -3
- package/cjs/component/label/util.js.map +1 -1
- package/cjs/component/marker/mark-area/mark-area.js +11 -16
- package/cjs/component/marker/mark-area/mark-area.js.map +1 -1
- package/cjs/component/marker/mark-line/mark-line.js +1 -1
- package/cjs/component/marker/mark-line/mark-line.js.map +1 -1
- package/cjs/component/marker/mark-point/mark-point.js +5 -2
- package/cjs/component/marker/mark-point/mark-point.js.map +1 -1
- package/cjs/component/player/utils/transform.js +2 -2
- package/cjs/component/player/utils/transform.js.map +1 -1
- package/cjs/constant/event.js +1 -2
- package/cjs/constant/scroll-bar.js +2 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/data/transforms/pie.js +4 -4
- package/cjs/data/transforms/pie.js.map +1 -1
- package/cjs/data/transforms/waterfall.js +30 -105
- package/cjs/data/transforms/waterfall.js.map +1 -1
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/line/interface.d.ts +1 -1
- package/cjs/series/line/interface.js.map +1 -1
- package/cjs/series/sankey/interface.d.ts +2 -2
- package/cjs/series/sankey/interface.js.map +1 -1
- package/cjs/series/word-cloud/config.js +1 -1
- package/cjs/series/word-cloud/config.js.map +1 -1
- package/cjs/typings/spec/common.d.ts +20 -20
- package/cjs/typings/spec/common.js.map +1 -1
- package/cjs/util/math.d.ts +0 -1
- package/cjs/util/math.js +2 -18
- package/cjs/util/math.js.map +1 -1
- package/esm/chart/base/base-chart.d.ts +1 -1
- package/esm/chart/base/base-chart.js.map +1 -1
- package/esm/component/axis/cartesian/axis.js +1 -1
- package/esm/component/axis/cartesian/axis.js.map +1 -1
- package/esm/component/axis/polar/axis.js +18 -9
- package/esm/component/axis/polar/axis.js.map +1 -1
- package/esm/component/axis/polar/util/common.d.ts +1 -5
- package/esm/component/axis/polar/util/common.js +4 -12
- package/esm/component/axis/polar/util/common.js.map +1 -1
- package/esm/component/custom-mark/custom-mark.d.ts +2 -1
- package/esm/component/custom-mark/custom-mark.js.map +1 -1
- package/esm/component/label/util.js +6 -1
- package/esm/component/label/util.js.map +1 -1
- package/esm/component/marker/mark-area/mark-area.js +10 -16
- package/esm/component/marker/mark-area/mark-area.js.map +1 -1
- package/esm/component/marker/mark-line/mark-line.js +1 -1
- package/esm/component/marker/mark-line/mark-line.js.map +1 -1
- package/esm/component/marker/mark-point/mark-point.js +5 -2
- package/esm/component/marker/mark-point/mark-point.js.map +1 -1
- package/esm/component/player/utils/transform.js +2 -2
- package/esm/component/player/utils/transform.js.map +1 -1
- package/esm/constant/event.js +1 -2
- package/esm/constant/scroll-bar.js +2 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/data/transforms/pie.js +5 -5
- package/esm/data/transforms/pie.js.map +1 -1
- package/esm/data/transforms/waterfall.js +27 -103
- package/esm/data/transforms/waterfall.js.map +1 -1
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/line/interface.d.ts +1 -1
- package/esm/series/line/interface.js.map +1 -1
- package/esm/series/sankey/interface.d.ts +2 -2
- package/esm/series/sankey/interface.js.map +1 -1
- package/esm/series/word-cloud/config.js +1 -1
- package/esm/series/word-cloud/config.js.map +1 -1
- package/esm/typings/spec/common.d.ts +20 -20
- package/esm/typings/spec/common.js.map +1 -1
- package/esm/util/math.d.ts +0 -1
- package/esm/util/math.js +0 -16
- package/esm/util/math.js.map +1 -1
- package/package.json +14 -14
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: !0
|
|
5
|
-
}), exports.SCROLL_BAR_DEFAULT_SIZE = void 0, exports.SCROLL_BAR_DEFAULT_SIZE = 12;
|
|
5
|
+
}), exports.SCROLL_BAR_DEFAULT_SIZE = void 0, exports.SCROLL_BAR_DEFAULT_SIZE = 12;
|
|
6
|
+
//# sourceMappingURL=scroll-bar.js.map
|
package/cjs/core/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VChart } from './vchart';
|
|
2
2
|
import { Factory } from './factory';
|
|
3
3
|
export { VChart, Factory };
|
|
4
|
-
export declare const version = "1.9.3-
|
|
4
|
+
export declare const version = "1.9.3-hotfix.0";
|
|
5
5
|
export type { IVChart } from './interface';
|
|
6
6
|
export type { IStateSpec, StateValueType } from '../compile/mark';
|
|
7
7
|
export * from '../typings/spec/common';
|
package/cjs/core/index.js
CHANGED
|
@@ -35,7 +35,7 @@ Object.defineProperty(exports, "Factory", {
|
|
|
35
35
|
get: function() {
|
|
36
36
|
return factory_1.Factory;
|
|
37
37
|
}
|
|
38
|
-
}), exports.version = "1.9.3-
|
|
38
|
+
}), exports.version = "1.9.3-hotfix.0", __exportStar(require("../typings/spec/common"), exports),
|
|
39
39
|
__exportStar(require("../event/interface"), exports), __exportStar(require("../theme/interface"), exports),
|
|
40
40
|
__exportStar(require("../constant"), exports), __exportStar(require("./interface"), exports),
|
|
41
41
|
__exportStar(require("../typings/spec/index"), exports), __exportStar(require("../theme/index"), exports);
|
package/cjs/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,qCAAkC;AAGzB,uFAHA,eAAM,OAGA;AAFf,uCAAoC;AAEnB,wFAFR,iBAAO,OAEQ;AAGX,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,qCAAkC;AAGzB,uFAHA,eAAM,OAGA;AAFf,uCAAoC;AAEnB,wFAFR,iBAAO,OAEQ;AAGX,QAAA,OAAO,GAAG,gBAAgB,CAAC;AAMxC,yDAAuC;AACvC,qDAAmC;AACnC,qDAAmC;AACnC,8CAA4B;AAC5B,8CAA4B;AAK5B,wDAAsC;AAGtC,iDAA+B;AAG/B,uDAAiD;AAAxC,uGAAA,OAAO,OAAA;AAGhB,4CAA0B","file":"index.js","sourcesContent":["/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.9.3-hotfix.0\";\n\n// export necessary types\nexport type { IVChart } from './interface';\nexport type { IStateSpec, StateValueType } from '../compile/mark';\n\nexport * from '../typings/spec/common';\nexport * from '../event/interface';\nexport * from '../theme/interface';\nexport * from '../constant';\nexport * from './interface';\n\n/**\n * spec\n */\nexport * from '../typings/spec/index';\n\n// theme\nexport * from '../theme/index';\n\n// vrender\nexport { vglobal } from '@visactor/vrender-core';\n\n// plugin\nexport * from '../plugin';\n"]}
|
|
@@ -22,15 +22,15 @@ const pie = (originData, op) => {
|
|
|
22
22
|
const angleFieldValue = transformInvalidValue(data[index][angleField]);
|
|
23
23
|
total += angleFieldValue, max = Math.max(angleFieldValue, max), data[index][polar_1.ARC_TRANSFORM_VALUE] = angleFieldValue;
|
|
24
24
|
}
|
|
25
|
-
const
|
|
25
|
+
const angleRange = endAngle - startAngle;
|
|
26
26
|
let lastAngle = startAngle, restAngle = angleRange, largeThanMinAngleTotal = 0;
|
|
27
|
-
if (data.forEach((
|
|
27
|
+
if (data.forEach((d => {
|
|
28
28
|
const angleFieldValue = d[polar_1.ARC_TRANSFORM_VALUE], ratio = total ? angleFieldValue / total : 0;
|
|
29
29
|
let radian = ratio * angleRange;
|
|
30
30
|
radian < minAngle ? (radian = minAngle, restAngle -= minAngle) : largeThanMinAngleTotal += angleFieldValue;
|
|
31
31
|
const dStartAngle = lastAngle, dEndAngle = lastAngle + radian;
|
|
32
|
-
d[asRatio] = ratio, d[asK] = max ? angleFieldValue / max : 0, d
|
|
33
|
-
|
|
32
|
+
d[asRatio] = ratio, d[asK] = max ? angleFieldValue / max : 0, appendArcInfo(d, dStartAngle, radian),
|
|
33
|
+
lastAngle = dEndAngle;
|
|
34
34
|
})), restAngle < angleRange) if (restAngle <= .001) {
|
|
35
35
|
const angle = angleRange / data.length;
|
|
36
36
|
data.forEach(((d, index) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/pie.ts"],"names":[],"mappings":";;;AAEA,0CAAqD;AACrD,
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/pie.ts"],"names":[],"mappings":"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","file":"pie.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { Datum } from '../../typings';\nimport { couldBeValidNumber } from '../../util/type';\nimport { computeQuadrant } from '../../util/math';\nimport { ARC_TRANSFORM_VALUE } from '../../constant/polar';\n\nexport interface IPieOpt {\n angleField: string;\n\n startAngle: number;\n endAngle: number;\n minAngle: number;\n\n asStartAngle: string;\n asEndAngle: string;\n asMiddleAngle: string;\n asRadian: string;\n asRatio: string;\n asQuadrant: string;\n asK: string;\n}\n\nfunction transformInvalidValue(value: any) {\n if (!couldBeValidNumber(value)) {\n return 0;\n }\n return Number.parseFloat(value);\n}\n\nexport const pie = (originData: Array<DataView>, op: IPieOpt) => {\n const data = originData.map((datum: Datum) => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n angleField,\n startAngle,\n endAngle,\n minAngle,\n asStartAngle,\n asEndAngle,\n asMiddleAngle,\n asRadian,\n asRatio,\n asQuadrant,\n asK\n } = op;\n\n const appendArcInfo = (data: Datum, startAngle: number, angle: number) => {\n data[asStartAngle] = startAngle;\n data[asEndAngle] = startAngle + angle;\n data[asMiddleAngle] = startAngle + angle / 2;\n data[asRadian] = angle;\n data[asQuadrant] = computeQuadrant(startAngle + angle / 2);\n };\n\n let total = 0;\n let max = -Infinity;\n for (let index = 0; index < data.length; index++) {\n const angleFieldValue = transformInvalidValue(data[index][angleField]);\n total += angleFieldValue;\n max = Math.max(angleFieldValue, max);\n\n data[index][ARC_TRANSFORM_VALUE] = angleFieldValue;\n }\n\n const angleRange = endAngle - startAngle;\n let lastAngle = startAngle;\n let restAngle = angleRange;\n let largeThanMinAngleTotal = 0;\n\n data.forEach(d => {\n const angleFieldValue = d[ARC_TRANSFORM_VALUE];\n const ratio = total ? angleFieldValue / total : 0;\n let radian = ratio * angleRange;\n\n if (radian < minAngle) {\n radian = minAngle;\n restAngle -= minAngle;\n } else {\n largeThanMinAngleTotal += angleFieldValue;\n }\n\n const dStartAngle = lastAngle;\n const dEndAngle = lastAngle + radian;\n\n d[asRatio] = ratio;\n d[asK] = max ? angleFieldValue / max : 0;\n appendArcInfo(d, dStartAngle, radian);\n\n lastAngle = dEndAngle;\n });\n\n if (restAngle < angleRange) {\n if (restAngle <= 1e-3) {\n const angle = angleRange / data.length;\n data.forEach((d, index) => {\n appendArcInfo(d, startAngle + index * angle, angle);\n });\n } else {\n const unitRadian = restAngle / largeThanMinAngleTotal;\n lastAngle = startAngle;\n data.forEach(d => {\n const angle = d[asRadian] === minAngle ? minAngle : d[ARC_TRANSFORM_VALUE] * unitRadian;\n appendArcInfo(d, lastAngle, angle);\n\n lastAngle += angle;\n });\n }\n }\n\n if (total !== 0) {\n // 数据都为 0 时,起始角和结束角相同,不应该强制赋值\n // 防止一个扇区的角度会因为浮点数精度问题和传入的 endAngle 不相等\n data[data.length - 1][asEndAngle] = endAngle;\n }\n return data;\n};\n"]}
|
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.waterfallFillTotal = exports.waterfall = void 0;
|
|
6
6
|
|
|
7
|
-
const vutils_1 = require("@visactor/vutils"),
|
|
7
|
+
const vutils_1 = require("@visactor/vutils"), waterfall_1 = require("../../constant/waterfall"), waterfall = (lastData, op) => {
|
|
8
8
|
if (!lastData || 0 === lastData.length) return lastData;
|
|
9
|
-
const {indexField: indexField, total: totalSpec, groupData: groupData} = op, totalData = [], {dimensionValues: dimensionValues, dimensionData: dimensionData} = groupData().latestData, indexValues = Array.from(dimensionValues[indexField]);
|
|
9
|
+
const {indexField: indexField, valueField: valueField, startAs: startAs, endAs: endAs, total: totalSpec, seriesField: seriesField, seriesFieldName: seriesFieldName, groupData: groupData} = op, totalData = [], {dimensionValues: dimensionValues, dimensionData: dimensionData} = groupData().latestData, indexValues = Array.from(dimensionValues[indexField]);
|
|
10
10
|
let temp = {
|
|
11
11
|
start: 0,
|
|
12
12
|
end: 0,
|
|
@@ -20,119 +20,44 @@ const vutils_1 = require("@visactor/vutils"), vutils_2 = require("@visactor/vuti
|
|
|
20
20
|
lastEnd: temp.end,
|
|
21
21
|
index: key,
|
|
22
22
|
isTotal: !1
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
};
|
|
24
|
+
dimensionData[key].forEach((d => {
|
|
25
|
+
let isTotalTag = !1;
|
|
26
|
+
if (totalSpec && "end" !== totalSpec.type) {
|
|
27
|
+
if ("field" === totalSpec.type || "custom" === totalSpec.type) {
|
|
28
|
+
if (d[totalSpec.tagField]) if (isTotalTag = !0, "custom" === totalSpec.type) {
|
|
29
|
+
const {start: start, end: end} = totalSpec.product(d, temp);
|
|
30
|
+
d[startAs] = start, d[endAs] = end, total.end = end, total.start = start;
|
|
31
|
+
} else {
|
|
32
|
+
let start = 0, end = total.end;
|
|
33
|
+
if (totalSpec.collectCountField && !(0, vutils_1.isNil)(d[totalSpec.collectCountField])) {
|
|
34
|
+
const startIndex = totalData.length - +d[totalSpec.collectCountField], endIndex = totalData.length - 1;
|
|
35
|
+
startIndex < 0 ? console.warn("total.collectCountField error") : start = totalData[startIndex].start,
|
|
36
|
+
endIndex < 0 ? console.warn("total.collectCountField error") : end = totalData[endIndex].end;
|
|
37
|
+
} else totalSpec.startField && !(0, vutils_1.isNil)(d[totalSpec.startField]) && (start = +d[totalSpec.startField]),
|
|
38
|
+
totalSpec.valueField && !(0, vutils_1.isNil)(d[totalSpec.valueField]) && (end = (0,
|
|
39
|
+
vutils_1.precisionAdd)(start, +d[totalSpec.valueField]));
|
|
40
|
+
d[startAs] = start, d[endAs] = end, d[valueField] = end - start, total.start = start,
|
|
41
|
+
total.end = end;
|
|
29
42
|
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
totalData.push(total);
|
|
43
|
+
}
|
|
44
|
+
} else index === indexValues.length - 1 && (total.start = 0, d[startAs] = total.start,
|
|
45
|
+
d[endAs] = total.end, isTotalTag = !0);
|
|
46
|
+
isTotalTag || (d[startAs] = +total.end, d[endAs] = (0, vutils_1.precisionAdd)(d[startAs], +d[valueField]),
|
|
47
|
+
total.end = d[endAs]), total.isTotal = isTotalTag, ((0, vutils_1.isNil)(seriesField) || seriesField === waterfall_1.WaterfallDefaultSeriesField) && (d[waterfall_1.WaterfallDefaultSeriesField] = isTotalTag ? seriesFieldName.total : +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease);
|
|
48
|
+
})), temp = Object.assign(Object.assign({}, total), {
|
|
49
|
+
lastIndex: key
|
|
50
|
+
}), totalData.push(total);
|
|
38
51
|
})), totalData;
|
|
39
52
|
};
|
|
40
53
|
|
|
41
|
-
function computeTotalWithMultipleData(indexData, key, total, totalData, temp, indexValues, index, op, isTotalCheck) {
|
|
42
|
-
total.isTotal = !0;
|
|
43
|
-
const {valueField: valueField, startAs: startAs, endAs: endAs, total: totalSpec} = op, _normalTemp = [], _totalTemp = [];
|
|
44
|
-
if (indexData.forEach((d => {
|
|
45
|
-
isTotalCheck(d) ? _totalTemp.push(d) : _normalTemp.push(d);
|
|
46
|
-
})), _totalTemp.length === indexData.length) {
|
|
47
|
-
const result = computeNormalData([ indexData[0] ], key, total, totalData, temp, indexValues, index, op);
|
|
48
|
-
return _totalTemp.forEach((d => {
|
|
49
|
-
d[startAs] = indexData[0][startAs], d[endAs] = indexData[0][endAs], d[valueField] = indexData[0][valueField];
|
|
50
|
-
})), result;
|
|
51
|
-
}
|
|
52
|
-
const totalConfigData = _totalTemp[0];
|
|
53
|
-
let {start: start, end: end} = getTotalStartEnd(totalConfigData, total, totalData, temp, totalSpec);
|
|
54
|
-
total.start = start, total.end = end;
|
|
55
|
-
let valueTemp = end - start;
|
|
56
|
-
return _normalTemp.forEach((d => {
|
|
57
|
-
d[startAs] = +start, d[endAs] = (0, vutils_2.precisionAdd)(d[startAs], +d[valueField]),
|
|
58
|
-
start = d[endAs], valueTemp = (0, vutils_1.precisionSub)(valueTemp, +d[valueField]);
|
|
59
|
-
})), _totalTemp.forEach((d => {
|
|
60
|
-
d[startAs] = +start, d[endAs] = (0, vutils_2.precisionAdd)(d[startAs], valueTemp),
|
|
61
|
-
d[valueField] = valueTemp;
|
|
62
|
-
})), Object.assign(Object.assign({}, total), {
|
|
63
|
-
lastIndex: key
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function computeNormalData(indexData, key, total, totalData, temp, indexValues, index, op) {
|
|
68
|
-
const {valueField: valueField, startAs: startAs, endAs: endAs, total: totalSpec, seriesField: seriesField, seriesFieldName: seriesFieldName} = op;
|
|
69
|
-
return indexData.forEach((d => {
|
|
70
|
-
let isTotalTag = !1;
|
|
71
|
-
if (totalSpec && "end" !== totalSpec.type) {
|
|
72
|
-
if ("field" === totalSpec.type || "custom" === totalSpec.type) {
|
|
73
|
-
if (d[totalSpec.tagField]) {
|
|
74
|
-
isTotalTag = !0;
|
|
75
|
-
const {start: start, end: end} = getTotalStartEnd(d, total, totalData, temp, totalSpec);
|
|
76
|
-
d[startAs] = start, d[endAs] = end, d[valueField] = end - start, total.start = start,
|
|
77
|
-
total.end = end;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
} else index === indexValues.length - 1 && (total.start = 0, d[startAs] = total.start,
|
|
81
|
-
d[endAs] = total.end, isTotalTag = !0);
|
|
82
|
-
isTotalTag || (d[startAs] = +total.end, d[endAs] = (0, vutils_2.precisionAdd)(d[startAs], +d[valueField]),
|
|
83
|
-
total.end = d[endAs]), total.isTotal = isTotalTag, ((0, vutils_2.isNil)(seriesField) || seriesField === waterfall_1.WaterfallDefaultSeriesField) && (d[waterfall_1.WaterfallDefaultSeriesField] = isTotalTag ? seriesFieldName.total : +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease);
|
|
84
|
-
})), Object.assign(Object.assign({}, total), {
|
|
85
|
-
lastIndex: key
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function getTotalStartEnd(d, total, totalData, temp, totalSpec) {
|
|
90
|
-
return totalSpec && "end" !== totalSpec.type ? "field" === totalSpec.type || "custom" === totalSpec.type ? "custom" === totalSpec.type ? getTotalInCustomType(d, temp, totalSpec) : totalSpec.collectCountField && !(0,
|
|
91
|
-
vutils_2.isNil)(d[totalSpec.collectCountField]) ? getTotalInCollectField(d, totalData, total, totalSpec) : getTotalInField(d, total, totalSpec) : {
|
|
92
|
-
start: 0,
|
|
93
|
-
end: 0
|
|
94
|
-
} : getTotalInEndType(total);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function getTotalInEndType(total) {
|
|
98
|
-
return {
|
|
99
|
-
start: 0,
|
|
100
|
-
end: total.end
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function getTotalInCustomType(d, temp, totalSpec) {
|
|
105
|
-
return totalSpec.product(d, temp);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function getTotalInCollectField(d, totalData, total, totalSpec) {
|
|
109
|
-
let start = 0, end = total.end;
|
|
110
|
-
const startIndex = totalData.length - +d[totalSpec.collectCountField], endIndex = totalData.length - 1;
|
|
111
|
-
return startIndex < 0 ? console.warn("total.collectCountField error") : start = totalData[startIndex].start,
|
|
112
|
-
endIndex < 0 ? console.warn("total.collectCountField error") : end = totalData[endIndex].end,
|
|
113
|
-
{
|
|
114
|
-
start: start,
|
|
115
|
-
end: end
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function getTotalInField(d, total, totalSpec) {
|
|
120
|
-
let start = 0, end = total.end;
|
|
121
|
-
return totalSpec.startField && !(0, vutils_2.isNil)(d[totalSpec.startField]) && (start = +d[totalSpec.startField]),
|
|
122
|
-
totalSpec.valueField && !(0, vutils_2.isNil)(d[totalSpec.valueField]) && (end = (0,
|
|
123
|
-
vutils_2.precisionAdd)(start, +d[totalSpec.valueField])), {
|
|
124
|
-
start: start,
|
|
125
|
-
end: end
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
54
|
exports.waterfall = waterfall;
|
|
130
55
|
|
|
131
56
|
const waterfallFillTotal = (data, op) => {
|
|
132
57
|
if (!data) return data;
|
|
133
58
|
const {indexField: indexField, valueField: valueField, total: total, seriesField: seriesField} = op, totalData = {
|
|
134
59
|
[indexField]: (null == total ? void 0 : total.text) || "total",
|
|
135
|
-
[valueField]: data.reduce(((pre, cur) => (0,
|
|
60
|
+
[valueField]: data.reduce(((pre, cur) => (0, vutils_1.precisionAdd)(pre, +cur[valueField])), 0)
|
|
136
61
|
};
|
|
137
62
|
return seriesField && (totalData[seriesField] = "total"), data.push(totalData),
|
|
138
63
|
data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/waterfall.ts"],"names":[],"mappings":"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","file":"waterfall.js","sourcesContent":["import { precisionSub } from '@visactor/vutils';\n// import { isNil, precisionAdd } from '@visactor/vutils';\nimport { isNil, precisionAdd } from '@visactor/vutils';\n\nimport type { DataView } from '@visactor/vdataset';\nimport type {\n IWaterfallSeriesSpec,\n IWaterfallTotalCustom,\n IWaterfallTotalField\n} from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\n\ntype TotalInfo = {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n};\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\n groupData: () => DataView;\n}\n\nexport const waterfall = (lastData: Array<Datum>, op: IWaterfallOpt) => {\n if (!lastData || lastData.length === 0) {\n return lastData;\n }\n const { indexField, total: totalSpec, groupData } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set<string> };\n dimensionData: { [key in string]: Datum[] };\n };\n const indexValues = Array.from(dimensionValues[indexField]);\n // 上一次的计算结果\n let temp: { start: number; end: number; lastIndex: string } = { start: 0, end: 0, lastIndex: null };\n indexValues.forEach((key, index) => {\n const total = {\n start: temp.end,\n end: temp.end,\n lastIndex: temp.lastIndex,\n lastEnd: temp.end,\n index: key,\n isTotal: false\n };\n\n const indexData = dimensionData[key];\n // 1.10.0 当前的key对应的数据中有一个总计。并且还有其他的分组值时,总计的计算逻辑\n if (indexData.length > 1) {\n const isTotalCheck = (d: Datum) => {\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n return true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n return !!tag;\n }\n return false;\n };\n const isTotalTag = indexData.some(d => isTotalCheck(d));\n if (isTotalTag) {\n temp = computeTotalWithMultipleData(\n indexData,\n key,\n total,\n totalData,\n temp,\n indexValues,\n index,\n op,\n isTotalCheck\n );\n totalData.push(total);\n return;\n }\n }\n temp = computeNormalData(indexData, key, total, totalData, temp, indexValues, index, op);\n totalData.push(total);\n });\n return totalData;\n};\n\nfunction computeTotalWithMultipleData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt,\n isTotalCheck: (d: Datum) => boolean\n) {\n total.isTotal = true;\n const { valueField, startAs, endAs, total: totalSpec } = op;\n // 先将数据分为总计数据与常规数据\n const _normalTemp: Datum[] = [];\n const _totalTemp: Datum[] = [];\n indexData.forEach(d => {\n if (isTotalCheck(d)) {\n _totalTemp.push(d);\n } else {\n _normalTemp.push(d);\n }\n });\n // 1. 不可能全都不是总计数据\n // 2. 如果全都是总计数据,让它们都是同一个值\n if (_totalTemp.length === indexData.length) {\n const result = computeNormalData([indexData[0]], key, total, totalData, temp, indexValues, index, op);\n _totalTemp.forEach(d => {\n d[startAs] = indexData[0][startAs];\n d[endAs] = indexData[0][endAs];\n d[valueField] = indexData[0][valueField];\n });\n return result;\n }\n\n // 3. 其他常规情况\n // 先获取当前的起始值/结束值应当是多少\n // 按照第一个总计数据的配置来决定\n const totalConfigData = _totalTemp[0];\n // eslint-disable-next-line prefer-const\n let { start, end } = getTotalStartEnd(totalConfigData, total, totalData, temp, totalSpec);\n total.start = start;\n total.end = end;\n // 当前剩余的总计值\n let valueTemp = end - start;\n // 将非总计数据进行堆叠\n _normalTemp.forEach(d => {\n d[startAs] = +start;\n d[endAs] = precisionAdd(d[startAs], +d[valueField]);\n start = d[endAs];\n valueTemp = precisionSub(valueTemp, +d[valueField]);\n });\n // 先在的start end 就是 total 的\n _totalTemp.forEach(d => {\n d[startAs] = +start;\n d[endAs] = precisionAdd(d[startAs], valueTemp);\n d[valueField] = valueTemp;\n });\n return { ...total, lastIndex: key };\n}\n\nfunction computeNormalData(\n indexData: Datum[],\n key: string,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string },\n indexValues: string[],\n index: number,\n op: IWaterfallOpt\n) {\n const { valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName } = op;\n indexData.forEach(d => {\n let isTotalTag = false;\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n total.start = 0;\n d[startAs] = total.start;\n d[endAs] = total.end;\n isTotalTag = true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n if (tag) {\n isTotalTag = true;\n const { start, end } = getTotalStartEnd(d, total, totalData, temp, totalSpec);\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n if (!isTotalTag) {\n d[startAs] = +total.end;\n d[endAs] = precisionAdd(d[startAs], +d[valueField]);\n total.end = d[endAs];\n }\n total.isTotal = isTotalTag;\n\n if (isNil(seriesField) || seriesField === WaterfallDefaultSeriesField) {\n if (isTotalTag) {\n d[WaterfallDefaultSeriesField] = seriesFieldName.total;\n } else {\n d[WaterfallDefaultSeriesField] = +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease;\n }\n }\n });\n return { ...total, lastIndex: key };\n}\n\nfunction getTotalStartEnd(\n d: Datum,\n total: TotalInfo,\n totalData: TotalInfo[],\n temp: { start: number; end: number; lastIndex: string },\n totalSpec: IWaterfallOpt['total']\n) {\n if (!totalSpec || totalSpec.type === 'end') {\n return getTotalInEndType(total);\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n if (totalSpec.type === 'custom') {\n return getTotalInCustomType(d, temp, totalSpec);\n }\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n return getTotalInCollectField(d, totalData, total, totalSpec);\n }\n return getTotalInField(d, total, totalSpec);\n }\n return { start: 0, end: 0 };\n}\n\nfunction getTotalInEndType(total: TotalInfo) {\n return { start: 0, end: total.end };\n}\n\nfunction getTotalInCustomType(\n d: Datum,\n temp: { start: number; end: number; lastIndex: string },\n totalSpec: IWaterfallOpt['total']\n) {\n return (<IWaterfallTotalCustom>totalSpec).product(d, temp);\n}\n\nfunction getTotalInCollectField(d: Datum, totalData: TotalInfo[], total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n return { start, end };\n}\n\nfunction getTotalInField(d: Datum, total: TotalInfo, totalSpec: IWaterfallTotalField) {\n let start = 0;\n let end = total.end;\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = precisionAdd(start, +d[totalSpec.valueField]);\n }\n return { start, end };\n}\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n}\n\nexport const waterfallFillTotal = (data: Array<Datum>, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField } = op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => precisionAdd(pre, +cur[valueField]), 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n data.push(totalData);\n return data;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/waterfall.ts"],"names":[],"mappings":"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","file":"waterfall.js","sourcesContent":["// import { isNil, precisionAdd } from '@visactor/vutils';\nimport { isNil, precisionAdd } from '@visactor/vutils';\n\nimport type { DataView } from '@visactor/vdataset';\nimport type { IWaterfallSeriesSpec } from '../../series/waterfall/interface';\nimport type { Datum } from '../../typings';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\n\nexport interface IWaterfallOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n startAs: string;\n endAs: string;\n total: IWaterfallSeriesSpec['total'];\n seriesFieldName: {\n total: string;\n increase: string;\n decrease: string;\n };\n groupData: () => DataView;\n}\n\nexport const waterfall = (lastData: Array<Datum>, op: IWaterfallOpt) => {\n if (!lastData || lastData.length === 0) {\n return lastData;\n }\n const { indexField, valueField, startAs, endAs, total: totalSpec, seriesField, seriesFieldName, groupData } = op;\n const totalData: {\n start: number;\n end: number;\n lastIndex: string;\n lastEnd: number;\n index: string;\n isTotal: boolean;\n }[] = [];\n const { dimensionValues, dimensionData } = groupData().latestData as {\n dimensionValues: { [key in string]: Set<string> };\n dimensionData: { [key in string]: Datum[] };\n };\n const indexValues = Array.from(dimensionValues[indexField]);\n let temp: { start: number; end: number; lastIndex: string } = { start: 0, end: 0, lastIndex: null };\n indexValues.forEach((key, index) => {\n const total = {\n start: temp.end,\n end: temp.end,\n lastIndex: temp.lastIndex,\n lastEnd: temp.end,\n index: key,\n isTotal: false\n };\n\n const indexData = dimensionData[key];\n indexData.forEach(d => {\n let isTotalTag = false;\n if (!totalSpec || totalSpec.type === 'end') {\n if (index === indexValues.length - 1) {\n total.start = 0;\n d[startAs] = total.start;\n d[endAs] = total.end;\n isTotalTag = true;\n }\n } else if (totalSpec.type === 'field' || totalSpec.type === 'custom') {\n const tag = d[totalSpec.tagField];\n if (tag) {\n isTotalTag = true;\n if (totalSpec.type === 'custom') {\n const { start, end } = totalSpec.product(d, temp);\n d[startAs] = start;\n d[endAs] = end;\n total.end = end;\n total.start = start;\n } else {\n let start = 0;\n let end = total.end;\n // 如果有设置count, valueField 和 startField 无效\n if (totalSpec.collectCountField && !isNil(d[totalSpec.collectCountField])) {\n const startIndex = totalData.length - +d[totalSpec.collectCountField];\n const endIndex = totalData.length - 1;\n if (startIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n start = totalData[startIndex].start;\n }\n if (endIndex < 0) {\n console.warn('total.collectCountField error');\n } else {\n end = totalData[endIndex].end;\n }\n } else {\n if (totalSpec.startField && !isNil(d[totalSpec.startField])) {\n start = +d[totalSpec.startField];\n }\n if (totalSpec.valueField && !isNil(d[totalSpec.valueField])) {\n end = precisionAdd(start, +d[totalSpec.valueField]);\n }\n }\n d[startAs] = start;\n d[endAs] = end;\n d[valueField] = end - start;\n total.start = start;\n total.end = end;\n }\n }\n }\n if (!isTotalTag) {\n d[startAs] = +total.end;\n d[endAs] = precisionAdd(d[startAs], +d[valueField]);\n total.end = d[endAs];\n }\n total.isTotal = isTotalTag;\n\n if (isNil(seriesField) || seriesField === WaterfallDefaultSeriesField) {\n if (isTotalTag) {\n d[WaterfallDefaultSeriesField] = seriesFieldName.total;\n } else {\n d[WaterfallDefaultSeriesField] = +d[valueField] >= 0 ? seriesFieldName.increase : seriesFieldName.decrease;\n }\n }\n });\n temp = { ...total, lastIndex: key };\n totalData.push(total);\n });\n return totalData;\n};\n\nexport interface IWaterfallFillEndOpt {\n indexField: string;\n valueField: string;\n seriesField?: string;\n total: IWaterfallSeriesSpec['total'];\n}\n\nexport const waterfallFillTotal = (data: Array<Datum>, op: IWaterfallFillEndOpt) => {\n if (!data) {\n return data;\n }\n const { indexField, valueField, total, seriesField } = op;\n const totalData = {\n [indexField]: total?.text || 'total',\n [valueField]: data.reduce((pre, cur) => precisionAdd(pre, +cur[valueField]), 0)\n };\n if (seriesField) {\n totalData[seriesField] = 'total';\n }\n data.push(totalData);\n return data;\n};\n"]}
|