sea-chart 2.0.35 → 2.0.36
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/dist/api/index.js +17 -59
- package/dist/assets/css/sea-chart-d3-tooltip.css +0 -1
- package/dist/components/color-popover/color-rules-popover.js +4 -2
- package/dist/components/drill-down-settings/drill-down-fields-popover/index.js +5 -4
- package/dist/components/icon/index.js +9 -13
- package/dist/components/number-input/index.js +7 -13
- package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +7 -3
- package/dist/components/popover/hide-column-popover/hide-column-popover.css +5 -1
- package/dist/components/popover/hide-column-popover/hide-column-popover.js +2 -4
- package/dist/components/popover/sort-popover/sort-popover.js +6 -7
- package/dist/components/statistic-record-dialog/index.js +9 -8
- package/dist/components/tooltip/index.js +26 -8
- package/dist/editor/index.js +5 -1
- package/dist/locale/lang/de.js +1 -0
- package/dist/locale/lang/en.js +1 -0
- package/dist/locale/lang/es.js +1 -0
- package/dist/locale/lang/fr.js +1 -0
- package/dist/locale/lang/pt.js +1 -0
- package/dist/locale/lang/ru.js +1 -0
- package/dist/locale/lang/zh_CN.js +1 -0
- package/dist/model/funnel.js +2 -2
- package/dist/model/map-bubble.js +4 -0
- package/dist/services/map-json.js +3 -0
- package/dist/settings/advance-bar-settings/data-settings.js +1 -1
- package/dist/settings/advance-bar-settings/style-settings.js +4 -3
- package/dist/settings/bar-settings/data-settings.js +1 -1
- package/dist/settings/bar-settings/style-settings.js +2 -2
- package/dist/settings/basic-number-card/data-settings.js +3 -2
- package/dist/settings/combination-settings/data-settings.js +0 -1
- package/dist/settings/combination-settings/style-settings.js +2 -2
- package/dist/settings/dashboard-settings/data-settings.js +3 -2
- package/dist/settings/funnel-settings/components/funnel-layer-setting.js +7 -7
- package/dist/settings/index.js +8 -3
- package/dist/settings/table-element-settings/components/data-filter.js +24 -25
- package/dist/settings/table-element-settings/index.css +1 -31
- package/dist/settings/table-settings/data-settings.js +3 -2
- package/dist/settings/time-comparison-settings/style-settings.js +2 -2
- package/dist/settings/widgets/basic-summary/index.js +8 -7
- package/dist/settings/widgets/common-data-settings.js +7 -6
- package/dist/settings/widgets/data-filter/index.js +30 -22
- package/dist/settings/widgets/group-by.js +4 -3
- package/dist/settings/widgets/summary-settings.js +3 -2
- package/dist/settings/widgets/y-axis-group-settings.js +3 -2
- package/dist/utils/cell-format-utils.js +9 -7
- package/dist/utils/chart-utils/base-utils.js +194 -86
- package/dist/utils/chart-utils/index.js +5 -3
- package/dist/utils/chart-utils/original-data-utils/basic-chart-calculator.js +5 -5
- package/dist/utils/chart-utils/original-data-utils/card-calculator.js +8 -2
- package/dist/utils/chart-utils/original-data-utils/dashboard-calculator.js +12 -3
- package/dist/utils/chart-utils/original-data-utils/pivot-table-calculator.js +4 -1
- package/dist/utils/chart-utils/original-data-utils/scatter-calculator.js +1 -0
- package/dist/utils/chart-utils/original-data-utils/trend-calculator.js +24 -3
- package/dist/utils/chart-utils/sql-statistics-utils.js +182 -177
- package/dist/utils/column-utils.js +20 -7
- package/dist/utils/contexts.js +5 -2
- package/dist/utils/index.js +25 -4
- package/dist/utils/row-record-utils.js +100 -20
- package/dist/utils/sql/column-2-sql-column.js +10 -10
- package/dist/utils/trend-utils.js +15 -2
- package/dist/view/index.css +2 -8
- package/dist/view/index.js +14 -9
- package/dist/view/wrapper/area-group.js +15 -7
- package/dist/view/wrapper/bar-compare.js +18 -2
- package/dist/view/wrapper/bar-custom-stack.js +35 -9
- package/dist/view/wrapper/bar-group.js +55 -26
- package/dist/view/wrapper/bar-stack.js +2 -2
- package/dist/view/wrapper/basic-number-card.js +27 -3
- package/dist/view/wrapper/chart-component.js +43 -440
- package/dist/view/wrapper/completeness-group.js +104 -49
- package/dist/view/wrapper/dashboard.js +68 -18
- package/dist/view/wrapper/horizontal-bar-group.js +26 -6
- package/dist/view/wrapper/horizontal-bar-stack.js +2 -2
- package/dist/view/wrapper/line-group.js +8 -3
- package/dist/view/wrapper/map-world-bubble.js +1 -0
- package/dist/view/wrapper/map-world.js +1 -0
- package/dist/view/wrapper/pie.js +1 -1
- package/dist/view/wrapper/ring.js +1 -1
- package/dist/view/wrapper/scatter.js +8 -6
- package/dist/view/wrapper/table/two-dimension-table.js +3 -2
- package/dist/view/wrapper/table-element/components/records-header/index.js +0 -1
- package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js +3 -1
- package/dist/view/wrapper/table-element/index.js +16 -21
- package/dist/view/wrapper/trend.js +24 -1
- package/package.json +15 -12
|
@@ -39,10 +39,11 @@ class Completeness extends _chartComponent.default {
|
|
|
39
39
|
this.initChart(this.container, chart === null || chart === void 0 ? void 0 : chart.id, initConfig);
|
|
40
40
|
};
|
|
41
41
|
this.drawChart = () => {
|
|
42
|
+
var _this$props$chart, _this$props$chart$con;
|
|
42
43
|
let {
|
|
43
44
|
result: data
|
|
44
45
|
} = this.props;
|
|
45
|
-
data = _utils.BaseUtils.formatEmptyName(data,
|
|
46
|
+
data = _utils.BaseUtils.formatEmptyName(data, (_this$props$chart = this.props.chart) === null || _this$props$chart === void 0 ? void 0 : (_this$props$chart$con = _this$props$chart.config) === null || _this$props$chart$con === void 0 ? void 0 : _this$props$chart$con.column_groupby_column_key, _intl.default.get('Empty'));
|
|
46
47
|
if (!Array.isArray(data)) return;
|
|
47
48
|
this.draw(data);
|
|
48
49
|
};
|
|
@@ -70,12 +71,20 @@ class Completeness extends _chartComponent.default {
|
|
|
70
71
|
} = this.chartBoundingClientRect;
|
|
71
72
|
this.markLastForCompleteness(data);
|
|
72
73
|
const colors = _utils.BaseUtils.getCurrentTheme(chartColorTheme).colors;
|
|
74
|
+
// Normalize groupby to string before setColorMap to ensure consistent keys
|
|
75
|
+
data.forEach(item => {
|
|
76
|
+
if (Array.isArray(item.groupby)) {
|
|
77
|
+
item.groupby = item.groupby.join(', ');
|
|
78
|
+
}
|
|
79
|
+
});
|
|
73
80
|
this.setColorMap(data, chartColorTheme, 'groupby', columnGroupbyColumn, chart);
|
|
74
81
|
const newSeries = this.getGroupSeries(data, columnGroupbyColumn, chart);
|
|
75
82
|
|
|
76
83
|
// Y axis
|
|
77
84
|
const fy = d3.scaleBand().domain(newSeries.map(item => item[0])).range([chartHeight - insertPadding, insertPadding]).paddingInner(0.5).paddingOuter(0.1);
|
|
78
|
-
|
|
85
|
+
|
|
86
|
+
// y scale will be created per main group (local) to avoid overlap
|
|
87
|
+
|
|
79
88
|
const yAxis = this.chart.append('g').attr('class', 'y-axis-wrapper').call(d3.axisLeft(fy).tickSizeOuter(0).tickPadding(0).tickSizeInner(5)).call(g => {
|
|
80
89
|
g.selectAll('.domain').attr('stroke', theme.XAxisColor);
|
|
81
90
|
g.selectAll('.tick line').attr('stroke', theme.XAxisColor);
|
|
@@ -103,38 +112,64 @@ class Completeness extends _chartComponent.default {
|
|
|
103
112
|
|
|
104
113
|
// Rect group
|
|
105
114
|
const contentWrapper = this.chart.append('g').attr('class', 'content-wrapper').attr('transform', "translate(".concat(Number(yAxis.node().getAttribute('data-axisWidth')), ", 0)"));
|
|
106
|
-
contentWrapper.selectAll().data(newSeries).join('g').attr('transform', _ref => {
|
|
107
|
-
let [name
|
|
108
|
-
|
|
109
|
-
return "translate(0, ".concat(fy(name) + offset, ")");
|
|
115
|
+
const mainGroups = contentWrapper.selectAll().data(newSeries).join('g').attr('transform', _ref => {
|
|
116
|
+
let [name] = _ref;
|
|
117
|
+
return "translate(0, ".concat(fy(name), ")");
|
|
110
118
|
}).attr('data-transform', _ref2 => {
|
|
111
|
-
let [name
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
let [_,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
119
|
+
let [name] = _ref2;
|
|
120
|
+
return "".concat(fy(name));
|
|
121
|
+
});
|
|
122
|
+
const colorMap = this.colorMap;
|
|
123
|
+
const self = this;
|
|
124
|
+
|
|
125
|
+
// Calculate max sub group count across all main groups for uniform bar height
|
|
126
|
+
const maxSubGroupCount = Math.max(...newSeries.map(_ref3 => {
|
|
127
|
+
let [_, subGroups] = _ref3;
|
|
128
|
+
return subGroups.length;
|
|
129
|
+
}));
|
|
130
|
+
const uniformBandwidth = fy.bandwidth() / maxSubGroupCount;
|
|
131
|
+
mainGroups.each(function (_ref4) {
|
|
132
|
+
let [mainGroupName, subGroups] = _ref4;
|
|
133
|
+
const mainGroupNode = d3.select(this);
|
|
134
|
+
|
|
135
|
+
// Create local y scale for this main group, using uniform bandwidth
|
|
136
|
+
const localY = d3.scaleBand().domain(subGroups.map(sg => sg[0])).range([0, uniformBandwidth * subGroups.length]).paddingInner(0).paddingOuter(0);
|
|
137
|
+
mainGroupNode.selectAll().data(subGroups).join('g').attr('data-completedRate', _ref5 => {
|
|
138
|
+
var _restItem$rawData, _completedItem$rawDat;
|
|
139
|
+
let [_, d] = _ref5;
|
|
140
|
+
const restItem = d.find(item => item.key === 'rest');
|
|
141
|
+
const completedItem = d.find(item => item.key === 'completed');
|
|
142
|
+
const restValue = restItem ? Number(((_restItem$rawData = restItem.rawData) === null || _restItem$rawData === void 0 ? void 0 : _restItem$rawData.value) || 0) : 0;
|
|
143
|
+
const completedValue = completedItem ? Number(((_completedItem$rawDat = completedItem.rawData) === null || _completedItem$rawDat === void 0 ? void 0 : _completedItem$rawDat.value) || 0) : 0;
|
|
144
|
+
const targetValue = restValue + completedValue;
|
|
145
|
+
if (!targetValue) return '';
|
|
146
|
+
return "".concat(Math.round(completedValue / targetValue * 100), "%");
|
|
147
|
+
}).selectAll().data(_ref6 => {
|
|
148
|
+
let [_, d] = _ref6;
|
|
149
|
+
return d;
|
|
150
|
+
}).join('rect').attr('class', 'rect').attr('opacity', 1).attr('x', d => x(d[0]) - Number(yAxis.node().getAttribute('data-axisWidth'))).attr('y', d => localY(d.groupby)).attr('data-y', d => localY(d.groupby)).attr('width', d => x(d[1]) - x(d[0])).attr('height', localY.bandwidth()).attr('fill', d => {
|
|
151
|
+
const key = d.key;
|
|
152
|
+
const groupby = d.groupby;
|
|
153
|
+
if (key === 'rest') {
|
|
154
|
+
return '#bdbdbd';
|
|
155
|
+
}
|
|
156
|
+
if (column_groupby_column_key) {
|
|
157
|
+
return colorMap[groupby];
|
|
158
|
+
}
|
|
159
|
+
return colors[0];
|
|
160
|
+
}).attr('data-value', d => d.rawData.value).attr('data-groupName', d => d.rawData.slugId).attr('data-tooltipTitle', d => d.rawData.name).attr('data-tooltipName', d => d.key).attr('data-groupBy', d => d.groupby).on('click', (event, data) => {
|
|
161
|
+
self.props.toggleRecords(data);
|
|
162
|
+
}).on('mouseover', event => {
|
|
163
|
+
self.showTooltip(event);
|
|
164
|
+
self.handleAcitveAndInActiveState('inActive', event);
|
|
165
|
+
}).on('mousemove', event => {
|
|
166
|
+
self.moveTooltip(event);
|
|
167
|
+
}).on('mouseleave', event => {
|
|
168
|
+
self.hiddenTooltip();
|
|
169
|
+
self.handleAcitveAndInActiveState('active', event);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
mainGroups.call(g => {
|
|
138
173
|
// add rect borderRadius
|
|
139
174
|
const allGroup = this.getAllGroup(contentWrapper);
|
|
140
175
|
allGroup.forEach(group => {
|
|
@@ -163,16 +198,6 @@ class Completeness extends _chartComponent.default {
|
|
|
163
198
|
});
|
|
164
199
|
});
|
|
165
200
|
}
|
|
166
|
-
}).on('click', (event, data) => {
|
|
167
|
-
this.props.toggleRecords(data);
|
|
168
|
-
}).on('mouseover', event => {
|
|
169
|
-
this.showTooltip(event);
|
|
170
|
-
this.handleAcitveAndInActiveState('inActive', event);
|
|
171
|
-
}).on('mousemove', event => {
|
|
172
|
-
this.moveTooltip(event);
|
|
173
|
-
}).on('mouseleave', (event, data) => {
|
|
174
|
-
this.hiddenTooltip();
|
|
175
|
-
this.handleAcitveAndInActiveState('active', event);
|
|
176
201
|
});
|
|
177
202
|
this.setLegend({
|
|
178
203
|
legendName: 'groupby',
|
|
@@ -255,34 +280,64 @@ class Completeness extends _chartComponent.default {
|
|
|
255
280
|
};
|
|
256
281
|
this.getGroupSeries = (data, columnGroupbyColumn, chart) => {
|
|
257
282
|
const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'groupby', columnGroupbyColumn, chart);
|
|
283
|
+
sortedData.forEach(item => {
|
|
284
|
+
if (Array.isArray(item.groupby)) {
|
|
285
|
+
item.groupby = item.groupby.join(', ');
|
|
286
|
+
}
|
|
287
|
+
});
|
|
258
288
|
const groups = d3.groups(sortedData, d => d.name);
|
|
289
|
+
// Sort main groups by name for stable order
|
|
290
|
+
groups.sort((a, b) => String(a[0]).localeCompare(String(b[0])));
|
|
259
291
|
groups.forEach((item, index) => {
|
|
260
292
|
const itemData = (0, _lodashEs.cloneDeep)(item[1]);
|
|
293
|
+
const valueMap = d3.rollup(itemData, v => d3.sum(v, d => d.value), d => d.groupby, d => d.group_name);
|
|
294
|
+
const rawDataMap = d3.rollup(itemData, v => v[0], d => d.groupby, d => d.group_name);
|
|
261
295
|
|
|
262
296
|
// get series
|
|
263
|
-
const series = d3.stack().keys(d3.union(itemData.map(d => d.group_name))).value((
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
})(d3.index(itemData, d => d.groupby, d => d.group_name));
|
|
297
|
+
const series = d3.stack().keys(d3.union(itemData.map(d => d.group_name))).value((_ref7, key) => {
|
|
298
|
+
let [_, group] = _ref7;
|
|
299
|
+
return group.get(key) || 0;
|
|
300
|
+
})(valueMap);
|
|
268
301
|
item[1] = d3.groups(itemData, d => d.groupby);
|
|
302
|
+
// Sort sub groups by groupby for stable order
|
|
303
|
+
item[1].sort((a, b) => String(a[0]).localeCompare(String(b[0])));
|
|
269
304
|
item[1].forEach((group, index) => {
|
|
305
|
+
var _completedItem$rawDat2, _restItem$rawData2;
|
|
270
306
|
const groupKey = group[0];
|
|
271
307
|
group[1] = [];
|
|
272
308
|
series.forEach(serie => {
|
|
273
309
|
const serieKey = serie.key;
|
|
274
310
|
serie.forEach(item => {
|
|
275
311
|
if (item.data[0] === groupKey) {
|
|
312
|
+
var _valueMap$get, _rawDataMap$get;
|
|
313
|
+
const aggregatedValue = ((_valueMap$get = valueMap.get(groupKey)) === null || _valueMap$get === void 0 ? void 0 : _valueMap$get.get(serieKey)) || 0;
|
|
314
|
+
const rawData = (_rawDataMap$get = rawDataMap.get(groupKey)) === null || _rawDataMap$get === void 0 ? void 0 : _rawDataMap$get.get(serieKey);
|
|
276
315
|
const newItem = {
|
|
277
316
|
...item,
|
|
278
317
|
key: serieKey,
|
|
279
318
|
serieIndex: index,
|
|
280
|
-
|
|
319
|
+
groupby: groupKey,
|
|
320
|
+
rawData: {
|
|
321
|
+
...(rawData || {}),
|
|
322
|
+
value: aggregatedValue,
|
|
323
|
+
groupby: groupKey,
|
|
324
|
+
group_name: serieKey
|
|
325
|
+
}
|
|
281
326
|
};
|
|
282
327
|
group[1].push(newItem);
|
|
283
328
|
}
|
|
284
329
|
});
|
|
285
330
|
});
|
|
331
|
+
const completedItem = group[1].find(d => d.key === 'completed');
|
|
332
|
+
const restItem = group[1].find(d => d.key === 'rest');
|
|
333
|
+
const completedValue = completedItem ? Number(((_completedItem$rawDat2 = completedItem.rawData) === null || _completedItem$rawDat2 === void 0 ? void 0 : _completedItem$rawDat2.value) || 0) : 0;
|
|
334
|
+
const restValue = restItem ? Number(((_restItem$rawData2 = restItem.rawData) === null || _restItem$rawData2 === void 0 ? void 0 : _restItem$rawData2.value) || 0) : 0;
|
|
335
|
+
const targetValue = completedValue + restValue;
|
|
336
|
+
if (!targetValue) {
|
|
337
|
+
restItem && (restItem.rawData.completedRate = 'empty');
|
|
338
|
+
} else {
|
|
339
|
+
restItem && (restItem.rawData.completedRate = Math.round(completedValue / targetValue * 100));
|
|
340
|
+
}
|
|
286
341
|
let sumValue = 0;
|
|
287
342
|
group[1].forEach(g => {
|
|
288
343
|
sumValue = sumValue + g[1];
|
|
@@ -17,6 +17,28 @@ var _chartComponent = _interopRequireDefault(require("./chart-component"));
|
|
|
17
17
|
class Dashboard extends _chartComponent.default {
|
|
18
18
|
constructor(props) {
|
|
19
19
|
super(props);
|
|
20
|
+
this.handleClickNumber = () => {
|
|
21
|
+
const {
|
|
22
|
+
toggleRecords,
|
|
23
|
+
result
|
|
24
|
+
} = this.props;
|
|
25
|
+
if (!toggleRecords) return;
|
|
26
|
+
if (typeof result === 'object' && result !== null && result.rows) {
|
|
27
|
+
toggleRecords({
|
|
28
|
+
rows: result.rows
|
|
29
|
+
});
|
|
30
|
+
} else {
|
|
31
|
+
toggleRecords({
|
|
32
|
+
isQueryBySql: true
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
this.componentDidMount = () => {
|
|
37
|
+
this.createChart();
|
|
38
|
+
this.drawChart();
|
|
39
|
+
this.debouncedHandleResize = (0, _lodashEs.debounce)(this.handleResize, 300);
|
|
40
|
+
window.addEventListener('resize', this.debouncedHandleResize);
|
|
41
|
+
};
|
|
20
42
|
this.handleResize = () => {
|
|
21
43
|
this.destroyChart();
|
|
22
44
|
this.createChart();
|
|
@@ -152,21 +174,55 @@ class Dashboard extends _chartComponent.default {
|
|
|
152
174
|
const {
|
|
153
175
|
height: chartHeight
|
|
154
176
|
} = this.chartBoundingClientRect;
|
|
177
|
+
const {
|
|
178
|
+
toggleRecords
|
|
179
|
+
} = this.props;
|
|
180
|
+
const {
|
|
181
|
+
font_size,
|
|
182
|
+
font_color,
|
|
183
|
+
font_weight,
|
|
184
|
+
text_align,
|
|
185
|
+
card_label_font_size,
|
|
186
|
+
label_font_color,
|
|
187
|
+
label_text_align,
|
|
188
|
+
label_font_weight
|
|
189
|
+
} = chart.config;
|
|
190
|
+
const {
|
|
191
|
+
width: chartWidth,
|
|
192
|
+
height: fullChartHeight
|
|
193
|
+
} = this.chartBoundingClientRect;
|
|
194
|
+
const radius = Math.min(chartWidth, fullChartHeight) / 2 * 0.75;
|
|
195
|
+
const alignOffset = radius * 0.25;
|
|
196
|
+
const getTextAnchorAndX = align => {
|
|
197
|
+
const v = (align || '').toLowerCase();
|
|
198
|
+
if (v === 'left') {
|
|
199
|
+
return {
|
|
200
|
+
textAnchor: 'end',
|
|
201
|
+
x: -alignOffset
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (v === 'right') {
|
|
205
|
+
return {
|
|
206
|
+
textAnchor: 'start',
|
|
207
|
+
x: alignOffset
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
textAnchor: 'middle',
|
|
212
|
+
x: 0
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
const titleAlign = getTextAnchorAndX(label_text_align);
|
|
216
|
+
const numberAlign = getTextAnchorAndX(text_align);
|
|
155
217
|
const totalWrapper = d3.select(wrapper).append('g').attr('class', 'total-wrapper');
|
|
156
218
|
// title
|
|
157
|
-
totalWrapper.append('text').attr('fill',
|
|
158
|
-
const {
|
|
159
|
-
width
|
|
160
|
-
} = g.node().getBoundingClientRect();
|
|
161
|
-
g.attr('dx', "".concat(-(width / 2)));
|
|
162
|
-
});
|
|
219
|
+
totalWrapper.append('text').attr('fill', label_font_color || theme.textColor).attr('font-size', card_label_font_size || (chartHeight > 240 ? 20 : 12)).attr('font-weight', label_font_weight).attr('text-anchor', titleAlign.textAnchor).attr('x', titleAlign.x).text(name).attr('dy', 50);
|
|
163
220
|
|
|
164
221
|
// total
|
|
165
|
-
totalWrapper.append('text').attr('fill', theme.textColor).attr('font-size', chartHeight > 240 ? 36 : 16).text("".concat(formatValue, "%")).attr('
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
g.attr('dx', "".concat(-(width / 2)));
|
|
222
|
+
totalWrapper.append('text').attr('fill', font_color || theme.textColor).attr('font-size', font_size || (chartHeight > 240 ? 36 : 16)).attr('font-weight', font_weight).attr('text-anchor', numberAlign.textAnchor).attr('x', numberAlign.x).text("".concat(formatValue, "%")).attr('dy', 90).style('cursor', toggleRecords ? 'pointer' : 'default').on('click', () => {
|
|
223
|
+
if (toggleRecords) {
|
|
224
|
+
this.handleClickNumber();
|
|
225
|
+
}
|
|
170
226
|
});
|
|
171
227
|
};
|
|
172
228
|
this.chart = null;
|
|
@@ -175,12 +231,6 @@ class Dashboard extends _chartComponent.default {
|
|
|
175
231
|
toolTipPosition: null
|
|
176
232
|
};
|
|
177
233
|
}
|
|
178
|
-
componentDidMount() {
|
|
179
|
-
this.createChart();
|
|
180
|
-
this.drawChart();
|
|
181
|
-
this.debouncedHandleResize = (0, _lodashEs.debounce)(this.handleResize, 300);
|
|
182
|
-
window.addEventListener('resize', this.debouncedHandleResize);
|
|
183
|
-
}
|
|
184
234
|
componentDidUpdate(prevProps) {
|
|
185
235
|
super.componentDidUpdate(prevProps);
|
|
186
236
|
if (_utils.BaseUtils.shouldChartComponentUpdate(prevProps, this.props)) {
|
|
@@ -213,7 +263,7 @@ Dashboard.propTypes = {
|
|
|
213
263
|
chart: _propTypes.default.object,
|
|
214
264
|
groupbyColumn: _propTypes.default.object,
|
|
215
265
|
summaryColumn: _propTypes.default.object,
|
|
216
|
-
result: _propTypes.default.number,
|
|
266
|
+
result: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.object]),
|
|
217
267
|
tables: _propTypes.default.array,
|
|
218
268
|
globalTheme: _propTypes.default.string,
|
|
219
269
|
chartColorTheme: _propTypes.default.string,
|
|
@@ -12,6 +12,7 @@ var _lodashEs = require("lodash-es");
|
|
|
12
12
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
13
|
var d3 = _interopRequireWildcard(require("d3"));
|
|
14
14
|
var _dtableUtils = require("dtable-utils");
|
|
15
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
15
16
|
var _constants = require("../../constants");
|
|
16
17
|
var _utils = require("../../utils");
|
|
17
18
|
var _intl = _interopRequireDefault(require("../../intl"));
|
|
@@ -51,7 +52,10 @@ class HorizontalBarGroup extends _chartComponent.default {
|
|
|
51
52
|
customRender,
|
|
52
53
|
chart
|
|
53
54
|
} = this.props;
|
|
54
|
-
|
|
55
|
+
const {
|
|
56
|
+
column_groupby_column_key
|
|
57
|
+
} = chart.config || {};
|
|
58
|
+
data = _utils.BaseUtils.formatEmptyName(data, column_groupby_column_key, _intl.default.get(_constants.EMPTY_NAME));
|
|
55
59
|
if (!Array.isArray(data)) return;
|
|
56
60
|
const {
|
|
57
61
|
sort_type,
|
|
@@ -92,9 +96,24 @@ class HorizontalBarGroup extends _chartComponent.default {
|
|
|
92
96
|
marginRight
|
|
93
97
|
} = this.chartBoundingClientRect;
|
|
94
98
|
const groupByColumn = this.getColumn(tables, table_id, column_groupby_column_key);
|
|
99
|
+
const isGroupByDate = [_dtableUtils.CellType.DATE, _dtableUtils.CellType.CTIME, _dtableUtils.CellType.MTIME].includes(groupByColumn === null || groupByColumn === void 0 ? void 0 : groupByColumn.type);
|
|
100
|
+
if (isGroupByDate) {
|
|
101
|
+
const emptyName = _intl.default.get(_constants.EMPTY_NAME);
|
|
102
|
+
data = data.map(item => {
|
|
103
|
+
const rawGroupName = item.group_name;
|
|
104
|
+
if (rawGroupName === null || rawGroupName === undefined || rawGroupName === '') return item;
|
|
105
|
+
if (rawGroupName === emptyName) return item;
|
|
106
|
+
const dateValue = (0, _dayjs.default)(rawGroupName);
|
|
107
|
+
if (!dateValue.isValid()) return item;
|
|
108
|
+
return {
|
|
109
|
+
...item,
|
|
110
|
+
group_name: dateValue.format('YYYY-MM-DD')
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
95
114
|
const useSingleSelectColumnColor = (groupByColumn === null || groupByColumn === void 0 ? void 0 : groupByColumn.type) === _dtableUtils.CellType.SINGLE_SELECT && color_theme === _colorRules.SUPPORT_SINGLE_SELECT_THEMES_OPTIONS.SINGLE_SELECT_COLUMN_COLORS;
|
|
96
115
|
useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme);
|
|
97
|
-
const fy = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([chartHeight - insertPadding, insertPadding]).paddingInner(0.
|
|
116
|
+
const fy = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([chartHeight - insertPadding, insertPadding]).paddingInner(0.3).paddingOuter(0.1);
|
|
98
117
|
const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'group_name', columnGroupbyColumn, chart);
|
|
99
118
|
const y = d3.scaleBand().domain(new Set(sortedData.map(d => d.group_name))).range([0, fy.bandwidth()]).paddingInner(0).paddingOuter(0);
|
|
100
119
|
|
|
@@ -176,7 +195,7 @@ class HorizontalBarGroup extends _chartComponent.default {
|
|
|
176
195
|
this.setLegend({
|
|
177
196
|
legendName: 'group_name',
|
|
178
197
|
theme,
|
|
179
|
-
legendPosition: 'top-
|
|
198
|
+
legendPosition: 'top-right',
|
|
180
199
|
data,
|
|
181
200
|
groupColumn: this.props.columnGroupbyColumn,
|
|
182
201
|
chart
|
|
@@ -205,10 +224,11 @@ class HorizontalBarGroup extends _chartComponent.default {
|
|
|
205
224
|
title: !title && typeof title !== 'number' ? _intl.default.get(_constants.EMPTY_NAME) : title,
|
|
206
225
|
items: children.map(child => {
|
|
207
226
|
const data = child.__data__;
|
|
227
|
+
const groupName = data.group_name === null || data.group_name === undefined || data.group_name === '' ? _intl.default.get(_constants.EMPTY_NAME) : data.group_name;
|
|
208
228
|
return {
|
|
209
|
-
color: this.colorMap[
|
|
210
|
-
name:
|
|
211
|
-
value: _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, Number(
|
|
229
|
+
color: this.colorMap[groupName] || _constants.CHART_STYLE_COLORS[0],
|
|
230
|
+
name: groupName,
|
|
231
|
+
value: _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, Number(child.getAttribute('value')), horizontal_axis_summary_method)
|
|
212
232
|
};
|
|
213
233
|
})
|
|
214
234
|
};
|
|
@@ -49,7 +49,7 @@ class HorizontalBarStack extends _chartComponent.default {
|
|
|
49
49
|
customRender,
|
|
50
50
|
chart
|
|
51
51
|
} = this.props;
|
|
52
|
-
data = _utils.BaseUtils.formatEmptyName(data,
|
|
52
|
+
data = _utils.BaseUtils.formatEmptyName(data, chart.config.column_groupby_column_key, _intl.default.get('Empty'));
|
|
53
53
|
if (!Array.isArray(data)) return;
|
|
54
54
|
const {
|
|
55
55
|
sort_type,
|
|
@@ -95,7 +95,7 @@ class HorizontalBarStack extends _chartComponent.default {
|
|
|
95
95
|
const series = d3.stack().keys(d3.union(sortedData.map(d => d.group_name))).value((_ref, key) => {
|
|
96
96
|
var _group$get;
|
|
97
97
|
let [_, group] = _ref;
|
|
98
|
-
return ((_group$get = group.get(
|
|
98
|
+
return ((_group$get = group.get(key)) === null || _group$get === void 0 ? void 0 : _group$get.value) || 0;
|
|
99
99
|
})(d3.index(sortedData, d => d.name, d => d.group_name));
|
|
100
100
|
const newSeries = this.handleSeries(series, sortedData);
|
|
101
101
|
const y = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([chartHeight - insertPadding, insertPadding]).paddingInner(0.5).paddingOuter(0.1);
|
|
@@ -50,7 +50,7 @@ class LineGroup extends _chartComponent.default {
|
|
|
50
50
|
let {
|
|
51
51
|
result: data
|
|
52
52
|
} = this.props;
|
|
53
|
-
data = _utils.BaseUtils.formatEmptyName(data, '', _intl.default.get('Empty'));
|
|
53
|
+
data = _utils.BaseUtils.formatEmptyName(data, 'group_name', _intl.default.get('Empty'));
|
|
54
54
|
if (!Array.isArray(data)) return;
|
|
55
55
|
this.draw(data);
|
|
56
56
|
this.renderAxisLabel(this.props.chart, this.props.tables, this.container);
|
|
@@ -119,12 +119,17 @@ class LineGroup extends _chartComponent.default {
|
|
|
119
119
|
const title = !data.name && typeof data.name !== 'number' ? _intl.default.get(_constants.EMPTY_NAME) : data.name;
|
|
120
120
|
const circleList = (_contentWrapper$selec = contentWrapper.selectAll('circle')) === null || _contentWrapper$selec === void 0 ? void 0 : _contentWrapper$selec.nodes();
|
|
121
121
|
const items = circleList.filter(circle => circle.getAttribute('data-name') === title).map(circle => {
|
|
122
|
+
const groupName = circle.getAttribute('data-groupName') || _intl.default.get(_constants.EMPTY_NAME);
|
|
122
123
|
return {
|
|
123
|
-
color: this.colorMap[
|
|
124
|
-
name:
|
|
124
|
+
color: this.colorMap[groupName],
|
|
125
|
+
name: groupName,
|
|
125
126
|
value: _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, Number(circle.getAttribute('data-text')), y_axis_summary_method)
|
|
126
127
|
};
|
|
127
128
|
});
|
|
129
|
+
items.sort((a, b) => String(a.name).localeCompare(String(b.name), undefined, {
|
|
130
|
+
numeric: true,
|
|
131
|
+
sensitivity: 'base'
|
|
132
|
+
}));
|
|
128
133
|
return {
|
|
129
134
|
title,
|
|
130
135
|
items
|
|
@@ -53,6 +53,7 @@ class MapBubble extends _chartComponent.default {
|
|
|
53
53
|
};
|
|
54
54
|
this.showTooltip = (event, data) => {
|
|
55
55
|
const curData = data.find(item => item.name.includes(event.currentTarget.getAttribute('data-name')));
|
|
56
|
+
if (!curData) return;
|
|
56
57
|
const title = curData.nameType === 'en' ? curData.name : curData.name_cn;
|
|
57
58
|
const value = Number(event.currentTarget.getAttribute('data-value'));
|
|
58
59
|
const {
|
|
@@ -54,6 +54,7 @@ class Map extends _chartComponent.default {
|
|
|
54
54
|
};
|
|
55
55
|
this.showTooltip = (event, data) => {
|
|
56
56
|
const curData = data.find(item => item.name.includes(event.target.parentNode.getAttribute('data-name')));
|
|
57
|
+
if (!curData) return;
|
|
57
58
|
const title = curData.nameType === 'en' ? curData.name : curData.name_cn;
|
|
58
59
|
const value = Number(event.target.parentNode.getAttribute('data-value'));
|
|
59
60
|
const {
|
package/dist/view/wrapper/pie.js
CHANGED
|
@@ -33,7 +33,7 @@ class Pie extends _chartComponent.default {
|
|
|
33
33
|
} = chart.config;
|
|
34
34
|
const initConfig = {
|
|
35
35
|
insertPadding: 30,
|
|
36
|
-
rightLegendSpace: show_legend ?
|
|
36
|
+
rightLegendSpace: show_legend ? 50 : 0
|
|
37
37
|
};
|
|
38
38
|
this.initChart(this.container, chart === null || chart === void 0 ? void 0 : chart.id, initConfig);
|
|
39
39
|
};
|
|
@@ -33,7 +33,7 @@ class Ring extends _chartComponent.default {
|
|
|
33
33
|
} = chart.config;
|
|
34
34
|
const initConfig = {
|
|
35
35
|
insertPadding: 30,
|
|
36
|
-
rightLegendSpace: show_legend ?
|
|
36
|
+
rightLegendSpace: show_legend ? 50 : 0
|
|
37
37
|
};
|
|
38
38
|
this.initChart(this.container, chart === null || chart === void 0 ? void 0 : chart.id, initConfig);
|
|
39
39
|
};
|
|
@@ -27,8 +27,7 @@ class Scatter extends _chartComponent.default {
|
|
|
27
27
|
};
|
|
28
28
|
this.createChart = () => {
|
|
29
29
|
const {
|
|
30
|
-
chart
|
|
31
|
-
columnGroupbyColumn
|
|
30
|
+
chart
|
|
32
31
|
} = this.props;
|
|
33
32
|
const {
|
|
34
33
|
y_axis_show_label,
|
|
@@ -40,7 +39,7 @@ class Scatter extends _chartComponent.default {
|
|
|
40
39
|
marginLeft: y_axis_show_label ? 20 : 0,
|
|
41
40
|
marginBottom: x_axis_show_label ? 20 : 0,
|
|
42
41
|
marginTop: y_axis_show_value ? 15 : 0,
|
|
43
|
-
bottomLegendSpace:
|
|
42
|
+
bottomLegendSpace: 0
|
|
44
43
|
};
|
|
45
44
|
this.initChart(this.container, chart === null || chart === void 0 ? void 0 : chart.id, initConfig);
|
|
46
45
|
};
|
|
@@ -61,8 +60,11 @@ class Scatter extends _chartComponent.default {
|
|
|
61
60
|
this.transformStringToNumber = data => {
|
|
62
61
|
const newData = (0, _lodashEs.cloneDeep)(data);
|
|
63
62
|
newData.forEach(item => {
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
if (item.original_value) {
|
|
64
|
+
var _item$original_value, _item$original_value2;
|
|
65
|
+
item.name = ((_item$original_value = item.original_value) === null || _item$original_value === void 0 ? void 0 : _item$original_value.name) || '';
|
|
66
|
+
item.value = ((_item$original_value2 = item.original_value) === null || _item$original_value2 === void 0 ? void 0 : _item$original_value2.value) || 0;
|
|
67
|
+
}
|
|
66
68
|
});
|
|
67
69
|
return newData;
|
|
68
70
|
};
|
|
@@ -268,7 +270,7 @@ class Scatter extends _chartComponent.default {
|
|
|
268
270
|
this.setLegend({
|
|
269
271
|
legendName: 'groupby',
|
|
270
272
|
theme,
|
|
271
|
-
legendPosition: 'top-
|
|
273
|
+
legendPosition: 'top-right',
|
|
272
274
|
data,
|
|
273
275
|
groupColumn: this.props.columnGroupbyColumn,
|
|
274
276
|
chart,
|
|
@@ -98,13 +98,14 @@ class TwoDimensionTable extends _react.PureComponent {
|
|
|
98
98
|
className: "pivot-table-header"
|
|
99
99
|
}), Array.isArray(pivot_columns) && pivot_columns.map((item, index) => {
|
|
100
100
|
return /*#__PURE__*/_react.default.createElement("th", {
|
|
101
|
+
key: "pivot-column-".concat(index),
|
|
101
102
|
className: "pivot-table-header summary-columns-header"
|
|
102
103
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
103
104
|
className: "pivot-table-header-summary-columns-container"
|
|
104
105
|
}, summary_columns.map((column, idx) => {
|
|
105
106
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
106
107
|
className: (0, _classnames.default)('pivot-table-header'),
|
|
107
|
-
key: "pivot-column-".concat(idx)
|
|
108
|
+
key: "pivot-summary-column-".concat(idx)
|
|
108
109
|
}, /*#__PURE__*/_react.default.createElement(_pivotTableDisplayName.default, {
|
|
109
110
|
value: column.name,
|
|
110
111
|
column: column || {},
|
|
@@ -306,7 +307,7 @@ class TwoDimensionTable extends _react.PureComponent {
|
|
|
306
307
|
cellIdx: cells.length
|
|
307
308
|
}),
|
|
308
309
|
title: rowTotal
|
|
309
|
-
}, _utils.BaseUtils.isValidValue(rowTotal, display_empty) ? (
|
|
310
|
+
}, _utils.BaseUtils.isValidValue(rowTotal, display_empty) ? _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, rowTotal, summaryMethod) : /*#__PURE__*/_react.default.createElement("i", null), /*#__PURE__*/_react.default.createElement("span", {
|
|
310
311
|
className: (0, _classnames.default)({
|
|
311
312
|
'selected-pivot-cell-border': isSelectedTotalCell
|
|
312
313
|
})
|
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _contexts = require("../../../../../utils/contexts");
|
|
11
10
|
var _recordsHeaderCell = _interopRequireDefault(require("./records-header-cell"));
|
|
12
11
|
class RecordsHeader extends _react.Component {
|
|
13
12
|
constructor() {
|
package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js
CHANGED
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _lodashEs = require("lodash-es");
|
|
10
9
|
require("./index.css");
|
|
11
10
|
class ResizeColumnHandle extends _react.Component {
|
|
12
11
|
constructor() {
|
|
@@ -18,6 +17,7 @@ class ResizeColumnHandle extends _react.Component {
|
|
|
18
17
|
window.removeEventListener('touchmove', this.onMouseMove);
|
|
19
18
|
};
|
|
20
19
|
this.onMouseDown = e => {
|
|
20
|
+
e.stopPropagation();
|
|
21
21
|
if (e.preventDefault) {
|
|
22
22
|
e.preventDefault();
|
|
23
23
|
}
|
|
@@ -27,12 +27,14 @@ class ResizeColumnHandle extends _react.Component {
|
|
|
27
27
|
window.addEventListener('touchmove', this.onMouseMove);
|
|
28
28
|
};
|
|
29
29
|
this.onMouseUp = e => {
|
|
30
|
+
e.stopPropagation();
|
|
30
31
|
if (this.props.onDragEnd) {
|
|
31
32
|
this.props.onDragEnd(e);
|
|
32
33
|
}
|
|
33
34
|
this.cleanUp();
|
|
34
35
|
};
|
|
35
36
|
this.onMouseMove = e => {
|
|
37
|
+
e.stopPropagation();
|
|
36
38
|
if (e.preventDefault) {
|
|
37
39
|
e.preventDefault();
|
|
38
40
|
}
|