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.
- 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
|
@@ -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
|
-
|
|
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.
|
|
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')
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return "translate(".concat(fx(name)
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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(
|
|
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
|
-
})
|
|
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',
|
|
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
|
-
|
|
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[
|
|
189
|
-
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,
|
|
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(
|
|
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)(
|
|
130
|
+
content = (0, _dtableUtils.isNumber)(numericValue) ? numericValue : 0;
|
|
112
131
|
} else {
|
|
113
|
-
content = this.formatData(
|
|
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
|
-
},
|
|
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',
|