sea-chart 2.0.10 → 2.0.11
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 +1 -1
- package/dist/utils/sql/chart-data-sql.js +2 -1
- package/dist/view/wrapper/bar-compare.js +6 -12
- package/dist/view/wrapper/bar-custom-stack.js +9 -15
- package/dist/view/wrapper/bar-group.js +5 -11
- package/dist/view/wrapper/bar-stack.js +31 -13
- package/dist/view/wrapper/bar.js +2 -8
- package/dist/view/wrapper/chart-component.js +45 -5
- package/dist/view/wrapper/index.js +3 -2
- package/package.json +1 -1
package/dist/api/index.js
CHANGED
|
@@ -324,6 +324,7 @@ class ChartDataSQL {
|
|
|
324
324
|
const {
|
|
325
325
|
x_axis_column_key,
|
|
326
326
|
x_axis_geolocation_granularity,
|
|
327
|
+
x_axis_date_granularity,
|
|
327
328
|
y_axis_summary_type,
|
|
328
329
|
y_axis_summary_column_key,
|
|
329
330
|
y_axis_summary_method,
|
|
@@ -339,7 +340,7 @@ class ChartDataSQL {
|
|
|
339
340
|
}
|
|
340
341
|
this._update_filter_sql(true, groupby_column);
|
|
341
342
|
const groupby_column_name = this._chart_column_name_to_sql(groupby_column, {
|
|
342
|
-
'date_granularity':
|
|
343
|
+
'date_granularity': x_axis_date_granularity,
|
|
343
344
|
'geolocation_granularity': x_axis_geolocation_granularity
|
|
344
345
|
});
|
|
345
346
|
let summary_column_name = this._summary_column_2_sql('COUNT', groupby_column);
|
|
@@ -53,7 +53,7 @@ class BarCompare extends _chartComponent.default {
|
|
|
53
53
|
const theme = _constants.CHART_THEME_COLOR[globalTheme];
|
|
54
54
|
const {
|
|
55
55
|
display_increase,
|
|
56
|
-
y_axis_auto_range,
|
|
56
|
+
y_axis_auto_range = true,
|
|
57
57
|
y_axis_min,
|
|
58
58
|
y_axis_max
|
|
59
59
|
} = chart.config;
|
|
@@ -63,10 +63,13 @@ class BarCompare extends _chartComponent.default {
|
|
|
63
63
|
insertPadding
|
|
64
64
|
} = this.chartBoundingClientRect;
|
|
65
65
|
data = data.sort((a, b) => d3.ascending(a.name, b.name));
|
|
66
|
-
const
|
|
66
|
+
const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, d3.max(data, d => d.value)] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding]);
|
|
67
|
+
|
|
68
|
+
// Y axis
|
|
69
|
+
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => this.drawYaxis(g, theme));
|
|
70
|
+
const fx = d3.scaleBand().domain(d3.group(data, d => d.name).keys()).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.1).paddingOuter(0.1);
|
|
67
71
|
const color = d3.scaleOrdinal().domain(d3.group(data, d => d.group_name).keys()).range(_chartUtils.BaseUtils.getCurrentTheme(chartColorTheme).colors).unknown('#ccc');
|
|
68
72
|
const x = d3.scaleBand().domain(d3.group(data, d => d.group_name).keys()).range([0, fx.bandwidth()]);
|
|
69
|
-
const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, d3.max(data, d => d.value)] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding]);
|
|
70
73
|
|
|
71
74
|
// X axis
|
|
72
75
|
this.chart.append('g').attr('transform', "translate(0,".concat(chartHeight - insertPadding, ")")).call(d3.axisBottom(fx).tickSizeOuter(0).tickSizeInner(5)).call(g => {
|
|
@@ -76,15 +79,6 @@ class BarCompare extends _chartComponent.default {
|
|
|
76
79
|
g.selectAll('text').attr('fill', theme.textColor);
|
|
77
80
|
});
|
|
78
81
|
|
|
79
|
-
// Y axis
|
|
80
|
-
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => {
|
|
81
|
-
g.select('.domain').remove();
|
|
82
|
-
g.selectAll('line').node() && g.selectAll('line').node().remove(); // delete the first line
|
|
83
|
-
g.selectAll('.tick line').clone().attr('x2', chartWidth - insertPadding * 2).attr('stroke', theme.gridColor).attr('stroke-dasharray', '8,3');
|
|
84
|
-
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
85
|
-
g.selectAll('text').attr('fill', theme.textColor);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
82
|
// Rect group
|
|
89
83
|
this.chart.append('g').attr('class', "rects-wrapper-".concat(chart === null || chart === void 0 ? void 0 : chart.id)).selectAll().data(() => d3.group(data, d => d.name)).join('g').attr('transform', _ref => {
|
|
90
84
|
let [name, dum] = _ref;
|
|
@@ -141,12 +141,15 @@ class BarCustom extends _chartComponent.default {
|
|
|
141
141
|
} = this.chartBoundingClientRect;
|
|
142
142
|
const organizedData = this.organizeData(data);
|
|
143
143
|
const color = d3.scaleOrdinal().domain(d3.group(data, d => d.group_name).keys()).range(_chartUtils.BaseUtils.getCurrentTheme(chartColorTheme).colors).unknown('#ccc');
|
|
144
|
-
const fx = d3.scaleBand().domain(new Set(organizedData.map(d => d.name))).range([insertPadding, chartWidth - insertPadding]).paddingInner(0.1).paddingOuter(0.1);
|
|
145
|
-
const x = d3.scaleBand().domain(new Set(data.map(d => d.y_axis_type))).range([0, fx.bandwidth()]);
|
|
146
144
|
const allSeries = this.getAllSeries(organizedData);
|
|
147
145
|
const niceEnd = d3.nice(0, d3.max(allSeries, d => d[1]), 5)[1];
|
|
148
146
|
const y = d3.scaleLinear().domain([0, niceEnd]).range([chartHeight - insertPadding, insertPadding]);
|
|
149
147
|
|
|
148
|
+
// Y axis
|
|
149
|
+
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => this.drawYaxis(g, theme));
|
|
150
|
+
const fx = d3.scaleBand().domain(new Set(organizedData.map(d => d.name))).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.1).paddingOuter(0.1);
|
|
151
|
+
const x = d3.scaleBand().domain(new Set(data.map(d => d.y_axis_type))).range([0, fx.bandwidth()]);
|
|
152
|
+
|
|
150
153
|
// X axis
|
|
151
154
|
this.chart.append('g').attr('transform', "translate(0,".concat(chartHeight - insertPadding, ")")).call(d3.axisBottom(fx).tickSizeOuter(0).tickSizeInner(5)).call(g => {
|
|
152
155
|
g.selectAll('.domain').attr('stroke', theme.XAxisColor);
|
|
@@ -155,15 +158,6 @@ class BarCustom extends _chartComponent.default {
|
|
|
155
158
|
g.selectAll('text').attr('fill', theme.textColor);
|
|
156
159
|
});
|
|
157
160
|
|
|
158
|
-
// Y axis
|
|
159
|
-
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => {
|
|
160
|
-
g.select('.domain').remove();
|
|
161
|
-
g.selectAll('line').node() && g.selectAll('line').node().remove(); // delete the first line
|
|
162
|
-
g.selectAll('.tick line').clone().attr('x2', chartWidth - insertPadding * 2).attr('stroke', theme.gridColor).attr('stroke-dasharray', '8,3');
|
|
163
|
-
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
164
|
-
g.selectAll('text').attr('fill', theme.textColor);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
161
|
// Rect group
|
|
168
162
|
this.chart.append('g').attr('class', "rects-wrapper-".concat(chart === null || chart === void 0 ? void 0 : chart.id)).selectAll().data(organizedData).join('g').attr('transform', d => {
|
|
169
163
|
const {
|
|
@@ -175,15 +169,13 @@ class BarCustom extends _chartComponent.default {
|
|
|
175
169
|
name
|
|
176
170
|
} = d;
|
|
177
171
|
return fx(name);
|
|
178
|
-
}).selectAll().data(d => d.stacks).join('g').attr('class', 'stackGroup').attr('data-slugid', d => d.slugid).selectAll().data(d => d.series).join('rect').attr('class', 'stack').attr('
|
|
179
|
-
return index === arr.length - 1;
|
|
180
|
-
}).attr('x', d => x(d.stackKey)).attr('y', d => y(d[0][1])).attr('width', x.bandwidth()).attr('height', d => {
|
|
172
|
+
}).selectAll().data(d => d.stacks).join('g').attr('class', 'stackGroup').attr('data-slugid', d => d.slugid).selectAll().data(d => d.series).join('rect').attr('class', 'stack').attr('x', d => x(d.stackKey)).attr('y', d => y(d[0][1])).attr('width', x.bandwidth()).attr('height', d => {
|
|
181
173
|
const height = y(d[0][0]) - y(d[0][1]);
|
|
182
174
|
return isNaN(height) ? 0 : height;
|
|
183
175
|
}).attr('fill', d => color(d.key)).attr('data-value', d => d.stackData.value).attr('data-rectId', d => d.stackData.slugId).attr('data-groupName', d => d.stackData.group_name).attr('data-title', d => d.stackData.name).call(g => {
|
|
184
176
|
// add rect borderRadius
|
|
185
177
|
Array.from(g._parents).forEach(group => {
|
|
186
|
-
const topRect = Array.from(group.children).find(rect => rect.getAttribute('
|
|
178
|
+
const topRect = Array.from(group.children).reverse().find(rect => Number(rect.getAttribute('height')) !== 0);
|
|
187
179
|
// Add mask rect
|
|
188
180
|
if (topRect) {
|
|
189
181
|
this.addMaskRect(group, topRect, x.bandwidth(), color);
|
|
@@ -225,6 +217,8 @@ class BarCustom extends _chartComponent.default {
|
|
|
225
217
|
const theme = _constants.CHART_THEME_COLOR[globalTheme];
|
|
226
218
|
Array.from(g._parents).forEach(group => {
|
|
227
219
|
Array.from(group.children).forEach(rect => {
|
|
220
|
+
// The height is 0, and the label is not displayed.
|
|
221
|
+
if (Number(rect.getAttribute('height')) === 0) return;
|
|
228
222
|
this.addLabelToRectCenter({
|
|
229
223
|
container: rect.parentNode,
|
|
230
224
|
x: Number(rect.getAttribute('x')),
|
|
@@ -105,10 +105,13 @@ class BarGroup extends _chartComponent.default {
|
|
|
105
105
|
const useSingleSelectColumnColor = (column_groupby_column === null || column_groupby_column === void 0 ? void 0 : column_groupby_column.type) === _dtableUtils.CellType.SINGLE_SELECT && color_theme === _colorRules.SUPPORT_SINGLE_SELECT_THEMES_OPTIONS.SINGLE_SELECT_COLUMN_COLORS;
|
|
106
106
|
useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme); // use single select column color
|
|
107
107
|
|
|
108
|
-
const fx = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([insertPadding, chartWidth - insertPadding]).paddingInner(0.1);
|
|
109
|
-
const x = d3.scaleBand().domain(new Set(data.map(d => d.group_name))).range([0, fx.bandwidth()]);
|
|
110
108
|
const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, d3.max(data, d => d.value)] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding + marginTop]);
|
|
111
109
|
|
|
110
|
+
// Y axis
|
|
111
|
+
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => this.drawYaxis(g, theme));
|
|
112
|
+
const fx = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.1);
|
|
113
|
+
const x = d3.scaleBand().domain(new Set(data.map(d => d.group_name))).range([0, fx.bandwidth()]);
|
|
114
|
+
|
|
112
115
|
// X axis
|
|
113
116
|
this.chart.append('g').attr('transform', "translate(0,".concat(chartHeight - insertPadding, ")")).call(d3.axisBottom(fx).tickSizeOuter(0).tickSizeInner(5)).call(g => {
|
|
114
117
|
g.selectAll('.domain').attr('stroke', theme.XAxisColor);
|
|
@@ -117,15 +120,6 @@ class BarGroup extends _chartComponent.default {
|
|
|
117
120
|
g.selectAll('text').attr('fill', theme.textColor);
|
|
118
121
|
});
|
|
119
122
|
|
|
120
|
-
// Y axis
|
|
121
|
-
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => {
|
|
122
|
-
g.select('.domain').remove();
|
|
123
|
-
g.selectAll('line').node() && g.selectAll('line').node().remove(); // delete the first line
|
|
124
|
-
g.selectAll('.tick line').clone().attr('x2', chartWidth - insertPadding * 2).attr('stroke', theme.gridColor).attr('stroke-dasharray', '8,3');
|
|
125
|
-
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
126
|
-
g.selectAll('text').attr('fill', theme.textColor);
|
|
127
|
-
});
|
|
128
|
-
|
|
129
123
|
// Rect group
|
|
130
124
|
this.chart.append('g').selectAll().data(d3.group(data, d => d.name)).join('g').attr('transform', _ref => {
|
|
131
125
|
let [name, dum] = _ref;
|
|
@@ -106,10 +106,13 @@ class BarStack extends _chartComponent.default {
|
|
|
106
106
|
let [_, group] = _ref;
|
|
107
107
|
return (_group$get = group.get(String(key))) === null || _group$get === void 0 ? void 0 : _group$get.value;
|
|
108
108
|
})(d3.index(data, d => d.name, d => d.group_name));
|
|
109
|
-
const x = d3.scaleBand().domain(d3.group(data, d => d.name).keys()).range([insertPadding, chartWidth - insertPadding]).paddingInner(0.1).paddingOuter(0.1);
|
|
110
109
|
const niceEnd = d3.nice(0, d3.max(series, d => d3.max(d, d => d[1])), 5)[1];
|
|
111
110
|
const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, niceEnd] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding + marginTop]);
|
|
112
111
|
|
|
112
|
+
// Y axis
|
|
113
|
+
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => this.drawYaxis(g, theme));
|
|
114
|
+
const x = d3.scaleBand().domain(d3.group(data, d => d.name).keys()).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.1).paddingOuter(0.1);
|
|
115
|
+
|
|
113
116
|
// X axis
|
|
114
117
|
this.chart.append('g').attr('transform', "translate(0,".concat(chartHeight - insertPadding, ")")).call(d3.axisBottom(x).tickSizeOuter(0).tickSizeInner(5)).call(g => {
|
|
115
118
|
g.selectAll('.domain').attr('stroke', theme.XAxisColor);
|
|
@@ -118,15 +121,6 @@ class BarStack extends _chartComponent.default {
|
|
|
118
121
|
g.selectAll('text').attr('fill', theme.textColor);
|
|
119
122
|
});
|
|
120
123
|
|
|
121
|
-
// Y axis
|
|
122
|
-
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => {
|
|
123
|
-
g.select('.domain').remove();
|
|
124
|
-
g.selectAll('line').node() && g.selectAll('line').node().remove(); // delete the first line
|
|
125
|
-
g.selectAll('.tick line').clone().attr('x2', chartWidth - insertPadding * 2).attr('stroke', theme.gridColor).attr('stroke-dasharray', '8,3');
|
|
126
|
-
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
127
|
-
g.selectAll('text').attr('fill', theme.textColor);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
124
|
// Rect group
|
|
131
125
|
this.rectsWrapper = this.chart.append('g').attr('class', "rects-wrapper-".concat(chart === null || chart === void 0 ? void 0 : chart.id));
|
|
132
126
|
this.rectsWrapper.selectAll().data(series).join('g').attr('data-key', d => d.key).selectAll('rect').data(D => {
|
|
@@ -151,14 +145,23 @@ class BarStack extends _chartComponent.default {
|
|
|
151
145
|
} = d;
|
|
152
146
|
return data[0];
|
|
153
147
|
}).call(g => {
|
|
148
|
+
const groupRects = this.handleGroupRects(series, g._parents);
|
|
149
|
+
groupRects.forEach(group => {
|
|
150
|
+
var _firstEl;
|
|
151
|
+
const reverseGroup = group.reverse();
|
|
152
|
+
let firstEl = reverseGroup[0]; // firstEl is top level rect
|
|
153
|
+
if (Number(firstEl.getAttribute('height')) === 0) {
|
|
154
|
+
firstEl = reverseGroup.slice(1).find(item => Number(item.getAttribute('height')) !== 0);
|
|
155
|
+
}
|
|
156
|
+
// Add mask rect
|
|
157
|
+
firstEl && this.addMaskRect((_firstEl = firstEl) === null || _firstEl === void 0 ? void 0 : _firstEl.parentNode, firstEl, x.bandwidth());
|
|
158
|
+
});
|
|
154
159
|
const [topG] = g._parents.slice(-1);
|
|
155
|
-
Array.from(topG.children).forEach(rect => {
|
|
160
|
+
Array.from(topG.children).forEach((rect, index) => {
|
|
156
161
|
// Add label (get the total value of each stack)
|
|
157
162
|
if (display_each_block_data) {
|
|
158
163
|
this.addLabelByEachStack(data, topG, rect, x);
|
|
159
164
|
}
|
|
160
|
-
// Add mask rect
|
|
161
|
-
this.addMaskRect(topG, rect, x.bandwidth());
|
|
162
165
|
});
|
|
163
166
|
// Add label
|
|
164
167
|
if (y_axis_show_value) {
|
|
@@ -186,6 +189,19 @@ class BarStack extends _chartComponent.default {
|
|
|
186
189
|
groupColumn: this.props.columnGroupbyColumn
|
|
187
190
|
});
|
|
188
191
|
};
|
|
192
|
+
// Horizontal stacking processing position vertical stacking
|
|
193
|
+
this.handleGroupRects = (series, gParents) => {
|
|
194
|
+
const groupRects = [];
|
|
195
|
+
const len = series[0].length;
|
|
196
|
+
for (let i = 0; i < len; i++) {
|
|
197
|
+
const rects = [];
|
|
198
|
+
gParents.forEach(item => {
|
|
199
|
+
rects.push(item.children[i]);
|
|
200
|
+
});
|
|
201
|
+
groupRects.push(rects);
|
|
202
|
+
}
|
|
203
|
+
return groupRects;
|
|
204
|
+
};
|
|
189
205
|
this.showTooltip = event => {
|
|
190
206
|
const offsetX = d3.pointer(event)[0];
|
|
191
207
|
const offsetY = d3.pointer(event)[1];
|
|
@@ -284,6 +300,8 @@ class BarStack extends _chartComponent.default {
|
|
|
284
300
|
const theme = _constants.CHART_THEME_COLOR[globalTheme];
|
|
285
301
|
g._parents.forEach(group => {
|
|
286
302
|
Array.from(group.children).forEach(rect => {
|
|
303
|
+
// The height is 0, and the label is not displayed.
|
|
304
|
+
if (Number(rect.getAttribute('height')) === 0) return;
|
|
287
305
|
this.addLabelToRectCenter({
|
|
288
306
|
container: group,
|
|
289
307
|
x: Number(rect.getAttribute('x')),
|
package/dist/view/wrapper/bar.js
CHANGED
|
@@ -153,21 +153,15 @@ class Bar extends _chartComponent.default {
|
|
|
153
153
|
insertPadding,
|
|
154
154
|
marginTop
|
|
155
155
|
} = this.chartBoundingClientRect;
|
|
156
|
-
const x = d3.scaleBand().domain(data.map(item => item.name)).range([insertPadding, chartWidth - insertPadding]).paddingInner(0.4).paddingOuter(0.1);
|
|
157
156
|
const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, d3.max(data, d => d.value)] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding + marginTop]);
|
|
157
|
+
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ", 0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => this.drawYaxis(g, theme));
|
|
158
|
+
const x = d3.scaleBand().domain(data.map(item => item.name)).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.4).paddingOuter(0.1);
|
|
158
159
|
this.chart.append('g').attr('transform', "translate(0, ".concat(chartHeight - insertPadding, ")")).call(d3.axisBottom(x).tickSizeOuter(0).tickSizeInner(5)).call(g => {
|
|
159
160
|
g.selectAll('.domain').attr('stroke', theme.XAxisColor);
|
|
160
161
|
g.selectAll('.tick line').attr('stroke', theme.XAxisColor);
|
|
161
162
|
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
162
163
|
g.selectAll('text').attr('fill', theme.textColor);
|
|
163
164
|
});
|
|
164
|
-
this.chart.append('g').attr('transform', "translate(".concat(insertPadding, ", 0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => d)).call(g => {
|
|
165
|
-
g.select('.domain').remove();
|
|
166
|
-
g.selectAll('line').node() && g.selectAll('line').node().remove(); // delete the first line
|
|
167
|
-
g.selectAll('.tick line').clone().attr('x2', chartWidth - insertPadding * 2).attr('stroke', theme.gridColor).attr('stroke-dasharray', '8,3');
|
|
168
|
-
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
169
|
-
g.selectAll('text').attr('fill', theme.textColor);
|
|
170
|
-
});
|
|
171
165
|
const rectsWrapper = this.chart.append('g').attr('class', "rects-wrapper-".concat(chart === null || chart === void 0 ? void 0 : chart.id));
|
|
172
166
|
rectsWrapper.selectAll().data(data).join('rect').attr('fill', d => d3.color(this.getFillColor(d))).attr('data-x', d => x(d.name)).attr('data-y', d => y(d.value)).attr('data-width', x.bandwidth()).attr('data-value', d => d.value).attr('data-groupName', d => d.name).attr('data-slugid', d => d.slugId).attr('x', d => x(d.name)).attr('y', d => y(d.value)).attr('width', x.bandwidth()).attr('height', d => y(0) - y(d.value)).call(g => {
|
|
173
167
|
g.nodes().forEach(path => {
|
|
@@ -783,6 +783,7 @@ class ChartComponent extends _react.Component {
|
|
|
783
783
|
let allWidth = start;
|
|
784
784
|
const groupsData = [];
|
|
785
785
|
const newLegendData = (0, _lodashEs.cloneDeep)(legendData);
|
|
786
|
+
let lastIndex = 0;
|
|
786
787
|
legendData.forEach((item, index) => {
|
|
787
788
|
const virtualLegend = this.chart.append('g').attr('opacity', 0);
|
|
788
789
|
virtualLegend.append('rect').attr('width', legendRectWidth).attr('height', legendRectHeight).attr('rx', r);
|
|
@@ -792,15 +793,16 @@ class ChartComponent extends _react.Component {
|
|
|
792
793
|
} = virtualLegend.node().getBoundingClientRect();
|
|
793
794
|
const itemWidth = index === legendData.length - 1 ? width : width + legendItemMargin; // last item no used margin
|
|
794
795
|
allWidth = allWidth + itemWidth;
|
|
795
|
-
if (allWidth
|
|
796
|
-
groupsData.push(newLegendData.slice(0, index));
|
|
797
|
-
newLegendData.splice(0, index);
|
|
798
|
-
|
|
796
|
+
if (allWidth > end) {
|
|
797
|
+
groupsData.push(newLegendData.slice(0, index - lastIndex));
|
|
798
|
+
newLegendData.splice(0, index - lastIndex);
|
|
799
|
+
lastIndex = index;
|
|
800
|
+
allWidth = start + itemWidth;
|
|
799
801
|
}
|
|
800
802
|
virtualLegend.remove();
|
|
801
803
|
});
|
|
802
804
|
const restLegendItems = newLegendData.slice(0);
|
|
803
|
-
groupsData.push(restLegendItems);
|
|
805
|
+
restLegendItems.length !== 0 && groupsData.push(restLegendItems);
|
|
804
806
|
return groupsData;
|
|
805
807
|
};
|
|
806
808
|
this.getLegendBoundary = legendPosition => {
|
|
@@ -1162,6 +1164,44 @@ class ChartComponent extends _react.Component {
|
|
|
1162
1164
|
clipPath.node().appendChild(clipRect.node());
|
|
1163
1165
|
d3.select(rect).attr('clip-path', "url(#".concat(rectId, ")"));
|
|
1164
1166
|
};
|
|
1167
|
+
this.drawYaxis = (g, theme) => {
|
|
1168
|
+
const {
|
|
1169
|
+
width: chartWidth,
|
|
1170
|
+
insertPadding
|
|
1171
|
+
} = this.chartBoundingClientRect;
|
|
1172
|
+
// remove domain
|
|
1173
|
+
g.select('.domain').remove();
|
|
1174
|
+
|
|
1175
|
+
// add text
|
|
1176
|
+
g.selectAll('text').attr('font-size', theme.fontSize);
|
|
1177
|
+
g.selectAll('text').attr('fill', theme.textColor);
|
|
1178
|
+
this.checkTextOverflow(g.selectAll('text').nodes());
|
|
1179
|
+
|
|
1180
|
+
// line
|
|
1181
|
+
g.selectAll('line').node() && g.selectAll('line').node().remove(); // delete the first line
|
|
1182
|
+
g.selectAll('.tick line').clone().attr('x2', chartWidth - insertPadding * 2 - this.horizontalOverflowOffset).attr('stroke', theme.gridColor).attr('stroke-dasharray', '8,3');
|
|
1183
|
+
|
|
1184
|
+
// update g translateX
|
|
1185
|
+
g.attr('transform', "translate(".concat(insertPadding + this.horizontalOverflowOffset, ", 0)"));
|
|
1186
|
+
};
|
|
1187
|
+
this.checkTextOverflow = allTextEl => {
|
|
1188
|
+
const {
|
|
1189
|
+
insertPadding
|
|
1190
|
+
} = this.chartBoundingClientRect;
|
|
1191
|
+
const allTextWidth = allTextEl.map(item => {
|
|
1192
|
+
const {
|
|
1193
|
+
width
|
|
1194
|
+
} = item.getBoundingClientRect();
|
|
1195
|
+
return width;
|
|
1196
|
+
});
|
|
1197
|
+
const maxTextWidth = Math.max(...allTextWidth);
|
|
1198
|
+
this.horizontalOverflowOffset = 0;
|
|
1199
|
+
if (maxTextWidth > insertPadding) {
|
|
1200
|
+
// horizontal overflow
|
|
1201
|
+
const offset = maxTextWidth + 3 - insertPadding; // 3 is text and line default spacing
|
|
1202
|
+
this.horizontalOverflowOffset = offset;
|
|
1203
|
+
}
|
|
1204
|
+
};
|
|
1165
1205
|
this.initLabelStroke(props === null || props === void 0 ? void 0 : props.globalTheme);
|
|
1166
1206
|
this.chartBoundingClientRect = {};
|
|
1167
1207
|
}
|
|
@@ -113,9 +113,10 @@ const Wrapper = _ref => {
|
|
|
113
113
|
config
|
|
114
114
|
} = chart;
|
|
115
115
|
const {
|
|
116
|
-
column_groupby_multiple_numeric_column
|
|
116
|
+
column_groupby_multiple_numeric_column,
|
|
117
|
+
column_groupby_column_key
|
|
117
118
|
} = config;
|
|
118
|
-
const BarGroupComponent = column_groupby_multiple_numeric_column ? _barStack.default :
|
|
119
|
+
const BarGroupComponent = column_groupby_column_key || column_groupby_multiple_numeric_column ? _barStack.default : _bar.default;
|
|
119
120
|
return /*#__PURE__*/_react.default.createElement(BarGroupComponent, Object.assign({}, baseProps, {
|
|
120
121
|
canvasStyle: canvasStyle
|
|
121
122
|
}));
|