dtable-statistic 4.0.11 → 4.0.13

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.
@@ -56,9 +56,8 @@ function calculateOneDimensionTable(chart, value, username, userId) {
56
56
  });
57
57
  }
58
58
  } else {
59
- pivotRowIndex = pivot_rows.findIndex(function (r) {
60
- var resName = r.name;
61
- return resName === null && name === null || resName === undefined && name === undefined || resName === 0 && name === 0 || resName === name;
59
+ pivotRowIndex = pivot_rows.findIndex(function (pivotRow) {
60
+ return isSameName(pivotRow.name, name);
62
61
  });
63
62
  updateOneDimensionRows(pivot_rows, pivotRowIndex, name, row);
64
63
  }
@@ -99,7 +98,8 @@ function calculateOneDimensionTable(chart, value, username, userId) {
99
98
  return {
100
99
  pivot_columns_total: pivot_columns_total,
101
100
  pivot_rows: pivot_rows,
102
- pivot_columns: pivot_columns
101
+ pivot_columns: pivot_columns,
102
+ formulaRows: formulaRows
103
103
  };
104
104
  }
105
105
  function updateOneDimensionRows(pivot_rows, index, name, row) {
@@ -286,9 +286,8 @@ function calculateTwoDimensionTable(chart, value, username, userId) {
286
286
  });
287
287
  }
288
288
  } else {
289
- pivotRowIndex = pivot_rows.findIndex(function (r) {
290
- var resName = r.name;
291
- return resName === null && name === null || resName === undefined && name === undefined || resName === 0 && name === 0 || resName === name;
289
+ pivotRowIndex = pivot_rows.findIndex(function (pivotRow) {
290
+ return isSameName(pivotRow.name, name);
292
291
  });
293
292
  updateTwoDimensionRows(pivot_rows, pivot_columns, pivotRowIndex, name, row, isRowGroupbyColumnDataAsAnArray, cellValueForColumn);
294
293
  }
@@ -403,6 +402,15 @@ function updateTwoDimensionRows(pivot_rows, pivot_columns, index, name, row, isC
403
402
  });
404
403
  }
405
404
  }
405
+ function isSameName(prevName, currName) {
406
+ if (isNumber(prevName) && isNumber(currName)) {
407
+ return prevName === currName;
408
+ }
409
+ if (!prevName && !currName) {
410
+ return prevName === null && currName === null || prevName === undefined && currName === undefined || isNaN(prevName) && isNaN(currName);
411
+ }
412
+ return prevName === currName;
413
+ }
406
414
  function isSameGroup(isColumnDataAsAnArray, source, target) {
407
415
  if (isColumnDataAsAnArray) {
408
416
  return (!source || source.length === 0) && !target || source && source.includes(target);
@@ -87,8 +87,6 @@ var PieChart = /*#__PURE__*/function (_BaseChart) {
87
87
  var name = obj.name;
88
88
  if (!obj.name && typeof obj.name !== 'number') {
89
89
  name = intl.get(EMPTY_NAME);
90
- } else if (obj.name === 'Others') {
91
- name = intl.get('Others');
92
90
  }
93
91
  return {
94
92
  name: name,
@@ -77,10 +77,10 @@ var PivotTable = /*#__PURE__*/function (_BaseChart) {
77
77
  var summaryMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : SUMMARY_TYPE.COUNT;
78
78
  if (!summaryColumn || !summaryColumn.type) return summaryValue;
79
79
  if (!summaryValue && summaryValue !== 0) return summaryValue;
80
- if (summaryMethod.toUpperCase() === 'DISTINCT_VALUES') return summaryValue;
80
+ if (summaryMethod && summaryMethod.toUpperCase() === 'DISTINCT_VALUES') return summaryValue;
81
81
  var data = summaryColumn.data;
82
82
  if (TIME_COLUMN_LIST.includes(summaryColumn.type)) {
83
- if (typeof summaryValue !== 'string') return summaryValue;
83
+ if (typeof summaryValue !== 'string') return '';
84
84
  // The date returned by db carries T and Z, so that there is a time difference in data formatting
85
85
  var _ref = data || {},
86
86
  format = _ref.format;
@@ -6,10 +6,11 @@ import _inherits from "@babel/runtime/helpers/esm/inherits";
6
6
  import _createSuper from "@babel/runtime/helpers/esm/createSuper";
7
7
  import React, { PureComponent } from 'react';
8
8
  import intl from 'react-intl-universal';
9
- import { FORMULA_COLUMN_TYPES_MAP, isNumber, TableUtils, Views } from 'dtable-store';
9
+ import { isNumber, TableUtils, Views } from 'dtable-store';
10
10
  import PivotTableDisplayName from './pivot-table-display-name';
11
11
  import { isMobile } from '../../utils';
12
- import { STATISTICS_COUNT_TYPE, SUMMARY_METHOD_MAP, TITLE_TOTAL } from '../../constants';
12
+ import { getPivotTableSummaryTotal } from '../../utils/pivot-table';
13
+ import { STATISTICS_COUNT_TYPE, TITLE_TOTAL } from '../../constants';
13
14
  import styles from './statistic-pivot-table.module.css';
14
15
  var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
15
16
  _inherits(TwoDimensionTable, _PureComponent);
@@ -59,95 +60,6 @@ var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
59
60
  }
60
61
  return 0;
61
62
  };
62
- _this.getCellValueFromRow = function (row, formulaRow, columnType, columnKey, sqlKey, isSqlQuery) {
63
- if (!isSqlQuery) {
64
- if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
65
- var cellValue = formulaRow[columnKey];
66
- return Array.isArray(cellValue) ? cellValue[0] : cellValue;
67
- }
68
- return row[columnKey];
69
- }
70
- return row[sqlKey];
71
- };
72
- _this.getSummaryTotal = function (summaryColumnType, summaryColumnKey, sqlKey, summaryType, summaryMethod, rows, formulaRows, isSqlQuery) {
73
- if (summaryType === STATISTICS_COUNT_TYPE.COUNT) {
74
- return rows.length;
75
- }
76
- if (summaryType !== STATISTICS_COUNT_TYPE.ADVANCED) {
77
- return 0;
78
- }
79
- switch (summaryMethod) {
80
- case SUMMARY_METHOD_MAP.Distinct_values:
81
- {
82
- var count = 0;
83
- var existMap = {};
84
- rows.forEach(function (row) {
85
- var formulaRow = formulaRows && formulaRows[row._id];
86
- var cellValue = _this.getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
87
- if (!cellValue) {
88
- if (cellValue === 0) {
89
- cellValue = '0';
90
- } else {
91
- cellValue = !!cellValue;
92
- }
93
- }
94
- if (!existMap[cellValue]) {
95
- existMap[cellValue] = true;
96
- count++;
97
- }
98
- });
99
- return count;
100
- }
101
- case SUMMARY_METHOD_MAP.Sum:
102
- case SUMMARY_METHOD_MAP.Mean:
103
- {
104
- var sum = 0;
105
- var validNumbersCount = 0;
106
- rows.forEach(function (row) {
107
- var formulaRow = formulaRows && formulaRows[row._id];
108
- var cellValue = _this.getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
109
- if (isNumber(cellValue)) {
110
- validNumbersCount++;
111
- sum += cellValue;
112
- }
113
- });
114
- if (summaryMethod === SUMMARY_METHOD_MAP.Sum) {
115
- sum = Number.parseFloat(sum.toFixed(8));
116
- } else if (summaryMethod === SUMMARY_METHOD_MAP.Mean) {
117
- sum = validNumbersCount === 0 ? 0 : Number.parseFloat((sum / validNumbersCount).toFixed(8));
118
- }
119
- return sum;
120
- }
121
- case SUMMARY_METHOD_MAP.Max:
122
- case SUMMARY_METHOD_MAP.Min:
123
- {
124
- if (rows.length === 0) {
125
- return 0;
126
- }
127
- var result = rows.reduce(function (current, next) {
128
- var currentFormulaRow = formulaRows && formulaRows[current._id];
129
- var nextFormulaRow = formulaRows && formulaRows[next._id];
130
- var currentValue = _this.getCellValueFromRow(current, currentFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
131
- var nextValue = _this.getCellValueFromRow(next, nextFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
132
- if (!nextValue && nextValue !== 0) {
133
- return current;
134
- }
135
- var isNextGreater = currentValue < nextValue;
136
- if (summaryMethod === SUMMARY_METHOD_MAP.Min) {
137
- return isNextGreater ? current : next;
138
- } else {
139
- return isNextGreater ? next : current;
140
- }
141
- });
142
- var formulaRow = formulaRows && formulaRows[result._id];
143
- return _this.getCellValueFromRow(result, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
144
- }
145
- default:
146
- {
147
- return 0;
148
- }
149
- }
150
- };
151
63
  _this.getCells = function (row, summaryColumn) {
152
64
  var _this$props2 = _this.props,
153
65
  pivotResult = _this$props2.pivotResult,
@@ -172,7 +84,7 @@ var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
172
84
  sqlKey = column.sqlKey,
173
85
  method = column.method;
174
86
  if (Array.isArray(rowData)) {
175
- var sum = _this.getSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, rowData, formulaRows, isSqlQuery);
87
+ var sum = getPivotTableSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, rowData, formulaRows, isSqlQuery);
176
88
  summary_multiple_columns.push(sum);
177
89
  formatted_summary_multiple_columns.push(getSummaryValueDisplayString(column, sum, method));
178
90
  return;
@@ -386,7 +298,7 @@ var TwoDimensionTable = /*#__PURE__*/function (_PureComponent) {
386
298
  key = summaryCol.key,
387
299
  sqlKey = summaryCol.sqlKey,
388
300
  method = summaryCol.method;
389
- total += _this.getSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, pivotColumnCell, formulaRows, isSqlQuery);
301
+ total += getPivotTableSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, pivotColumnCell, formulaRows, isSqlQuery);
390
302
  });
391
303
  totalDisplayValue = total;
392
304
  allTotalDisplay += total;
@@ -161,8 +161,6 @@ var RingChart = /*#__PURE__*/function (_BaseChart) {
161
161
  var title = name;
162
162
  if (!name || name === 'undefined') {
163
163
  title = intl.get(EMPTY_NAME);
164
- } else if (name === 'Others') {
165
- title = intl.get('Others');
166
164
  }
167
165
  return show_percent || display_label ? {
168
166
  name: title,
@@ -1,4 +1,6 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
1
2
  import { CellType, COLLABORATOR_COLUMN_TYPES, FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE, generatorBase64Code, isNumber, TableUtils } from 'dtable-store';
3
+ import intl from 'react-intl-universal';
2
4
  import { STAT_TYPE, DEFAULT_LABEL_FONT_SIZE, MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP, CHART_STYLE_COLORS, PIE_COLOR_OPTIONS, SUMMARY_METHOD_MAP } from '../constants';
3
5
  import StatUtils from './stat-utils';
4
6
  export var generatorUniqueId = function generatorUniqueId(list) {
@@ -8,7 +10,10 @@ export var generatorUniqueId = function generatorUniqueId(list) {
8
10
  uniqueId = generatorBase64Code();
9
11
 
10
12
  // eslint-disable-next-line
11
- isUnique = Array.isArray(list) && list.length > 0 ? true : list.every(function (item) {
13
+ if (!Array.isArray(list) || list.length === 0) {
14
+ break;
15
+ }
16
+ isUnique = list.every(function (item) {
12
17
  return item._id !== uniqueId;
13
18
  });
14
19
  if (isUnique) {
@@ -251,10 +256,28 @@ export function formatPieChartData(data, statItem, table, currentTheme) {
251
256
  var filteredSum = filteredItems.reduce(function (total, currentValue) {
252
257
  return total += currentValue.value;
253
258
  }, 0);
259
+ var original_name_list = [];
260
+ var name_list = [];
261
+ var rows = [];
262
+ filteredItems.forEach(function (item) {
263
+ if (item.original_name) {
264
+ original_name_list.push(item.original_name);
265
+ }
266
+ if (item.name) {
267
+ name_list.push(item.name);
268
+ }
269
+ if (item.rows) {
270
+ rows.push.apply(rows, _toConsumableArray(item.rows));
271
+ }
272
+ });
254
273
  data.push({
255
- name: 'Others',
274
+ rows: rows,
275
+ name_list: name_list,
276
+ original_name_list: original_name_list,
277
+ name: intl.get('Others'),
256
278
  value: filteredSum,
257
279
  color: '#dbdbdb',
280
+ original_name: 'Others',
258
281
  percent: String(Number.parseFloat(filteredSum / sum * 100).toFixed(1)) + '%'
259
282
  });
260
283
  colorSet.push('#dbdbdb');
@@ -5,12 +5,18 @@ import { getOption, getCollaborator, getNumberDisplayString, isNumber, CellType,
5
5
  import { isCellValueChanged } from './cell-value';
6
6
  import { getSelectColumnOptions, getDateColumnFormat } from './column';
7
7
  import { getKnownCreatorByEmail } from './collaborator';
8
- import { EMPTY_NAME } from '../constants';
8
+ import { EMPTY_NAME, STATISTICS_COUNT_TYPE } from '../constants';
9
+ import { getPivotTableSummaryTotal } from './pivot-table';
10
+ var isEmptyName = function isEmptyName(title) {
11
+ return title === null || title === '';
12
+ };
9
13
  var isSummaryDateColumn = function isSummaryDateColumn(summaryColumn) {
10
14
  if (!summaryColumn) return false;
11
15
  var type = summaryColumn.type;
12
16
  return type !== CellType.LINK && isDateColumn(summaryColumn);
13
17
  };
18
+
19
+ // eslint-disable-next-line
14
20
  var getTableValueDisplayName = function getTableValueDisplayName(value, column) {
15
21
  var _ref = column || {},
16
22
  type = _ref.type,
@@ -91,264 +97,8 @@ var getValidValueForColumn = function getValidValueForColumn(column, value) {
91
97
  if (type === CellType.TEXT) return value ? value : '';
92
98
  return '';
93
99
  };
94
- var getUpdatedOneDimensionStatisticTableResultToTable = function getUpdatedOneDimensionStatisticTableResultToTable(_ref3) {
95
- var updateTable = _ref3.updateTable,
96
- statisticalResult = _ref3.statisticalResult,
97
- t = _ref3.t;
98
- var pivotResult = statisticalResult.pivotResult,
99
- groupbyColumn = statisticalResult.groupbyColumn,
100
- statisticTableColumns = statisticalResult.statisticTableColumns;
101
- if (!groupbyColumn) return {};
102
- var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
103
- if (!nameColumn) return {};
104
- var pivot_rows = pivotResult.pivot_rows,
105
- pivot_columns = pivotResult.pivot_columns;
106
- var tableRows = updateTable.rows;
107
- var columnMap = {};
108
- var newRows = [];
109
- var updatedRows = {};
110
- var oldRows = {};
111
- var rowIds = [];
112
-
113
- // one dimension table no summary columns
114
- if (pivot_columns.length < 2) {
115
- columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
116
-
117
- // updated rows
118
- pivot_rows.forEach(function (item) {
119
- var name = item.name,
120
- total = item.total;
121
- var groupName = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
122
- var row = tableRows.find(function (row) {
123
- return row[nameColumn.key] === groupName;
124
- });
125
- var totalColumn = columnMap['total'];
126
- if (row) {
127
- // update old row
128
- var updateRow = {};
129
- var oldRow = {};
130
- var validTotalCellValue = getValidValueForColumn(totalColumn, total.total);
131
- if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
132
- updateRow[totalColumn.key] = validTotalCellValue;
133
- oldRow[totalColumn.key] = row[totalColumn.key];
134
- }
135
- if (Object.keys(updateRow).length > 0) {
136
- var rowId = row._id;
137
- rowIds.push(rowId);
138
- updatedRows[rowId] = updateRow;
139
- oldRows[rowId] = oldRow;
140
- }
141
- } else {
142
- // insert new row
143
- var newRow = {};
144
- newRow[nameColumn.key] = groupName;
145
- if (totalColumn) {
146
- newRow[totalColumn.key] = getValidValueForColumn(totalColumn, total.total);
147
- }
148
- newRows.push(newRow);
149
- }
150
- });
151
- return {
152
- newRows: newRows,
153
- updatedRows: updatedRows,
154
- rowIds: rowIds,
155
- oldRows: oldRows
156
- };
157
- }
158
-
159
- // one dimension table with summary columns
160
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
161
- var key = item.key;
162
- var column = statisticTableColumns.find(function (column) {
163
- return column.key === key;
164
- });
165
- if (column) {
166
- columnMap[key] = TableUtils.getTableColumnByName(updateTable, column.name);
167
- }
168
- });
169
-
170
- // updated rows
171
- var nameColumnKey = nameColumn.key;
172
- pivot_rows.forEach(function (item) {
173
- var name = item.name,
174
- total = item.total;
175
- var groupName = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
176
- var row = tableRows.find(function (row) {
177
- return row[nameColumnKey] === name;
178
- });
179
- if (row) {
180
- var updateRow = {};
181
- var oldRow = {};
182
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
183
- var key = item.key;
184
- var column = columnMap[key];
185
- var totalCellValue = getValidValueForColumn(column, total[key]);
186
- if (column && isCellValueChanged(row[column.key], totalCellValue, column.type)) {
187
- updateRow[column.key] = totalCellValue;
188
- oldRow[column.key] = row[column.key];
189
- }
190
- });
191
- if (Object.keys(updateRow).length > 0) {
192
- var rowId = row._id;
193
- rowIds.push(rowId);
194
- updatedRows[rowId] = updateRow;
195
- oldRows[rowId] = oldRow;
196
- }
197
- } else {
198
- var newRow = _defineProperty({}, nameColumn.key, groupName);
199
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
200
- var key = item.key;
201
- var column = columnMap[key];
202
- if (column) {
203
- var totalCellValue = getValidValueForColumn(column, total[key]);
204
- newRow[column.key] = totalCellValue;
205
- }
206
- });
207
- newRows.push(newRow);
208
- }
209
- });
210
- return {
211
- newRows: newRows,
212
- updatedRows: updatedRows,
213
- rowIds: rowIds,
214
- oldRows: oldRows
215
- };
216
- };
217
- var getUpdatedTwoDimensionStatisticTableResultToTable = function getUpdatedTwoDimensionStatisticTableResultToTable(_ref4) {
218
- var updateTable = _ref4.updateTable,
219
- statisticalResult = _ref4.statisticalResult,
220
- t = _ref4.t;
221
- var pivotResult = statisticalResult.pivotResult,
222
- groupbyColumn = statisticalResult.groupbyColumn,
223
- columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
224
- var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
225
- if (!nameColumn) return {};
226
- var pivot_rows = pivotResult.pivot_rows,
227
- pivot_columns = pivotResult.pivot_columns;
228
- var tableRows = updateTable.rows;
229
- var columnMap = {};
230
- var newRows = [];
231
- var updatedRows = {};
232
- var rowIds = [];
233
- var oldRows = {};
234
-
235
- // updated columns
236
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
237
- var key = item.key;
238
- var columnName = key === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(key, columnGroupbyColumn);
239
- columnMap[columnName] = TableUtils.getTableColumnByName(updateTable, columnName);
240
- });
241
- columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
242
-
243
- // updated rows
244
- var _loop = function _loop(i) {
245
- var pivotRow = pivot_rows[i];
246
- var name = pivotRow.name,
247
- cells = pivotRow.cells,
248
- total = pivotRow.total;
249
- name = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
250
- var nameColumnKey = nameColumn.key;
251
- var row = tableRows.find(function (row) {
252
- return row[nameColumnKey] === name;
253
- });
254
- var totalColumn = columnMap['total'];
255
- if (row) {
256
- // update old row
257
- var updatedRow = {};
258
- var oldRow = {}; // op used
259
- var validTotalCellValue = getValidValueForColumn(totalColumn, total);
260
- if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
261
- updatedRow[totalColumn.key] = validTotalCellValue;
262
- oldRow = row[totalColumn.key];
263
- }
264
- Object.keys(cells).forEach(function (key) {
265
- var columnName = key === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(key, columnGroupbyColumn);
266
- var column = columnMap[columnName];
267
- var validCellValue = getValidValueForColumn(column, cells[key].total);
268
- if (column && isCellValueChanged(row[column.key], validCellValue, column.type)) {
269
- updatedRow[column.key] = validCellValue;
270
- oldRow = row[column.key];
271
- }
272
- });
273
- if (Object.keys(updatedRow).length > 0) {
274
- var rowId = row._id;
275
- rowIds.push(rowId);
276
- updatedRows[rowId] = updatedRow;
277
- oldRows[rowId] = oldRow;
278
- }
279
- } else {
280
- // insert new row
281
- var newRow = {};
282
- newRow[nameColumnKey] = name;
283
- if (totalColumn) {
284
- newRow[totalColumn.key] = getValidValueForColumn(totalColumn, name);
285
- }
286
- Object.keys(cells).forEach(function (key) {
287
- var columnName = key === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(key, columnGroupbyColumn);
288
- var column = columnMap[columnName];
289
- if (column) {
290
- newRow[column.key] = getValidValueForColumn(column, cells[key].total);
291
- }
292
- });
293
- if (Object.keys(newRow).length > 0) {
294
- newRows.push(newRow);
295
- }
296
- }
297
- };
298
- for (var i = 0; i < pivot_rows.length; i++) {
299
- _loop(i);
300
- }
301
- return {
302
- newRows: newRows,
303
- updatedRows: updatedRows,
304
- oldRows: oldRows,
305
- rowIds: rowIds
306
- };
307
- };
308
-
309
- /**
310
- * @return {
311
- * columns: [
312
- * {
313
- * name: xxx,
314
- * type: CellType.DATE
315
- * data: { format }
316
- * }, {
317
- * name: xxx,
318
- * type: CellType.NUMBER
319
- * data: { decimal, thousands, precision, enable_precision, format }
320
- * },
321
- * ],
322
- * rows: [
323
- * { columnName: value, xxx },
324
- * ]
325
- * }
326
- */
327
- export var exportStatisticToTable = function exportStatisticToTable(_ref5) {
328
- var statisticalResult = _ref5.statisticalResult,
329
- t = _ref5.t;
330
- var pivotResult = statisticalResult.pivotResult,
331
- groupbyColumn = statisticalResult.groupbyColumn,
332
- columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
333
- var pivot_columns = pivotResult.pivot_columns;
334
- if (!groupbyColumn) return {};
335
-
336
- // two dimension table
337
- if (columnGroupbyColumn) {
338
- return getTwoDimensionStatisticTableResultToTable({
339
- statisticalResult: statisticalResult,
340
- t: t
341
- });
342
- }
343
- if (!Array.isArray(pivot_columns)) return {};
344
- return getOneDimensionStatisticTableResultToTable({
345
- statisticalResult: statisticalResult,
346
- t: t
347
- });
348
- };
349
- export var getOneDimensionStatisticTableResultToTable = function getOneDimensionStatisticTableResultToTable(_ref6) {
350
- var statisticalResult = _ref6.statisticalResult,
351
- t = _ref6.t;
100
+ var exportOneDimensionToTable = function exportOneDimensionToTable(_ref3) {
101
+ var statisticalResult = _ref3.statisticalResult;
352
102
  var pivotResult = statisticalResult.pivotResult,
353
103
  groupbyColumn = statisticalResult.groupbyColumn,
354
104
  statisticTableColumns = statisticalResult.statisticTableColumns,
@@ -376,8 +126,8 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
376
126
  var isIncludeHour = false;
377
127
  if (summaryColumn) {
378
128
  if (isSummaryDateColumn(summaryColumn)) {
379
- var _ref7 = summaryColumn.data || {},
380
- format = _ref7.format;
129
+ var _ref4 = summaryColumn.data || {},
130
+ format = _ref4.format;
381
131
  columnData = {
382
132
  format: format
383
133
  };
@@ -389,12 +139,12 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
389
139
  such as the data attribute in the function column, which contains other content that is not
390
140
  useful for creating a new column
391
141
  */
392
- var _ref8 = summaryColumn.data || {},
393
- decimal = _ref8.decimal,
394
- thousands = _ref8.thousands,
395
- precision = _ref8.precision,
396
- enable_precision = _ref8.enable_precision,
397
- _format = _ref8.format;
142
+ var _ref5 = summaryColumn.data || {},
143
+ decimal = _ref5.decimal,
144
+ thousands = _ref5.thousands,
145
+ precision = _ref5.precision,
146
+ enable_precision = _ref5.enable_precision,
147
+ _format = _ref5.format;
398
148
  columnData = {
399
149
  decimal: decimal,
400
150
  thousands: thousands,
@@ -415,15 +165,16 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
415
165
 
416
166
  // generator rows
417
167
  pivot_rows.forEach(function (item) {
418
- var _newRow2;
168
+ var _newRow;
419
169
  var name = item.name,
170
+ original_name = item.original_name,
420
171
  total = item.total;
421
- var groupName = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
172
+ var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
422
173
  var cellValue = total.total;
423
174
  if (_isDateSummaryColumn && cellValue) {
424
175
  cellValue = isIncludeHour ? dayjs(cellValue).format('YYYY-MM-DD HH:mm') : dayjs(cellValue).format('YYYY-MM-DD');
425
176
  }
426
- var newRow = (_newRow2 = {}, _defineProperty(_newRow2, groupbyColumn.name, groupName), _defineProperty(_newRow2, intl.get('Total'), cellValue), _newRow2);
177
+ var newRow = (_newRow = {}, _defineProperty(_newRow, groupbyColumn.name, groupName), _defineProperty(_newRow, intl.get('Total'), cellValue), _newRow);
427
178
  rows.push(newRow);
428
179
  });
429
180
  return {
@@ -444,8 +195,8 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
444
195
  var columnType = CellType.NUMBER;
445
196
  if (isSummaryDateColumn(column)) {
446
197
  columnType = CellType.DATE;
447
- var _ref9 = column.data || {},
448
- _format2 = _ref9.format;
198
+ var _ref6 = column.data || {},
199
+ _format2 = _ref6.format;
449
200
  _columnData = {
450
201
  format: _format2
451
202
  };
@@ -455,12 +206,12 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
455
206
  such as the data attribute in the function column, which contains other content that is not
456
207
  useful for creating a new column
457
208
  */
458
- var _ref10 = column.data || {},
459
- _decimal = _ref10.decimal,
460
- _thousands = _ref10.thousands,
461
- _precision = _ref10.precision,
462
- _enable_precision = _ref10.enable_precision,
463
- _format3 = _ref10.format;
209
+ var _ref7 = column.data || {},
210
+ _decimal = _ref7.decimal,
211
+ _thousands = _ref7.thousands,
212
+ _precision = _ref7.precision,
213
+ _enable_precision = _ref7.enable_precision,
214
+ _format3 = _ref7.format;
464
215
  _columnData = {
465
216
  decimal: _decimal,
466
217
  thousands: _thousands,
@@ -482,16 +233,19 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
482
233
  // generator rows
483
234
  pivot_rows.forEach(function (item) {
484
235
  var name = item.name,
236
+ original_name = item.original_name,
485
237
  total = item.total;
486
- var groupName = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
238
+ var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
487
239
  var newRow = _defineProperty({}, groupbyColumn.name, groupName);
488
240
  Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
489
- var key = item.key;
241
+ var key = item.key,
242
+ method = item.method;
490
243
  var column = columnMap[key];
244
+ var cellValueKey = key + method;
491
245
  var name = column.name,
492
246
  type = column.type,
493
247
  data = column.data;
494
- var cellValue = total[key];
248
+ var cellValue = total[cellValueKey];
495
249
  if (type === CellType.DATE && cellValue) {
496
250
  var dateFormat = data && data.format && data.format.indexOf('HH:mm') > -1 ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';
497
251
  cellValue = dayjs(cellValue).format(dateFormat);
@@ -505,12 +259,10 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
505
259
  rows: rows
506
260
  };
507
261
  };
508
- export var getTwoDimensionStatisticTableResultToTable = function getTwoDimensionStatisticTableResultToTable(_ref11) {
509
- var statisticalResult = _ref11.statisticalResult,
510
- t = _ref11.t;
262
+ var exportTwoDimensionToTable = function exportTwoDimensionToTable(_ref8) {
263
+ var statisticalResult = _ref8.statisticalResult;
511
264
  var pivotResult = statisticalResult.pivotResult,
512
265
  groupbyColumn = statisticalResult.groupbyColumn,
513
- columnGroupbyColumn = statisticalResult.columnGroupbyColumn,
514
266
  summaryColumn = statisticalResult.summaryColumn;
515
267
  var pivot_rows = pivotResult.pivot_rows,
516
268
  pivot_columns = pivotResult.pivot_columns;
@@ -533,8 +285,8 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
533
285
  if (summaryColumn) {
534
286
  if (isSummaryDateColumn(summaryColumn)) {
535
287
  _isDateSummaryColumn = true;
536
- var _ref12 = summaryColumn.data || {},
537
- format = _ref12.format;
288
+ var _ref9 = summaryColumn.data || {},
289
+ format = _ref9.format;
538
290
  columnData = {
539
291
  format: format
540
292
  };
@@ -545,12 +297,12 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
545
297
  such as the data attribute in the function column, which contains other content that is not
546
298
  useful for creating a new column
547
299
  */
548
- var _ref13 = summaryColumn.data || {},
549
- decimal = _ref13.decimal,
550
- thousands = _ref13.thousands,
551
- precision = _ref13.precision,
552
- enable_precision = _ref13.enable_precision,
553
- _format4 = _ref13.format;
300
+ var _ref10 = summaryColumn.data || {},
301
+ decimal = _ref10.decimal,
302
+ thousands = _ref10.thousands,
303
+ precision = _ref10.precision,
304
+ enable_precision = _ref10.enable_precision,
305
+ _format4 = _ref10.format;
554
306
  columnData = {
555
307
  decimal: decimal,
556
308
  thousands: thousands,
@@ -561,8 +313,9 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
561
313
  }
562
314
  }
563
315
  Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
564
- var key = item.key;
565
- var columnName = key === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(key, columnGroupbyColumn);
316
+ var key = item.key,
317
+ original_key = item.original_key;
318
+ var columnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : key;
566
319
  var newColumn = {
567
320
  type: _isDateSummaryColumn ? CellType.DATE : CellType.NUMBER,
568
321
  name: columnName,
@@ -584,9 +337,12 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
584
337
  var dateFormat = isIncludeHour ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';
585
338
  pivot_rows.forEach(function (item) {
586
339
  var name = item.name,
340
+ original_name = item.original_name,
587
341
  cells = item.cells,
588
342
  total = item.total;
589
- name = name === null ? intl.get(EMPTY_NAME) : getTableValueDisplayName(name, groupbyColumn);
343
+ if (isEmptyName(original_name)) {
344
+ name = intl.get(EMPTY_NAME);
345
+ }
590
346
  var newRow = _defineProperty({}, groupbyColumn.name, name);
591
347
  var cellValue = total;
592
348
  if (_isDateSummaryColumn && cellValue) {
@@ -607,27 +363,488 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
607
363
  rows: rows
608
364
  };
609
365
  };
610
- export var updateStatisticToTable = function updateStatisticToTable(_ref14) {
366
+ var getTwoDimensionWithSummaryColumns = function getTwoDimensionWithSummaryColumns(_ref11) {
367
+ var statisticalResult = _ref11.statisticalResult;
368
+ var pivotResult = statisticalResult.pivotResult,
369
+ groupbyColumn = statisticalResult.groupbyColumn;
370
+ var pivot_rows = pivotResult.pivot_rows,
371
+ pivot_columns = pivotResult.pivot_columns,
372
+ pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns,
373
+ formulaRows = pivotResult.formulaRows,
374
+ isSqlQuery = pivotResult.isSqlQuery;
375
+ var summaryColumns = pivot_summary_multiple_columns.filter(Boolean);
376
+ if (!groupbyColumn || summaryColumns.length === 0 || !Array.isArray(pivot_columns) || pivot_columns.length === 0 || !Array.isArray(pivot_rows) || pivot_rows.length === 0) return {};
377
+ var groupbyColumnName = groupbyColumn.name;
378
+ var firstSummaryColumn = summaryColumns[0];
379
+ var columns = [{
380
+ // name column
381
+ key: '0000',
382
+ type: CellType.TEXT,
383
+ name: groupbyColumnName,
384
+ data: null
385
+ }];
386
+ var tmpColumns = [];
387
+ pivot_columns.forEach(function (pivotColumn) {
388
+ var pivotColumnKey = pivotColumn.key,
389
+ original_key = pivotColumn.original_key;
390
+ var pivotColumnColumnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : pivotColumnKey;
391
+ summaryColumns.forEach(function (summaryColumn) {
392
+ var key = summaryColumn.key,
393
+ type = summaryColumn.type,
394
+ sqlKey = summaryColumn.sqlKey,
395
+ column_name = summaryColumn.column_name,
396
+ data = summaryColumn.data,
397
+ method = summaryColumn.method;
398
+ var newColumnName = "".concat(pivotColumnColumnName, "-").concat(column_name);
399
+ columns.push({
400
+ // just support number column
401
+ type: CellType.NUMBER,
402
+ name: newColumnName,
403
+ data: data
404
+ });
405
+ tmpColumns.push({
406
+ name: newColumnName,
407
+ pivotColumnKey: pivotColumnKey,
408
+ key: key,
409
+ type: type,
410
+ sqlKey: sqlKey,
411
+ method: method
412
+ });
413
+ });
414
+ });
415
+ columns.push({
416
+ type: CellType.NUMBER,
417
+ name: intl.get('Total'),
418
+ data: firstSummaryColumn.data
419
+ });
420
+ var rows = [];
421
+ pivot_rows.forEach(function (pivotRow) {
422
+ var name = pivotRow.name,
423
+ original_name = pivotRow.original_name,
424
+ cells = pivotRow.cells;
425
+ if (isEmptyName(original_name)) {
426
+ name = intl.get(EMPTY_NAME);
427
+ }
428
+ var newRow = _defineProperty({}, groupbyColumnName, name);
429
+ var total = 0;
430
+ tmpColumns.forEach(function (tmpColumn) {
431
+ var name = tmpColumn.name,
432
+ pivotColumnKey = tmpColumn.pivotColumnKey,
433
+ key = tmpColumn.key,
434
+ type = tmpColumn.type,
435
+ sqlKey = tmpColumn.sqlKey,
436
+ method = tmpColumn.method;
437
+ var cell = cells && cells[pivotColumnKey];
438
+ var cellRows = cell && cell.rows;
439
+ if (!Array.isArray(cellRows) || cellRows.length === 0) {
440
+ newRow[name] = 0;
441
+ } else {
442
+ var cellValue = getPivotTableSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, cellRows, formulaRows, isSqlQuery);
443
+ newRow[name] = cellValue;
444
+ total += cellValue;
445
+ }
446
+ });
447
+ newRow[intl.get('Total')] = total;
448
+ rows.push(newRow);
449
+ });
450
+ return {
451
+ columns: columns,
452
+ rows: rows
453
+ };
454
+ };
455
+ var exportTwoDimensionWithSummaryColumnsToTable = function exportTwoDimensionWithSummaryColumnsToTable(_ref12) {
456
+ var statisticalResult = _ref12.statisticalResult;
457
+ return getTwoDimensionWithSummaryColumns({
458
+ statisticalResult: statisticalResult
459
+ });
460
+ };
461
+ var updatedOneDimensionToTable = function updatedOneDimensionToTable(_ref13) {
462
+ var updateTable = _ref13.updateTable,
463
+ statisticalResult = _ref13.statisticalResult;
464
+ var pivotResult = statisticalResult.pivotResult,
465
+ groupbyColumn = statisticalResult.groupbyColumn,
466
+ statisticTableColumns = statisticalResult.statisticTableColumns;
467
+ if (!groupbyColumn) return {};
468
+ var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
469
+ if (!nameColumn) return {};
470
+ var pivot_rows = pivotResult.pivot_rows,
471
+ pivot_columns = pivotResult.pivot_columns;
472
+ var tableRows = updateTable.rows;
473
+ var columnMap = {};
474
+ var newRows = [];
475
+ var updatedRows = {};
476
+ var oldRows = {};
477
+ var rowIds = [];
478
+
479
+ // one dimension table no summary columns
480
+ if (pivot_columns.length < 2) {
481
+ columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
482
+
483
+ // updated rows
484
+ pivot_rows.forEach(function (item) {
485
+ var name = item.name,
486
+ original_name = item.original_name,
487
+ total = item.total;
488
+ var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
489
+ var row = tableRows.find(function (row) {
490
+ return row[nameColumn.key] === groupName;
491
+ });
492
+ var totalColumn = columnMap['total'];
493
+ if (row) {
494
+ // update old row
495
+ var updateRow = {};
496
+ var oldRow = {};
497
+ var validTotalCellValue = getValidValueForColumn(totalColumn, total.total);
498
+ if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
499
+ updateRow[totalColumn.key] = validTotalCellValue;
500
+ oldRow[totalColumn.key] = row[totalColumn.key];
501
+ }
502
+ if (Object.keys(updateRow).length > 0) {
503
+ var rowId = row._id;
504
+ rowIds.push(rowId);
505
+ updatedRows[rowId] = updateRow;
506
+ oldRows[rowId] = oldRow;
507
+ }
508
+ } else {
509
+ // insert new row
510
+ var newRow = {};
511
+ newRow[nameColumn.key] = groupName;
512
+ if (totalColumn) {
513
+ newRow[totalColumn.key] = getValidValueForColumn(totalColumn, total.total);
514
+ }
515
+ newRows.push(newRow);
516
+ }
517
+ });
518
+ return {
519
+ newRows: newRows,
520
+ updatedRows: updatedRows,
521
+ rowIds: rowIds,
522
+ oldRows: oldRows
523
+ };
524
+ }
525
+
526
+ // one dimension table with summary columns
527
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
528
+ var key = item.key;
529
+ var column = statisticTableColumns.find(function (column) {
530
+ return column.key === key;
531
+ });
532
+ if (column) {
533
+ columnMap[key] = TableUtils.getTableColumnByName(updateTable, column.name);
534
+ }
535
+ });
536
+
537
+ // updated rows
538
+ var nameColumnKey = nameColumn.key;
539
+ pivot_rows.forEach(function (item) {
540
+ var name = item.name,
541
+ original_name = item.original_name,
542
+ total = item.total;
543
+ var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
544
+ var row = tableRows.find(function (row) {
545
+ return row[nameColumnKey] === groupName;
546
+ });
547
+ if (row) {
548
+ var updateRow = {};
549
+ var oldRow = {};
550
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
551
+ var key = item.key,
552
+ method = item.method;
553
+ var column = columnMap[key];
554
+ var cellValueKey = key + method;
555
+ var totalCellValue = getValidValueForColumn(column, total[cellValueKey]);
556
+ if (column && isCellValueChanged(row[column.key], totalCellValue, column.type)) {
557
+ updateRow[column.key] = totalCellValue;
558
+ oldRow[column.key] = row[column.key];
559
+ }
560
+ });
561
+ if (Object.keys(updateRow).length > 0) {
562
+ var rowId = row._id;
563
+ rowIds.push(rowId);
564
+ updatedRows[rowId] = updateRow;
565
+ oldRows[rowId] = oldRow;
566
+ }
567
+ } else {
568
+ var newRow = _defineProperty({}, nameColumn.key, groupName);
569
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
570
+ var key = item.key,
571
+ method = item.method;
572
+ var cellValueKey = key + method;
573
+ var column = columnMap[key];
574
+ if (column) {
575
+ var totalCellValue = getValidValueForColumn(column, total[cellValueKey]);
576
+ newRow[column.key] = totalCellValue;
577
+ }
578
+ });
579
+ newRows.push(newRow);
580
+ }
581
+ });
582
+ return {
583
+ newRows: newRows,
584
+ updatedRows: updatedRows,
585
+ rowIds: rowIds,
586
+ oldRows: oldRows
587
+ };
588
+ };
589
+ var updateTwoDimensionToTable = function updateTwoDimensionToTable(_ref14) {
611
590
  var updateTable = _ref14.updateTable,
612
- statisticalResult = _ref14.statisticalResult,
613
- t = _ref14.t;
614
- var groupbyColumn = statisticalResult.groupbyColumn,
591
+ statisticalResult = _ref14.statisticalResult;
592
+ var pivotResult = statisticalResult.pivotResult,
593
+ groupbyColumn = statisticalResult.groupbyColumn;
594
+ var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
595
+ if (!nameColumn) return {};
596
+ var pivot_rows = pivotResult.pivot_rows,
597
+ pivot_columns = pivotResult.pivot_columns;
598
+ var tableRows = updateTable.rows;
599
+ var columnMap = {};
600
+ var newRows = [];
601
+ var updatedRows = {};
602
+ var rowIds = [];
603
+ var oldRows = {};
604
+
605
+ // updated columns
606
+ var updateColumns = [];
607
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
608
+ var key = item.key,
609
+ original_key = item.original_key;
610
+ var columnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : key;
611
+ var column = TableUtils.getTableColumnByName(updateTable, columnName);
612
+ columnMap[columnName] = column;
613
+ updateColumns.push(column);
614
+ });
615
+ var totalColumn = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
616
+ columnMap['total'] = totalColumn;
617
+ updateColumns.push(totalColumn);
618
+
619
+ // updated rows
620
+ var _loop = function _loop(i) {
621
+ var pivotRow = pivot_rows[i];
622
+ var name = pivotRow.name,
623
+ original_name = pivotRow.original_name,
624
+ cells = pivotRow.cells,
625
+ total = pivotRow.total;
626
+ if (isEmptyName(original_name)) {
627
+ name = intl.get(EMPTY_NAME);
628
+ }
629
+ var nameColumnKey = nameColumn.key;
630
+ var row = tableRows.find(function (row) {
631
+ return row[nameColumnKey] === name;
632
+ });
633
+ var totalColumn = columnMap['total'];
634
+ if (row) {
635
+ // update old row
636
+ var rowId = row._id;
637
+ var updatedRow = {};
638
+ var oldRow = {}; // op used
639
+ var validTotalCellValue = getValidValueForColumn(totalColumn, total);
640
+ if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
641
+ updatedRow[totalColumn.key] = validTotalCellValue;
642
+ oldRow[totalColumn.key] = row[totalColumn.key];
643
+ }
644
+ var keys = Object.keys(cells);
645
+ if (keys.length === 0) {
646
+ updateColumns.forEach(function (column) {
647
+ var key = column.key,
648
+ type = column.type;
649
+ var newCellValue = key === totalColumn.key ? 0 : null;
650
+ if (isCellValueChanged(row[key], newCellValue, type)) {
651
+ updatedRow[key] = newCellValue;
652
+ oldRow[key] = row[key];
653
+ }
654
+ });
655
+ } else {
656
+ keys.forEach(function (key) {
657
+ var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
658
+ var column = columnMap[columnName];
659
+ var validCellValue = getValidValueForColumn(column, cells[key].total);
660
+ if (column && isCellValueChanged(row[column.key], validCellValue, column.type)) {
661
+ updatedRow[column.key] = validCellValue;
662
+ oldRow[column.key] = row[column.key];
663
+ }
664
+ });
665
+ }
666
+ if (Object.keys(updatedRow).length > 0) {
667
+ rowIds.push(rowId);
668
+ updatedRows[rowId] = updatedRow;
669
+ oldRows[rowId] = oldRow;
670
+ }
671
+ } else {
672
+ // insert new row
673
+ var newRow = {};
674
+ newRow[nameColumnKey] = name;
675
+ if (totalColumn) {
676
+ newRow[totalColumn.key] = getValidValueForColumn(totalColumn, name);
677
+ }
678
+ Object.keys(cells).forEach(function (key) {
679
+ var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
680
+ var column = columnMap[columnName];
681
+ if (column) {
682
+ newRow[column.key] = getValidValueForColumn(column, cells[key].total);
683
+ }
684
+ });
685
+ if (Object.keys(newRow).length > 0) {
686
+ newRows.push(newRow);
687
+ }
688
+ }
689
+ };
690
+ for (var i = 0; i < pivot_rows.length; i++) {
691
+ _loop(i);
692
+ }
693
+ return {
694
+ newRows: newRows,
695
+ updatedRows: updatedRows,
696
+ oldRows: oldRows,
697
+ rowIds: rowIds
698
+ };
699
+ };
700
+ var updateTwoDimensionWithSummaryColumnsToTable = function updateTwoDimensionWithSummaryColumnsToTable(_ref15) {
701
+ var updateTable = _ref15.updateTable,
702
+ statisticalResult = _ref15.statisticalResult;
703
+ var groupbyColumn = statisticalResult.groupbyColumn;
704
+ var nameColumn = groupbyColumn && TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
705
+ if (!nameColumn) return {};
706
+ var _getTwoDimensionWithS = getTwoDimensionWithSummaryColumns({
707
+ statisticalResult: statisticalResult
708
+ }),
709
+ exportingColumns = _getTwoDimensionWithS.columns,
710
+ exportingRows = _getTwoDimensionWithS.rows;
711
+ if (!Array.isArray(exportingColumns) || exportingColumns.length === 0 || !Array.isArray(exportingRows) || exportingRows.length === 0) {
712
+ return {};
713
+ }
714
+ var tableRows = updateTable.rows,
715
+ tableColumns = updateTable.columns;
716
+ var nameColumnKey = nameColumn.key;
717
+ var groupbyColumnName = groupbyColumn.name;
718
+ var newRows = [];
719
+ var updatedRows = {};
720
+ var rowIds = [];
721
+ var oldRows = {};
722
+ var nameCellValueExistRowMap = {};
723
+ tableRows.forEach(function (row) {
724
+ var nameCellValue = row[nameColumnKey];
725
+ if (!nameCellValueExistRowMap[nameCellValue]) {
726
+ nameCellValueExistRowMap[nameCellValue] = row;
727
+ }
728
+ });
729
+ exportingRows.forEach(function (exportingRow) {
730
+ var nameCellValue = exportingRow[groupbyColumnName];
731
+ var existRow = nameCellValueExistRowMap[nameCellValue];
732
+ if (existRow) {
733
+ // update the row already exist
734
+ var exportingRowData = {};
735
+ var existRowData = {};
736
+ tableColumns.forEach(function (tableColumn) {
737
+ var tableColumnKey = tableColumn.key,
738
+ tableColumnType = tableColumn.type,
739
+ tableColumnName = tableColumn.name;
740
+ var existCellValue = existRow[tableColumnKey];
741
+ var exportingCellValue = exportingRow[tableColumnName];
742
+ if (tableColumn && isCellValueChanged(existCellValue, exportingCellValue, tableColumnType)) {
743
+ exportingRowData[tableColumnKey] = exportingCellValue;
744
+ existRowData[tableColumnKey] = existCellValue;
745
+ }
746
+ });
747
+ if (Object.keys(exportingRowData).length > 0) {
748
+ var rowId = existRow._id;
749
+ rowIds.push(rowId);
750
+ updatedRows[rowId] = exportingRowData;
751
+ oldRows[rowId] = existRowData;
752
+ }
753
+ } else {
754
+ // create new row which not exist
755
+ newRows.push(exportingRow);
756
+ }
757
+ });
758
+ return {
759
+ newRows: newRows,
760
+ updatedRows: updatedRows,
761
+ oldRows: oldRows,
762
+ rowIds: rowIds
763
+ };
764
+ };
765
+
766
+ /**
767
+ * statisticalResult: {
768
+ * columnGroupbyColumn: null,
769
+ * groupbyColumn: null,
770
+ * pivotResult: {
771
+ * pivot_columns: [],
772
+ * pivot_rows: [
773
+ * { name: 'xxx', original_name: 'xxx', total }
774
+ * ]
775
+ * },
776
+ * statisticTableColumns: null,
777
+ * summaryColumn: null,
778
+ * }
779
+ *
780
+ * @return {
781
+ * columns: [
782
+ * {
783
+ * name: xxx,
784
+ * type: CellType.DATE
785
+ * data: { format }
786
+ * }, {
787
+ * name: xxx,
788
+ * type: CellType.NUMBER
789
+ * data: { decimal, thousands, precision, enable_precision, format }
790
+ * },
791
+ * ],
792
+ * rows: [
793
+ * { columnName: value, xxx },
794
+ * ]
795
+ * }
796
+ */
797
+ export var exportStatisticToTable = function exportStatisticToTable(_ref16) {
798
+ var statisticalResult = _ref16.statisticalResult;
799
+ var pivotResult = statisticalResult.pivotResult,
800
+ groupbyColumn = statisticalResult.groupbyColumn,
615
801
  columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
802
+ var pivot_columns = pivotResult.pivot_columns,
803
+ pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns;
616
804
  if (!groupbyColumn) return {};
617
805
 
618
806
  // two dimension table
619
807
  if (columnGroupbyColumn) {
620
- return getUpdatedTwoDimensionStatisticTableResultToTable({
808
+ if (Array.isArray(pivot_summary_multiple_columns) && pivot_summary_multiple_columns.length > 0) {
809
+ return exportTwoDimensionWithSummaryColumnsToTable({
810
+ statisticalResult: statisticalResult
811
+ });
812
+ }
813
+ return exportTwoDimensionToTable({
814
+ statisticalResult: statisticalResult
815
+ });
816
+ }
817
+ if (!Array.isArray(pivot_columns)) return {};
818
+ return exportOneDimensionToTable({
819
+ statisticalResult: statisticalResult
820
+ });
821
+ };
822
+ export var updateStatisticToTable = function updateStatisticToTable(_ref17) {
823
+ var updateTable = _ref17.updateTable,
824
+ statisticalResult = _ref17.statisticalResult;
825
+ var groupbyColumn = statisticalResult.groupbyColumn,
826
+ columnGroupbyColumn = statisticalResult.columnGroupbyColumn,
827
+ pivotResult = statisticalResult.pivotResult;
828
+ var pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns;
829
+ if (!groupbyColumn) return {};
830
+
831
+ // two dimension table
832
+ if (columnGroupbyColumn) {
833
+ if (Array.isArray(pivot_summary_multiple_columns) && pivot_summary_multiple_columns.length > 0) {
834
+ return updateTwoDimensionWithSummaryColumnsToTable({
835
+ updateTable: updateTable,
836
+ statisticalResult: statisticalResult
837
+ });
838
+ }
839
+ return updateTwoDimensionToTable({
621
840
  updateTable: updateTable,
622
- statisticalResult: statisticalResult,
623
- t: t
841
+ statisticalResult: statisticalResult
624
842
  });
625
843
  }
626
844
 
627
845
  // one dimension table
628
- return getUpdatedOneDimensionStatisticTableResultToTable({
846
+ return updatedOneDimensionToTable({
629
847
  updateTable: updateTable,
630
- statisticalResult: statisticalResult,
631
- t: t
848
+ statisticalResult: statisticalResult
632
849
  });
633
850
  };
@@ -0,0 +1,91 @@
1
+ import { FORMULA_COLUMN_TYPES_MAP, isNumber } from 'dtable-store';
2
+ import { STATISTICS_COUNT_TYPE, SUMMARY_METHOD_MAP } from '../constants';
3
+ var getCellValueFromRow = function getCellValueFromRow(row, formulaRow, columnType, columnKey, sqlKey, isSqlQuery) {
4
+ if (!isSqlQuery) {
5
+ if (FORMULA_COLUMN_TYPES_MAP[columnType]) {
6
+ var cellValue = formulaRow[columnKey];
7
+ return Array.isArray(cellValue) ? cellValue[0] : cellValue;
8
+ }
9
+ return row[columnKey];
10
+ }
11
+ return row[sqlKey];
12
+ };
13
+ export var getPivotTableSummaryTotal = function getPivotTableSummaryTotal(summaryColumnType, summaryColumnKey, sqlKey, summaryType, summaryMethod, rows, formulaRows, isSqlQuery) {
14
+ if (summaryType === STATISTICS_COUNT_TYPE.COUNT) {
15
+ return rows.length;
16
+ }
17
+ if (summaryType !== STATISTICS_COUNT_TYPE.ADVANCED) {
18
+ return 0;
19
+ }
20
+ switch (summaryMethod) {
21
+ case SUMMARY_METHOD_MAP.Distinct_values:
22
+ {
23
+ var count = 0;
24
+ var existMap = {};
25
+ rows.forEach(function (row) {
26
+ var formulaRow = formulaRows && formulaRows[row._id];
27
+ var cellValue = getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
28
+ if (!cellValue) {
29
+ if (cellValue === 0) {
30
+ cellValue = '0';
31
+ } else {
32
+ cellValue = !!cellValue;
33
+ }
34
+ }
35
+ if (!existMap[cellValue]) {
36
+ existMap[cellValue] = true;
37
+ count++;
38
+ }
39
+ });
40
+ return count;
41
+ }
42
+ case SUMMARY_METHOD_MAP.Sum:
43
+ case SUMMARY_METHOD_MAP.Mean:
44
+ {
45
+ var sum = 0;
46
+ var validNumbersCount = 0;
47
+ rows.forEach(function (row) {
48
+ var formulaRow = formulaRows && formulaRows[row._id];
49
+ var cellValue = getCellValueFromRow(row, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
50
+ if (isNumber(cellValue)) {
51
+ validNumbersCount++;
52
+ sum += cellValue;
53
+ }
54
+ });
55
+ if (summaryMethod === SUMMARY_METHOD_MAP.Sum) {
56
+ sum = Number.parseFloat(sum.toFixed(8));
57
+ } else if (summaryMethod === SUMMARY_METHOD_MAP.Mean) {
58
+ sum = validNumbersCount === 0 ? 0 : Number.parseFloat((sum / validNumbersCount).toFixed(8));
59
+ }
60
+ return sum;
61
+ }
62
+ case SUMMARY_METHOD_MAP.Max:
63
+ case SUMMARY_METHOD_MAP.Min:
64
+ {
65
+ if (rows.length === 0) {
66
+ return 0;
67
+ }
68
+ var result = rows.reduce(function (current, next) {
69
+ var currentFormulaRow = formulaRows && formulaRows[current._id];
70
+ var nextFormulaRow = formulaRows && formulaRows[next._id];
71
+ var currentValue = getCellValueFromRow(current, currentFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
72
+ var nextValue = getCellValueFromRow(next, nextFormulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
73
+ if (!nextValue && nextValue !== 0) {
74
+ return current;
75
+ }
76
+ var isNextGreater = currentValue < nextValue;
77
+ if (summaryMethod === SUMMARY_METHOD_MAP.Min) {
78
+ return isNextGreater ? current : next;
79
+ } else {
80
+ return isNextGreater ? next : current;
81
+ }
82
+ });
83
+ var formulaRow = formulaRows && formulaRows[result._id];
84
+ return getCellValueFromRow(result, formulaRow, summaryColumnType, summaryColumnKey, sqlKey, isSqlQuery);
85
+ }
86
+ default:
87
+ {
88
+ return 0;
89
+ }
90
+ }
91
+ };
@@ -37,6 +37,21 @@ export var getSqlGroup = function getSqlGroup(granularity, column) {
37
37
  }
38
38
  return "`".concat(columnName, "`");
39
39
  };
40
+ export var getPieChartSqlGroupName = function getPieChartSqlGroupName(statisticRecord, selectedColumn, groupName) {
41
+ var original_name_list = statisticRecord.original_name_list,
42
+ name_list = statisticRecord.name_list;
43
+ var sqlString = '';
44
+ var list = original_name_list.length > 0 ? original_name_list : name_list;
45
+ list.forEach(function (item, index) {
46
+ if (index === 0) {
47
+ sqlString += getSqlGroupName(name_list[0], original_name_list[0], selectedColumn);
48
+ } else {
49
+ var sqlName = getSqlGroupName(name_list[index], original_name_list[index], selectedColumn);
50
+ sqlString = "".concat(sqlString, " or ").concat(groupName, "=").concat(sqlName);
51
+ }
52
+ });
53
+ return sqlString;
54
+ };
40
55
  export var getSqlString = function getSqlString(statItem, statisticRecord, _ref) {
41
56
  var isColumn = _ref.isColumn,
42
57
  isCurrentView = _ref.isCurrentView,
@@ -63,6 +78,9 @@ export var getSqlString = function getSqlString(statItem, statisticRecord, _ref)
63
78
  group_original_name = statisticRecord.group_original_name,
64
79
  group_name = statisticRecord.group_name;
65
80
  var sqlName = getSqlGroupName(name, original_name, selectedColumn);
81
+ if ((type === STAT_TYPE.PIE || type === STAT_TYPE.RING) && original_name === 'Others') {
82
+ sqlName = getPieChartSqlGroupName(statisticRecord, selectedColumn, groupName);
83
+ }
66
84
  var sqlGroupName;
67
85
  if (isGroup) {
68
86
  sqlGroupName = getSqlGroupName(group_name, group_original_name, columnSelectedColumn);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dtable-statistic",
3
- "version": "4.0.11",
3
+ "version": "4.0.13",
4
4
  "description": "statistics",
5
5
  "main": "dist/dtable-statistic.js",
6
6
  "author": "seafile",
@@ -12,8 +12,8 @@
12
12
  "@seafile/seafile-calendar": "0.0.24",
13
13
  "comlink": "^4.3.1",
14
14
  "dayjs": "1.10.7",
15
- "dtable-store": "4.0.6",
16
- "dtable-web-api": "4.0.4",
15
+ "dtable-store": "4.0.12",
16
+ "dtable-web-api": "4.0.5",
17
17
  "glamor": "^2.20.40",
18
18
  "html2canvas": "^1.4.1",
19
19
  "rc-slider": "^9.7.4",