1 | import { getTickMethod } from '../../deps/f2-scale/src';
|
2 | import { getRange, isArray } from '@antv/util';
|
3 | import { toTimeStamp } from '../../util';
|
4 |
|
5 | function isValuesEqual(values, newValues) {
|
6 | if (values.length !== newValues.length) {
|
7 | return false;
|
8 | }
|
9 | var lastIndex = values.length - 1;
|
10 | return values[0] === newValues[0] && values[lastIndex] === newValues[lastIndex];
|
11 | }
|
12 | function updateCategoryRange(scale, originScale, range) {
|
13 | var currentValues = scale.values,
|
14 | currentTicks = scale.ticks,
|
15 | tickMethod = scale.tickMethod,
|
16 | tickCount = scale.tickCount;
|
17 | var originValues = originScale.values;
|
18 | var start = range[0],
|
19 | end = range[1];
|
20 | var len = originValues.length;
|
21 | var valueStart = start * len;
|
22 | var valueEnd = end * len;
|
23 |
|
24 | var diff = valueEnd - valueStart;
|
25 | var precision = parseFloat(diff.toFixed(3));
|
26 | var count = Math.round(precision);
|
27 | var sliceSatrt = Math.min(Math.round(valueStart), len - count);
|
28 |
|
29 | var newValues = originValues.slice(sliceSatrt, sliceSatrt + count);
|
30 |
|
31 | var newTickCount = Math.round(tickCount * originValues.length / newValues.length);
|
32 |
|
33 | var catTicks = getTickMethod(tickMethod);
|
34 | var newTicks = catTicks({
|
35 | tickCount: newTickCount,
|
36 | values: originValues
|
37 | });
|
38 |
|
39 | if (isValuesEqual(currentValues, newValues) && isValuesEqual(currentTicks, newTicks)) {
|
40 | return;
|
41 | }
|
42 | scale.change({
|
43 | values: newValues,
|
44 | ticks: newTicks
|
45 | });
|
46 | return scale;
|
47 | }
|
48 | function updateLinearRange(scale, originScale, range) {
|
49 | var min = originScale.min,
|
50 | max = originScale.max;
|
51 | var start = range[0],
|
52 | end = range[1];
|
53 | var newMin = min + (max - min) * start;
|
54 | var newMax = min + (max - min) * end;
|
55 | scale.change({
|
56 | min: newMin,
|
57 | max: newMax,
|
58 | nice: false
|
59 | });
|
60 | }
|
61 | function updateScale(scale, values) {
|
62 | var isLinear = scale.isLinear;
|
63 | if (isLinear) {
|
64 | var _a = getRange(values),
|
65 | min = _a.min,
|
66 | max = _a.max;
|
67 | return scale.change({
|
68 | min: min,
|
69 | max: max,
|
70 | nice: true
|
71 | });
|
72 | }
|
73 | }
|
74 | function updateRange(scale, originScale, range) {
|
75 | var isCategory = scale.isCategory,
|
76 | isLinear = scale.isLinear;
|
77 | if (isCategory) {
|
78 | return updateCategoryRange(scale, originScale, range);
|
79 | }
|
80 | if (isLinear) {
|
81 | return updateLinearRange(scale, originScale, range);
|
82 | }
|
83 | }
|
84 | function updateFollow(scales, mainScale, data) {
|
85 | var mainField = mainScale.field,
|
86 | mainType = mainScale.type,
|
87 | mainValues = mainScale.values;
|
88 |
|
89 | var mainValuesMap = {};
|
90 | mainValues.forEach(function (item) {
|
91 | mainValuesMap[item] = true;
|
92 | });
|
93 | return scales.map(function (scale) {
|
94 | var followField = scale.field;
|
95 | var values = [];
|
96 | data.forEach(function (item) {
|
97 | var value = mainType === 'timeCat' ? toTimeStamp(item[mainField]) : item[mainField];
|
98 | if (mainValuesMap[value]) {
|
99 | var followItemValue = item[followField];
|
100 | if (isArray(followItemValue)) {
|
101 | values.push.apply(values, followItemValue);
|
102 | } else {
|
103 | values.push(followItemValue);
|
104 | }
|
105 | }
|
106 | });
|
107 | return updateScale(scale, values);
|
108 | });
|
109 | }
|
110 | export { updateRange, updateFollow }; |
\ | No newline at end of file |