sea-chart 2.0.37 → 2.0.39

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.
Files changed (84) hide show
  1. package/dist/api/index.js +17 -59
  2. package/dist/assets/css/sea-chart-d3-tooltip.css +0 -1
  3. package/dist/components/color-popover/color-rules-popover.js +4 -2
  4. package/dist/components/drill-down-settings/drill-down-fields-popover/index.js +5 -4
  5. package/dist/components/icon/index.js +9 -13
  6. package/dist/components/number-input/index.js +7 -13
  7. package/dist/components/popover/hide-column-popover/hide-column-popover-widgets/hide-column-item.js +7 -3
  8. package/dist/components/popover/hide-column-popover/hide-column-popover.css +5 -1
  9. package/dist/components/popover/hide-column-popover/hide-column-popover.js +2 -4
  10. package/dist/components/popover/sort-popover/sort-popover.js +6 -7
  11. package/dist/components/statistic-record-dialog/index.js +9 -8
  12. package/dist/components/tooltip/index.js +26 -8
  13. package/dist/editor/index.js +5 -1
  14. package/dist/locale/lang/de.js +1 -0
  15. package/dist/locale/lang/en.js +1 -0
  16. package/dist/locale/lang/es.js +1 -0
  17. package/dist/locale/lang/fr.js +1 -0
  18. package/dist/locale/lang/pt.js +1 -0
  19. package/dist/locale/lang/ru.js +1 -0
  20. package/dist/locale/lang/zh_CN.js +1 -0
  21. package/dist/model/funnel.js +2 -2
  22. package/dist/model/map-bubble.js +4 -0
  23. package/dist/services/map-json.js +3 -0
  24. package/dist/settings/advance-bar-settings/data-settings.js +1 -1
  25. package/dist/settings/advance-bar-settings/style-settings.js +4 -3
  26. package/dist/settings/bar-settings/data-settings.js +1 -1
  27. package/dist/settings/bar-settings/style-settings.js +2 -2
  28. package/dist/settings/basic-number-card/data-settings.js +3 -2
  29. package/dist/settings/combination-settings/data-settings.js +0 -1
  30. package/dist/settings/combination-settings/style-settings.js +2 -2
  31. package/dist/settings/dashboard-settings/data-settings.js +3 -2
  32. package/dist/settings/funnel-settings/components/funnel-layer-setting.js +7 -7
  33. package/dist/settings/index.js +8 -3
  34. package/dist/settings/table-element-settings/components/data-filter.js +24 -25
  35. package/dist/settings/table-element-settings/index.css +1 -31
  36. package/dist/settings/table-settings/data-settings.js +3 -2
  37. package/dist/settings/time-comparison-settings/style-settings.js +2 -2
  38. package/dist/settings/widgets/basic-summary/index.js +8 -7
  39. package/dist/settings/widgets/common-data-settings.js +7 -6
  40. package/dist/settings/widgets/data-filter/index.js +30 -22
  41. package/dist/settings/widgets/group-by.js +4 -3
  42. package/dist/settings/widgets/summary-settings.js +3 -2
  43. package/dist/settings/widgets/y-axis-group-settings.js +3 -2
  44. package/dist/utils/cell-format-utils.js +9 -7
  45. package/dist/utils/chart-utils/base-utils.js +194 -86
  46. package/dist/utils/chart-utils/index.js +5 -3
  47. package/dist/utils/chart-utils/original-data-utils/basic-chart-calculator.js +5 -5
  48. package/dist/utils/chart-utils/original-data-utils/card-calculator.js +8 -2
  49. package/dist/utils/chart-utils/original-data-utils/dashboard-calculator.js +12 -3
  50. package/dist/utils/chart-utils/original-data-utils/pivot-table-calculator.js +4 -1
  51. package/dist/utils/chart-utils/original-data-utils/scatter-calculator.js +1 -0
  52. package/dist/utils/chart-utils/original-data-utils/trend-calculator.js +24 -3
  53. package/dist/utils/chart-utils/sql-statistics-utils.js +182 -177
  54. package/dist/utils/column-utils.js +20 -7
  55. package/dist/utils/contexts.js +5 -2
  56. package/dist/utils/index.js +25 -4
  57. package/dist/utils/row-record-utils.js +100 -20
  58. package/dist/utils/sql/column-2-sql-column.js +10 -10
  59. package/dist/utils/trend-utils.js +15 -2
  60. package/dist/view/index.css +2 -8
  61. package/dist/view/index.js +14 -9
  62. package/dist/view/wrapper/area-group.js +15 -7
  63. package/dist/view/wrapper/bar-compare.js +18 -2
  64. package/dist/view/wrapper/bar-custom-stack.js +35 -9
  65. package/dist/view/wrapper/bar-group.js +55 -26
  66. package/dist/view/wrapper/bar-stack.js +2 -2
  67. package/dist/view/wrapper/basic-number-card.js +27 -3
  68. package/dist/view/wrapper/chart-component.js +43 -440
  69. package/dist/view/wrapper/completeness-group.js +104 -49
  70. package/dist/view/wrapper/dashboard.js +68 -18
  71. package/dist/view/wrapper/horizontal-bar-group.js +26 -6
  72. package/dist/view/wrapper/horizontal-bar-stack.js +2 -2
  73. package/dist/view/wrapper/line-group.js +8 -3
  74. package/dist/view/wrapper/map-world-bubble.js +1 -0
  75. package/dist/view/wrapper/map-world.js +1 -0
  76. package/dist/view/wrapper/pie.js +1 -1
  77. package/dist/view/wrapper/ring.js +1 -1
  78. package/dist/view/wrapper/scatter.js +8 -6
  79. package/dist/view/wrapper/table/two-dimension-table.js +3 -2
  80. package/dist/view/wrapper/table-element/components/records-header/index.js +0 -1
  81. package/dist/view/wrapper/table-element/components/resize-column-handle/resize-column-handle.js +3 -1
  82. package/dist/view/wrapper/table-element/index.js +16 -21
  83. package/dist/view/wrapper/trend.js +24 -1
  84. package/package.json +15 -12
@@ -12,6 +12,7 @@ var _dtableUtils = require("dtable-utils");
12
12
  var _lodashEs = require("lodash-es");
13
13
  var d3 = _interopRequireWildcard(require("d3"));
14
14
  var _classnames = _interopRequireDefault(require("classnames"));
15
+ var _dayjs = _interopRequireDefault(require("dayjs"));
15
16
  var _intl = _interopRequireDefault(require("../../intl"));
16
17
  var _constants = require("../../constants");
17
18
  var _utils = require("../../utils");
@@ -46,12 +47,16 @@ class BarGroup extends _chartComponent.default {
46
47
  };
47
48
  this.drawChart = () => {
48
49
  const {
49
- customRender
50
+ customRender,
51
+ chart
50
52
  } = this.props;
51
53
  let {
52
54
  result: data
53
55
  } = this.props;
54
- data = _utils.BaseUtils.formatEmptyName(data, '', _intl.default.get('Empty'));
56
+ const {
57
+ column_groupby_column_key
58
+ } = chart.config || {};
59
+ data = _utils.BaseUtils.formatEmptyName(data, column_groupby_column_key, _intl.default.get(_constants.EMPTY_NAME));
55
60
  if (!Array.isArray(data)) return;
56
61
  this.draw(data);
57
62
  this.renderAxisLabel(this.props.chart, this.props.tables, this.container);
@@ -97,9 +102,8 @@ class BarGroup extends _chartComponent.default {
97
102
 
98
103
  // Y axis
99
104
  this.chart.append('g').attr('class', 'y-axis-wrapper').attr('transform', "translate(".concat(insertPadding, ",0)")).call(d3.axisLeft(y).tickSizeInner(0).ticks(5).tickFormat(d => _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, d, y_axis_summary_method))).call(g => this.drawYaxis(g, theme));
100
- const fx = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.5).paddingOuter(0.1);
105
+ const fx = d3.scaleBand().domain(new Set(data.map(d => d.name))).range([insertPadding + this.horizontalOverflowOffset, chartWidth - insertPadding]).paddingInner(0.25).paddingOuter(0.1);
101
106
  const sortedData = _utils.BaseUtils.sortDataByGroupName((0, _lodashEs.cloneDeep)(data), 'group_name', columnGroupbyColumn, chart);
102
- const x = d3.scaleBand().domain(new Set(sortedData.map(d => d.group_name))).range([0, fx.bandwidth()]).paddingInner(0).paddingOuter(0);
103
107
 
104
108
  // X axis
105
109
  this.chart.append('g').attr('class', 'x-axis-wrapper').attr('transform', "translate(0,".concat(chartHeight - insertPadding, ")")).call(d3.axisBottom(fx).tickSizeOuter(0).tickSizeInner(5)).call(g => {
@@ -111,31 +115,51 @@ class BarGroup extends _chartComponent.default {
111
115
  });
112
116
 
113
117
  // Rect group
114
- this.chart.append('g').attr('class', 'content-wrapper').selectAll().data(d3.group(sortedData, d => d.name)).join('g').attr('transform', _ref => {
115
- let [name, dum] = _ref;
116
- // Each group is horizontally centered
117
- const offset = (fx.bandwidth() - dum.length * x.bandwidth()) / 2;
118
- return "translate(".concat(fx(name) + offset, ",0)");
119
- })
120
- // rect item
121
- .selectAll().data(_ref2 => {
122
- let [_, d] = _ref2;
123
- return d;
124
- }).join('rect').attr('opacity', 1).attr('x', (d, index) => index * x.bandwidth()).attr('y', d => y(d.value)).attr('width', x.bandwidth()).attr('height', d => y(0) - y(d.value)).attr('fill', d => this.colorMap[d.group_name] || _constants.CHART_STYLE_COLORS[0]).attr('data-value', d => d.value).attr('data-groupName', d => d.name).attr('data-slugid', d => d.slugId).call(g => {
125
- g.nodes().forEach(rect => {
118
+ const contentWrapper = this.chart.append('g').attr('class', 'content-wrapper');
119
+ const groupedData = d3.group(sortedData, d => d.name);
120
+ const group = contentWrapper.selectAll().data(groupedData).join('g').attr('transform', _ref => {
121
+ let [name] = _ref;
122
+ return "translate(".concat(fx(name), ",0)");
123
+ });
124
+ group.each((_ref2, groupIndex, groupNodes) => {
125
+ let [, dum] = _ref2;
126
+ const groupNode = groupNodes[groupIndex];
127
+ const localX = d3.scaleBand().domain(dum.map(d => d.group_name)).range([0, fx.bandwidth()]).paddingInner(0).paddingOuter(0);
128
+ const rectSelection = d3.select(groupNode).selectAll('rect').data(dum).join('rect').attr('opacity', 1).attr('x', d => localX(d.group_name)).attr('y', d => y(d.value)).attr('width', localX.bandwidth()).attr('height', d => y(0) - y(d.value)).attr('fill', d => this.colorMap[d.group_name] || _constants.CHART_STYLE_COLORS[0]).attr('data-value', d => d.value).attr('data-groupName', d => d.name).attr('data-slugid', d => d.slugId);
129
+ const {
130
+ borderRadius
131
+ } = this.chartBoundingClientRect;
132
+ const rectNodes = rectSelection.nodes();
133
+ const validRectNodes = rectNodes.filter(rect => {
134
+ const rectWidth = Number(rect.getAttribute('width'));
135
+ const rectHeight = Number(rect.getAttribute('height'));
136
+ return rectWidth > 0 && rectHeight > 0;
137
+ });
138
+ let groupBorderRadius;
139
+ if (validRectNodes.length > 0) {
140
+ groupBorderRadius = Infinity;
141
+ validRectNodes.forEach(rect => {
142
+ const rectWidth = Number(rect.getAttribute('width'));
143
+ const rectHeight = Number(rect.getAttribute('height'));
144
+ const computedBorderRadius = Math.min(rectWidth * borderRadius, rectHeight / 2, rectWidth / 2);
145
+ groupBorderRadius = Math.min(groupBorderRadius, computedBorderRadius);
146
+ });
147
+ if (!Number.isFinite(groupBorderRadius)) {
148
+ groupBorderRadius = 0;
149
+ }
150
+ }
151
+ rectNodes.forEach(rect => {
126
152
  const parentNode = rect.parentNode;
127
- // add rect borderRadius
128
153
  this.addClipPath({
129
154
  rect,
130
155
  parentNode,
131
- rectId: rect.getAttribute('data-slugid')
156
+ rectId: rect.getAttribute('data-slugid'),
157
+ borderRadiusVal: Number.isFinite(groupBorderRadius) ? groupBorderRadius : undefined
132
158
  });
133
-
134
- // Add label
135
159
  if (y_axis_show_value) {
136
160
  this.addLabelToRectTop({
137
161
  container: parentNode,
138
- xWidth: Number(x.bandwidth()),
162
+ xWidth: Number(localX.bandwidth()),
139
163
  x: Number(rect.getAttribute('x')),
140
164
  y: Number(rect.getAttribute('y')),
141
165
  theme,
@@ -144,14 +168,15 @@ class BarGroup extends _chartComponent.default {
144
168
  });
145
169
  }
146
170
  });
147
- }).on('click', (event, data) => {
171
+ });
172
+ contentWrapper.selectAll('rect').on('click', (event, data) => {
148
173
  this.props.toggleRecords(data);
149
174
  }).on('mouseover', event => {
150
175
  this.showTooltip(event);
151
176
  this.handleAcitveAndInActiveState('inActive', event);
152
177
  }).on('mousemove', event => {
153
178
  this.moveTooltip(event);
154
- }).on('mouseleave', (event, data) => {
179
+ }).on('mouseleave', event => {
155
180
  this.hiddenTooltip();
156
181
  this.handleAcitveAndInActiveState('active', event);
157
182
  });
@@ -168,6 +193,7 @@ class BarGroup extends _chartComponent.default {
168
193
  });
169
194
  };
170
195
  this.showTooltip = event => {
196
+ var _this$props$columnGro;
171
197
  const {
172
198
  summaryColumn,
173
199
  chart
@@ -175,18 +201,21 @@ class BarGroup extends _chartComponent.default {
175
201
  const {
176
202
  y_axis_summary_method
177
203
  } = chart.config;
204
+ const isGroupByDate = [_dtableUtils.CellType.DATE, _dtableUtils.CellType.CTIME, _dtableUtils.CellType.MTIME].includes((_this$props$columnGro = this.props.columnGroupbyColumn) === null || _this$props$columnGro === void 0 ? void 0 : _this$props$columnGro.type);
178
205
  const {
179
206
  offsetX,
180
207
  offsetY
181
208
  } = event;
182
209
  const curGroup = event.target.parentNode;
183
- const [curGroupName, data] = curGroup.__data__;
210
+ let [curGroupName, data] = curGroup.__data__;
184
211
  const newTooltipData = {
185
212
  title: !curGroupName && typeof curGroupName !== 'number' ? _intl.default.get(_constants.EMPTY_NAME) : curGroupName,
186
213
  items: data.map(item => {
214
+ const rawGroupName = item.group_name;
215
+ const groupName = rawGroupName === null || rawGroupName === undefined || rawGroupName === '' ? _intl.default.get(_constants.EMPTY_NAME) : isGroupByDate ? (0, _dayjs.default)(rawGroupName).format('YYYY-MM-DD') : rawGroupName;
187
216
  return {
188
- color: this.colorMap[item.group_name],
189
- name: item.group_name,
217
+ color: this.colorMap[groupName],
218
+ name: groupName,
190
219
  value: _utils.BaseUtils.getSummaryValueDisplayString(summaryColumn, Number(item.value), y_axis_summary_method)
191
220
  };
192
221
  })
@@ -56,7 +56,7 @@ class BarStack extends _chartComponent.default {
56
56
  let {
57
57
  result: data
58
58
  } = this.props;
59
- data = _utils.BaseUtils.formatEmptyName(data, '', _intl.default.get('Empty'));
59
+ data = _utils.BaseUtils.formatEmptyName(data, chart.config.column_groupby_column_key, _intl.default.get('Empty'));
60
60
  if (!Array.isArray(data)) return;
61
61
  sort_type && (data = (0, _columnUtils.sortDataByGroupSum)(data, sort_type));
62
62
  this.draw(data);
@@ -103,7 +103,7 @@ class BarStack extends _chartComponent.default {
103
103
  const series = d3.stack().keys(d3.union(sortedData.map(d => d.group_name))).value((_ref, key) => {
104
104
  var _group$get;
105
105
  let [_, group] = _ref;
106
- return (_group$get = group.get(String(key))) === null || _group$get === void 0 ? void 0 : _group$get.value;
106
+ return ((_group$get = group.get(key)) === null || _group$get === void 0 ? void 0 : _group$get.value) || 0;
107
107
  })(d3.index(sortedData, d => d.name, d => d.group_name));
108
108
  const niceEnd = d3.nice(0, d3.max(series, d => d3.max(d, d => d[1])), 5)[1];
109
109
  const y = d3.scaleLinear().domain(y_axis_auto_range ? [0, niceEnd] : [y_axis_min, y_axis_max]).range([chartHeight - insertPadding, insertPadding + marginTop]);
@@ -32,6 +32,24 @@ class BasicNumericCard extends _react.Component {
32
32
  });
33
33
  }
34
34
  };
35
+ this.handleClickNumber = () => {
36
+ const {
37
+ toggleRecords,
38
+ result
39
+ } = this.props;
40
+ if (!toggleRecords) return;
41
+ if (typeof result === 'object' && result !== null && result.rows) {
42
+ // isCalculateByView = true: use rows of base
43
+ toggleRecords({
44
+ rows: result.rows
45
+ });
46
+ } else {
47
+ // isCalculateByView = false: use rows of sql query
48
+ toggleRecords({
49
+ isQueryBySql: true
50
+ });
51
+ }
52
+ };
35
53
  this.formatData = data => {
36
54
  if (!data && data !== 0) return _intl.default.get(_constants.EMPTY_NAME);
37
55
  const {
@@ -106,11 +124,12 @@ class BasicNumericCard extends _react.Component {
106
124
  label_text_align,
107
125
  label_font_weight
108
126
  } = config;
127
+ const numericValue = typeof result === 'object' && result !== null ? result.value : result;
109
128
  let content = null;
110
129
  if (summary_method === 'Distinct_values') {
111
- content = (0, _dtableUtils.isNumber)(result) ? result : 0;
130
+ content = (0, _dtableUtils.isNumber)(numericValue) ? numericValue : 0;
112
131
  } else {
113
- content = this.formatData(result);
132
+ content = this.formatData(numericValue);
114
133
  }
115
134
  return /*#__PURE__*/_react.default.createElement("div", {
116
135
  className: "sea-chart-container plugin-number-card"
@@ -133,7 +152,12 @@ class BasicNumericCard extends _react.Component {
133
152
  fontWeight: "".concat(font_weight),
134
153
  color: "".concat(font_color)
135
154
  }
136
- }, content), /*#__PURE__*/_react.default.createElement("p", {
155
+ }, /*#__PURE__*/_react.default.createElement("span", {
156
+ onClick: this.handleClickNumber,
157
+ style: {
158
+ cursor: 'pointer'
159
+ }
160
+ }, content)), /*#__PURE__*/_react.default.createElement("p", {
137
161
  ref: ref => this.labelRef = ref,
138
162
  style: {
139
163
  position: 'absolute',