sea-chart 2.0.17 → 2.0.18

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.
@@ -1780,4 +1780,34 @@ BaseUtils.isCollaboratorColumnOrMultipleColumn = columnMap => {
1780
1780
  }
1781
1781
  return false;
1782
1782
  };
1783
+ BaseUtils.sortDataByGroupName = function (data, groupKey, groupColumn) {
1784
+ let chart = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
1785
+ config: {}
1786
+ };
1787
+ const {
1788
+ column_groupby_multiple_numeric_column
1789
+ } = chart.config;
1790
+ if (!column_groupby_multiple_numeric_column) {
1791
+ if (groupColumn) {
1792
+ if ([_dtableUtils.CellType.SINGLE_SELECT].includes(groupColumn.type)) {
1793
+ data.forEach(item => {
1794
+ const option = groupColumn.data.options.find(option => option.name === item[groupKey]);
1795
+ if (option !== null && option !== void 0 && option.id) {
1796
+ item['group_name_id'] = option.id;
1797
+ item['oldName'] = item.name;
1798
+ item.name = item['group_name_id'];
1799
+ }
1800
+ });
1801
+ _BaseUtils.sortCharts(data, groupColumn, 'name');
1802
+ data.forEach(item => {
1803
+ item.name = item['oldName'];
1804
+ });
1805
+ return data;
1806
+ }
1807
+ _BaseUtils.sortCharts(data, groupColumn, groupKey);
1808
+ }
1809
+ return data;
1810
+ }
1811
+ return data;
1812
+ };
1783
1813
  var _default = exports.default = BaseUtils;
@@ -88,7 +88,7 @@ class AreaGroup extends _chartComponent.default {
88
88
  marginTop
89
89
  } = this.chartBoundingClientRect;
90
90
  const useSingleSelectColumnColor = (columnGroupbyColumn === null || columnGroupbyColumn === void 0 ? void 0 : columnGroupbyColumn.type) === _dtableUtils.CellType.SINGLE_SELECT && color_theme === _colorRules.SUPPORT_SINGLE_SELECT_THEMES_OPTIONS.SINGLE_SELECT_COLUMN_COLORS;
91
- useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme);
91
+ useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme, 'group_name', columnGroupbyColumn, chart);
92
92
  const tooltipTitle = this.getTitle(tables, table_id, y_axis_summary_type, y_axis_column_key || y_axis_summary_column_key);
93
93
 
94
94
  // Y axis
@@ -204,7 +204,9 @@ class AreaGroup extends _chartComponent.default {
204
204
  legendName: 'group_name',
205
205
  theme,
206
206
  legendPosition: 'top-right',
207
- data
207
+ data,
208
+ groupColumn: this.props.columnGroupbyColumn,
209
+ chart
208
210
  });
209
211
  };
210
212
  this.updateCircleAndTickStyle = _ref4 => {
@@ -71,6 +71,14 @@ class BarCustom extends _chartComponent.default {
71
71
  }
72
72
  }
73
73
  });
74
+
75
+ // sort Data
76
+ Object.keys(dataMap).forEach(key => {
77
+ const item = dataMap[key];
78
+ Object.keys(item).forEach(itemKey => {
79
+ item[itemKey].reverse();
80
+ });
81
+ });
74
82
  const stacksData = this.handleStacks(dataMap);
75
83
  return stacksData;
76
84
  };
@@ -62,7 +62,8 @@ class BarGroup extends _chartComponent.default {
62
62
  chart,
63
63
  globalTheme,
64
64
  chartColorTheme,
65
- tables
65
+ tables,
66
+ columnGroupbyColumn
66
67
  } = this.props;
67
68
  const {
68
69
  display_goal_line,
@@ -88,14 +89,15 @@ class BarGroup extends _chartComponent.default {
88
89
  const theme = _constants.CHART_THEME_COLOR[globalTheme];
89
90
  const column_groupby_column = this.getColumn(tables, table_id, column_groupby_column_key);
90
91
  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;
91
- useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme); // use single select column color
92
+ useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme, 'group_name', columnGroupbyColumn, chart); // use single select column color
92
93
 
93
94
  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]);
94
95
 
95
96
  // Y axis
96
97
  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));
97
98
  const fx = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.5).paddingOuter(0.1);
98
- const x = d3.scaleBand().domain(new Set(data.map(d => d.group_name))).range([0, fx.bandwidth()]).paddingInner(0).paddingOuter(0);
99
+ const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'group_name', columnGroupbyColumn, chart);
100
+ const x = d3.scaleBand().domain(new Set(sortedData.map(d => d.group_name))).range([0, fx.bandwidth()]).paddingInner(0).paddingOuter(0);
99
101
 
100
102
  // X axis
101
103
  this.chart.append('g').attr('transform', "translate(0,".concat(chartHeight - insertPadding, ")")).call(d3.axisBottom(fx).tickSizeOuter(0).tickSizeInner(5)).call(g => {
@@ -107,7 +109,7 @@ class BarGroup extends _chartComponent.default {
107
109
  });
108
110
 
109
111
  // Rect group
110
- this.chart.append('g').selectAll().data(d3.group(data, d => d.name)).join('g').attr('transform', _ref => {
112
+ this.chart.append('g').selectAll().data(d3.group(sortedData, d => d.name)).join('g').attr('transform', _ref => {
111
113
  let [name, dum] = _ref;
112
114
  // Each group is horizontally centered
113
115
  const offset = (fx.bandwidth() - dum.length * x.bandwidth()) / 2;
@@ -159,7 +161,8 @@ class BarGroup extends _chartComponent.default {
159
161
  theme,
160
162
  legendPosition: 'top-right',
161
163
  data,
162
- groupColumn: this.props.columnGroupbyColumn
164
+ groupColumn: this.props.columnGroupbyColumn,
165
+ chart
163
166
  });
164
167
  };
165
168
  this.showTooltip = event => {
@@ -47,23 +47,18 @@ class BarStack extends _chartComponent.default {
47
47
  };
48
48
  this.drawChart = () => {
49
49
  const {
50
- customRender
50
+ customRender,
51
+ chart
51
52
  } = this.props;
53
+ const {
54
+ sort_type
55
+ } = chart.config;
52
56
  let {
53
57
  result: data
54
58
  } = this.props;
55
59
  data = _utils.BaseUtils.formatEmptyName(data, '', _intl.default.get('Empty'));
56
60
  if (!Array.isArray(data)) return;
57
- const {
58
- chart
59
- } = this.props;
60
- const {
61
- sort_type,
62
- type
63
- } = chart.config;
64
- if (type === _constants.CHART_TYPE.BAR_STACK && sort_type) {
65
- data = (0, _columnUtils.sortDataByGroupSum)(data, sort_type);
66
- }
61
+ sort_type && (data = (0, _columnUtils.sortDataByGroupSum)(data, sort_type));
67
62
  this.draw(data);
68
63
  this.renderAxisLabel(this.props.chart, this.props.tables, this.container);
69
64
  (0, _utils.isFunction)(customRender) && customRender(this.chart);
@@ -73,7 +68,8 @@ class BarStack extends _chartComponent.default {
73
68
  chart,
74
69
  globalTheme,
75
70
  chartColorTheme,
76
- tables
71
+ tables,
72
+ columnGroupbyColumn
77
73
  } = this.props;
78
74
  const {
79
75
  display_goal_line,
@@ -94,18 +90,19 @@ class BarStack extends _chartComponent.default {
94
90
  const column_groupby_column = this.getColumn(tables, table_id, column_groupby_column_key);
95
91
  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;
96
92
  // use single select column color
97
- useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme);
93
+ useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme, 'group_name', columnGroupbyColumn, chart);
98
94
  const {
99
95
  width: chartWidth,
100
96
  height: chartHeight,
101
97
  insertPadding,
102
98
  marginTop
103
99
  } = this.chartBoundingClientRect;
104
- const series = d3.stack().keys(d3.union(data.map(d => d.group_name))).value((_ref, key) => {
100
+ const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'group_name', columnGroupbyColumn, chart).reverse();
101
+ const series = d3.stack().keys(d3.union(sortedData.map(d => d.group_name))).value((_ref, key) => {
105
102
  var _group$get;
106
103
  let [_, group] = _ref;
107
104
  return (_group$get = group.get(String(key))) === null || _group$get === void 0 ? void 0 : _group$get.value;
108
- })(d3.index(data, d => d.name, d => d.group_name));
105
+ })(d3.index(sortedData, d => d.name, d => d.group_name));
109
106
  const niceEnd = d3.nice(0, d3.max(series, d => d3.max(d, d => d[1])), 5)[1];
110
107
  const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, niceEnd] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding + marginTop]);
111
108
 
@@ -187,7 +184,8 @@ class BarStack extends _chartComponent.default {
187
184
  theme,
188
185
  legendPosition: 'top-right',
189
186
  data,
190
- groupColumn: this.props.columnGroupbyColumn
187
+ groupColumn: this.props.columnGroupbyColumn,
188
+ chart
191
189
  });
192
190
  };
193
191
  // Horizontal stacking processing position vertical stacking
@@ -592,11 +592,10 @@ class ChartComponent extends _react.Component {
592
592
  legendPosition = 'top-left',
593
593
  data,
594
594
  colorScale,
595
- groupColumn
595
+ groupColumn,
596
+ chart
596
597
  } = _ref;
597
598
  if (!this.chart) return;
598
- data.forEach(item => item[legendName] = String(item[legendName]));
599
- const legendData = (0, _lodashEs.cloneDeep)(data);
600
599
  this.legendConfig = {
601
600
  legendRectWidth: 20,
602
601
  legendRectHeight: 6,
@@ -611,10 +610,9 @@ class ChartComponent extends _react.Component {
611
610
  theme
612
611
  };
613
612
 
614
- // sort legend data
615
- if (groupColumn && [_dtableUtils.CellType.SINGLE_SELECT].includes(groupColumn.type)) {
616
- this.sortLegend(legendData, groupColumn, legendName);
617
- }
613
+ // sort legend data and format data
614
+ data.forEach(item => item[legendName] = String(item[legendName]));
615
+ const legendData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), legendName, groupColumn, chart);
618
616
  const {
619
617
  width: chartWidth,
620
618
  insertPadding,
@@ -949,13 +947,16 @@ class ChartComponent extends _react.Component {
949
947
  };
950
948
  this.setColorMap = function (data, chartColorTheme) {
951
949
  let groupName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'group_name';
950
+ let groupColumn = arguments.length > 3 ? arguments[3] : undefined;
951
+ let chart = arguments.length > 4 ? arguments[4] : undefined;
952
+ const newData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), groupName, groupColumn, chart);
952
953
  let currentIdx = 0;
953
954
  const defaultColors = _constants.CHART_STYLE_COLORS;
954
955
  let colors = defaultColors;
955
956
  if (chartColorTheme) {
956
957
  colors = _utils.BaseUtils.getCurrentTheme(chartColorTheme).colors;
957
958
  }
958
- const colorMap = data.reduce((acc, cur) => {
959
+ const colorMap = newData.reduce((acc, cur) => {
959
960
  if (cur[groupName] && !acc[cur[groupName]]) {
960
961
  acc[cur[groupName]] = colors[currentIdx++ % colors.length];
961
962
  }
@@ -50,7 +50,8 @@ class Completeness extends _chartComponent.default {
50
50
  const {
51
51
  chart,
52
52
  globalTheme,
53
- chartColorTheme
53
+ chartColorTheme,
54
+ columnGroupbyColumn
54
55
  } = this.props;
55
56
  const theme = _constants.CHART_THEME_COLOR[globalTheme];
56
57
  const {
@@ -69,8 +70,8 @@ class Completeness extends _chartComponent.default {
69
70
  } = this.chartBoundingClientRect;
70
71
  this.markLastForCompleteness(data);
71
72
  const colors = _utils.BaseUtils.getCurrentTheme(chartColorTheme).colors;
72
- this.setColorMap(data, chartColorTheme, 'groupby');
73
- const newSeries = this.getGroupSeries(data);
73
+ this.setColorMap(data, chartColorTheme, 'groupby', columnGroupbyColumn, chart);
74
+ const newSeries = this.getGroupSeries(data, columnGroupbyColumn, chart);
74
75
 
75
76
  // Y axis
76
77
  const fy = d3.scaleBand().domain(newSeries.map(item => item[0])).range([chartHeight - insertPadding, insertPadding]).paddingInner(0.5).paddingOuter(0.1);
@@ -177,7 +178,9 @@ class Completeness extends _chartComponent.default {
177
178
  legendName: 'groupby',
178
179
  theme,
179
180
  legendPosition: 'top-right',
180
- data
181
+ data,
182
+ groupColumn: columnGroupbyColumn,
183
+ chart
181
184
  });
182
185
  };
183
186
  this.handleAcitveAndInActiveState = (state, event) => {
@@ -250,8 +253,9 @@ class Completeness extends _chartComponent.default {
250
253
  toolTipPosition: null
251
254
  });
252
255
  };
253
- this.getGroupSeries = data => {
254
- const groups = d3.groups(data, d => d.name);
256
+ this.getGroupSeries = (data, columnGroupbyColumn, chart) => {
257
+ const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'groupby', columnGroupbyColumn, chart);
258
+ const groups = d3.groups(sortedData, d => d.name);
255
259
  groups.forEach((item, index) => {
256
260
  const itemData = (0, _lodashEs.cloneDeep)(item[1]);
257
261
 
@@ -69,7 +69,8 @@ class HorizontalBarGroup extends _chartComponent.default {
69
69
  chart,
70
70
  globalTheme,
71
71
  chartColorTheme,
72
- tables
72
+ tables,
73
+ columnGroupbyColumn
73
74
  } = this.props;
74
75
  const theme = _constants.CHART_THEME_COLOR[globalTheme];
75
76
  const {
@@ -92,7 +93,8 @@ class HorizontalBarGroup extends _chartComponent.default {
92
93
  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;
93
94
  useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme);
94
95
  const fy = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([chartHeight - insertPadding, insertPadding]).paddingInner(0.5).paddingOuter(0.1);
95
- const y = d3.scaleBand().domain(new Set(data.map(d => d.group_name))).range([0, fy.bandwidth()]).paddingInner(0).paddingOuter(0);
96
+ const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'group_name', columnGroupbyColumn, chart);
97
+ const y = d3.scaleBand().domain(new Set(sortedData.map(d => d.group_name))).range([0, fy.bandwidth()]).paddingInner(0).paddingOuter(0);
96
98
  const yAxis = this.chart.append('g').call(d3.axisLeft(fy).tickSizeOuter(0).tickPadding(0).tickSizeInner(5)).call(g => {
97
99
  g.selectAll('.domain').attr('stroke', theme.XAxisColor);
98
100
  g.selectAll('.tick line').attr('stroke', theme.XAxisColor);
@@ -117,7 +119,7 @@ class HorizontalBarGroup extends _chartComponent.default {
117
119
 
118
120
  // Rect group
119
121
  const rectsWrapper = this.chart.append('g').attr('class', "rects-wrapper-".concat(chart === null || chart === void 0 ? void 0 : chart.id)).attr('transform', "translate(".concat(Number(yAxis.node().getAttribute('data-axisWidth')), ", 0)"));
120
- rectsWrapper.selectAll().data(d3.group(data, d => d.name)).join('g').attr('transform', _ref => {
122
+ rectsWrapper.selectAll().data(d3.group(sortedData, d => d.name)).join('g').attr('transform', _ref => {
121
123
  let [name, dum] = _ref;
122
124
  const offset = (fy.bandwidth() - dum.length * y.bandwidth()) / 2;
123
125
  return "translate(0, ".concat(fy(name) + offset, ")");
@@ -170,7 +172,8 @@ class HorizontalBarGroup extends _chartComponent.default {
170
172
  theme,
171
173
  legendPosition: 'top-left',
172
174
  data,
173
- groupColumn: this.props.columnGroupbyColumn
175
+ groupColumn: this.props.columnGroupbyColumn,
176
+ chart
174
177
  });
175
178
  };
176
179
  this.handleAcitveAndInActiveState = (state, event) => {
@@ -67,7 +67,8 @@ class HorizontalBarStack extends _chartComponent.default {
67
67
  chart,
68
68
  globalTheme,
69
69
  chartColorTheme,
70
- tables
70
+ tables,
71
+ columnGroupbyColumn
71
72
  } = this.props;
72
73
  const theme = _constants.CHART_THEME_COLOR[globalTheme];
73
74
  const {
@@ -87,13 +88,14 @@ class HorizontalBarStack extends _chartComponent.default {
87
88
  } = this.chartBoundingClientRect;
88
89
  const groupByColumn = this.getColumn(tables, table_id, column_groupby_column_key);
89
90
  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;
90
- useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme);
91
- const series = d3.stack().keys(d3.union(data.map(d => d.group_name))).value((_ref, key) => {
91
+ useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme, 'group_name', columnGroupbyColumn, chart);
92
+ const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'group_name', columnGroupbyColumn, chart);
93
+ const series = d3.stack().keys(d3.union(sortedData.map(d => d.group_name))).value((_ref, key) => {
92
94
  var _group$get;
93
95
  let [_, group] = _ref;
94
96
  return ((_group$get = group.get(String(key))) === null || _group$get === void 0 ? void 0 : _group$get.value) || 0;
95
- })(d3.index(data, d => d.name, d => d.group_name));
96
- const newSeries = this.handleSeries(series, data);
97
+ })(d3.index(sortedData, d => d.name, d => d.group_name));
98
+ const newSeries = this.handleSeries(series, sortedData);
97
99
  const y = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([chartHeight - insertPadding, insertPadding]).paddingInner(0.5).paddingOuter(0.1);
98
100
 
99
101
  // Y axis
@@ -174,7 +176,9 @@ class HorizontalBarStack extends _chartComponent.default {
174
176
  legendName: 'group_name',
175
177
  theme,
176
178
  legendPosition: 'top-right',
177
- data
179
+ data,
180
+ groupColumn: this.props.columnGroupbyColumn,
181
+ chart
178
182
  });
179
183
  };
180
184
  this.handleAcitveAndInActiveState = (state, event) => {
@@ -152,7 +152,7 @@ class LineGroup extends _chartComponent.default {
152
152
  marginTop
153
153
  } = this.chartBoundingClientRect;
154
154
  const useSingleSelectColumnColor = (columnGroupbyColumn === null || columnGroupbyColumn === void 0 ? void 0 : columnGroupbyColumn.type) === _dtableUtils.CellType.SINGLE_SELECT && color_theme === _colorRules.SUPPORT_SINGLE_SELECT_THEMES_OPTIONS.SINGLE_SELECT_COLUMN_COLORS;
155
- useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme);
155
+ useSingleSelectColumnColor ? this.setSingleSelectColorMap(data) : this.setColorMap(data, chartColorTheme, 'group_name', columnGroupbyColumn, chart);
156
156
 
157
157
  // Y axis
158
158
  const niceEnd = d3.nice(0, d3.max(data, d => d.value), 5)[1];
@@ -256,7 +256,9 @@ class LineGroup extends _chartComponent.default {
256
256
  legendName: 'group_name',
257
257
  theme,
258
258
  legendPosition: 'top-right',
259
- data
259
+ data,
260
+ groupColumn: this.props.columnGroupbyColumn,
261
+ chart
260
262
  });
261
263
  };
262
264
  this.updateCircleAndTickStyle = _ref2 => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sea-chart",
3
- "version": "2.0.17",
3
+ "version": "2.0.18",
4
4
  "main": "./dist/index.js",
5
5
  "dependencies": {
6
6
  "@dnd-kit/core": "^6.1.0",