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
@@ -24,7 +24,6 @@ class SQLStatisticsUtils {}
24
24
  _SQLStatisticsUtils = SQLStatisticsUtils;
25
25
  SQLStatisticsUtils.DATA_SOURCE = 'sql_statistics';
26
26
  SQLStatisticsUtils.getGroupLabelFromDB = async (cellValue, column, chart, isPivot) => {
27
- const dateGranularity = _baseUtils.default.getDateGranularityByType(chart);
28
27
  const {
29
28
  type,
30
29
  data
@@ -38,7 +37,6 @@ SQLStatisticsUtils.getGroupLabelFromDB = async (cellValue, column, chart, isPivo
38
37
  case _dtableUtils.CellType.CTIME:
39
38
  case _dtableUtils.CellType.MTIME:
40
39
  {
41
- // handled in sql query result
42
40
  return cellValue;
43
41
  }
44
42
  case _dtableUtils.CellType.NUMBER:
@@ -73,23 +71,23 @@ SQLStatisticsUtils.getGroupLabelFromDB = async (cellValue, column, chart, isPivo
73
71
  return cellValue || null;
74
72
  }
75
73
  case _dtableUtils.CellType.FORMULA:
74
+ {
75
+ if (Array.isArray(cellValue)) {
76
+ const validValue = (0, _dtableUtils.getFormulaDisplayString)(cellValue, data) || [];
77
+ return validValue;
78
+ }
79
+ return cellValue || null;
80
+ }
76
81
  case _dtableUtils.CellType.LINK_FORMULA:
77
82
  {
78
83
  const {
79
- array_type,
80
84
  result_type
81
85
  } = data || {};
82
- const validValue = (0, _dtableUtils.getFormulaDisplayString)(cellValue, data) || [];
83
- if (array_type === 'date' && (cellValue === null || cellValue === void 0 ? void 0 : cellValue.length) === 1) {
84
- if (!dateGranularity) return validValue;
85
- if (dateGranularity.toUpperCase() === 'QUARTER') return _dtableUtils.DateUtils.getDateByGranularity(validValue, 'QUARTAR');
86
- return _dtableUtils.DateUtils.getDateByGranularity(validValue, dateGranularity);
87
- }
88
-
89
86
  // handles mutiple select
90
87
  if (result_type === 'array') {
91
88
  return cellValue;
92
89
  }
90
+ const validValue = (0, _dtableUtils.getFormulaDisplayString)(cellValue, data) || [];
93
91
  if (!validValue && validValue !== 0) {
94
92
  return null;
95
93
  }
@@ -732,7 +730,7 @@ SQLStatisticsUtils.basicChartSQLResult2JavaScript = async (chart, sqlRows, chart
732
730
  }
733
731
  }
734
732
  _baseUtils.default.sortCharts(result, groupbyColumn, 'name');
735
- _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
733
+ await _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
736
734
  _baseUtils.default.updateSummaryValuePrecision(result, summaryColumn, 'value');
737
735
  if (_constants.SUPPORT_DATA_SORT_CHART_TYPES.includes(type) && sort_type) {
738
736
  _baseUtils.default.sortChartData(result, sort_type);
@@ -854,7 +852,7 @@ SQLStatisticsUtils.customChartSQLResult2JavaScript = async (chart, sqlRows, char
854
852
  result = assembled;
855
853
  }
856
854
  _baseUtils.default.sortCharts(result, groupbyColumn, 'name');
857
- _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', '', false, true);
855
+ await _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', '', false, true);
858
856
  _baseUtils.default.updateSummaryValuePrecision(result, summaryColumn, 'value');
859
857
  return result;
860
858
  };
@@ -891,6 +889,7 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
891
889
  const comparedEndDate = new Date(x_axis_compared_date_range_end);
892
890
  for (const item of sqlRows) {
893
891
  let name = item[sqlGroupbyColumnKey];
892
+ if (!name) continue;
894
893
  const label = await _SQLStatisticsUtils.getGroupLabelFromDB(name, groupbyColumn, chart.config);
895
894
  if (x_axis_date_granularity === 'quarter') {
896
895
  name = (0, _dateTranslate.convertQuarterToDate)(name);
@@ -906,30 +905,50 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
906
905
  const currentValue = dateRangeResult.get(label);
907
906
  if (!currentValue) {
908
907
  if (isAdvanced) {
909
- dateRangeResult.set(label, [value]);
908
+ dateRangeResult.set(label, {
909
+ value: [value],
910
+ date: name,
911
+ rows: [item]
912
+ });
910
913
  } else {
911
- dateRangeResult.set(label, value);
914
+ dateRangeResult.set(label, {
915
+ value,
916
+ date: name,
917
+ rows: [item]
918
+ });
912
919
  }
913
920
  } else {
914
921
  if (isAdvanced) {
915
- currentValue.push(value);
922
+ currentValue.value.push(value);
923
+ currentValue.rows.push(item);
916
924
  } else {
917
- dateRangeResult.set(label, value + currentValue);
925
+ currentValue.value = value + currentValue.value;
926
+ currentValue.rows.push(item);
918
927
  }
919
928
  }
920
929
  } else if (name >= comparedStartDate && name <= comparedEndDate) {
921
930
  const currentValue = dateComparedResult.get(label);
922
931
  if (!currentValue) {
923
932
  if (isAdvanced) {
924
- dateComparedResult.set(label, [value]);
933
+ dateComparedResult.set(label, {
934
+ value: [value],
935
+ date: name,
936
+ rows: [item]
937
+ });
925
938
  } else {
926
- dateComparedResult.set(label, value);
939
+ dateComparedResult.set(label, {
940
+ value,
941
+ date: name,
942
+ rows: [item]
943
+ });
927
944
  }
928
945
  } else {
929
946
  if (isAdvanced) {
930
- dateComparedResult.push(value);
947
+ currentValue.value.push(value);
948
+ currentValue.rows.push(item);
931
949
  } else {
932
- dateComparedResult.set(label, value + currentValue);
950
+ currentValue.value = value + currentValue.value;
951
+ currentValue.rows.push(item);
933
952
  }
934
953
  }
935
954
  }
@@ -937,11 +956,23 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
937
956
  let comparedResult = [];
938
957
  let rangeResult = [];
939
958
  const data = (summaryColumn === null || summaryColumn === void 0 ? void 0 : summaryColumn.data) || {};
940
- for (let item of dateRangeResult) {
941
- let value = item[1];
959
+
960
+ // convert Map to array and sort by date
961
+ const sortedDateRangeEntries = Array.from(dateRangeResult.entries()).sort((a, b) => {
962
+ return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;
963
+ });
964
+ const sortedDateComparedEntries = Array.from(dateComparedResult.entries()).sort((a, b) => {
965
+ return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;
966
+ });
967
+ for (let item of sortedDateRangeEntries) {
968
+ const {
969
+ value: rawValue,
970
+ rows
971
+ } = item[1] || {};
972
+ let value = rawValue;
942
973
  let formatted_value = value;
943
974
  if (isAdvanced) {
944
- value = (0, _columnUtils.getSummaryResult)(item[1], y_axis_summary_method, data.precision);
975
+ value = (0, _columnUtils.getSummaryResult)(rawValue, y_axis_summary_method, data.precision);
945
976
  formatted_value = (0, _columnUtils.getFormattedValue)(value, summaryColumn, y_axis_summary_method);
946
977
  }
947
978
  rangeResult.push({
@@ -949,19 +980,21 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
949
980
  group_name: groupName1,
950
981
  raw_name: item[0],
951
982
  value,
983
+ rows: rows || [],
952
984
  formatted_value
953
985
  });
954
986
  }
955
987
  let index = 0;
956
- for (let item of dateComparedResult) {
988
+ for (let item of sortedDateComparedEntries) {
957
989
  let dateRangeItem = rangeResult[index];
958
990
  if (!dateRangeItem) {
959
991
  break;
960
992
  }
961
- let value = item[1];
993
+ let value = item[1].value;
994
+ const rows = item[1].rows;
962
995
  let formatted_value = value;
963
996
  if (isAdvanced) {
964
- value = (0, _columnUtils.getSummaryResult)(item[1], y_axis_summary_method, data.precision);
997
+ value = (0, _columnUtils.getSummaryResult)(item[1].value, y_axis_summary_method, data.precision);
965
998
  formatted_value = (0, _columnUtils.getFormattedValue)(value, summaryColumn, y_axis_summary_method);
966
999
  }
967
1000
  const newItem = {
@@ -969,6 +1002,7 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
969
1002
  group_name: groupName2,
970
1003
  raw_name: item[0],
971
1004
  value,
1005
+ rows,
972
1006
  formatted_value
973
1007
  };
974
1008
  if (display_increase) {
@@ -987,6 +1021,8 @@ SQLStatisticsUtils.compareSQLResult2Javascript = async (chart, sqlRows, chartSQL
987
1021
  }
988
1022
  _baseUtils.default.updateSummaryValuePrecision(comparedResult, summaryColumn, 'value');
989
1023
  _baseUtils.default.updateSummaryValuePrecision(rangeResult, summaryColumn, 'value');
1024
+ _baseUtils.default.sortCharts(rangeResult, groupbyColumn, 'name');
1025
+ _baseUtils.default.sortCharts(comparedResult, groupbyColumn, 'name');
990
1026
  return [...comparedResult, ...rangeResult];
991
1027
  };
992
1028
  SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, chartSQLMap, columnMap, tables) => {
@@ -1190,7 +1226,7 @@ SQLStatisticsUtils.combinationSQLResult2Javascript = async (chart, sqlRows, char
1190
1226
  }
1191
1227
  }
1192
1228
  }
1193
- _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', '', false, true);
1229
+ await _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', '', false, true);
1194
1230
  _baseUtils.default.sortCharts(result, groupbyColumn, 'name');
1195
1231
  _baseUtils.default.updateSummaryValuePrecision(result, summaryColumnLeft, 'value_left');
1196
1232
  _baseUtils.default.updateSummaryValuePrecision(result, summaryColumnRight, 'value_right');
@@ -1296,9 +1332,72 @@ SQLStatisticsUtils.groupingTwoDimensionChartSQLResult2JavaScript = async (chart,
1296
1332
  }
1297
1333
  }
1298
1334
  }
1335
+
1336
+ // fill empty group name with value 0
1337
+ const allGroupNames = new Set();
1338
+ const nameGroupMap = new Map();
1339
+ result.forEach(item => {
1340
+ const {
1341
+ name,
1342
+ group_name: groupName
1343
+ } = item;
1344
+ allGroupNames.add(groupName);
1345
+ if (!nameGroupMap.has(name)) {
1346
+ nameGroupMap.set(name, new Set());
1347
+ }
1348
+ nameGroupMap.get(name).add(groupName);
1349
+ });
1350
+ const isEmptyGroupName = groupName => groupName === undefined || groupName === null || groupName === '';
1351
+ const groupNameList = Array.from(allGroupNames).sort((a, b) => {
1352
+ const aEmpty = isEmptyGroupName(a);
1353
+ const bEmpty = isEmptyGroupName(b);
1354
+ if (aEmpty && !bEmpty) return 1;
1355
+ if (!aEmpty && bEmpty) return -1;
1356
+ return "".concat(a !== null && a !== void 0 ? a : '').localeCompare("".concat(b !== null && b !== void 0 ? b : ''));
1357
+ });
1358
+ nameGroupMap.forEach((groupSet, name) => {
1359
+ groupNameList.forEach(groupName => {
1360
+ if (!groupSet.has(groupName)) {
1361
+ result.push({
1362
+ name,
1363
+ rows: [],
1364
+ group_name: groupName,
1365
+ value: 0
1366
+ });
1367
+ }
1368
+ });
1369
+ });
1370
+
1371
+ // ensure each name keeps original order while its group_name entries follow the normalized group order
1372
+ const groupOrder = new Map(groupNameList.map((groupName, index) => [groupName, index]));
1373
+ const nameOrder = [];
1374
+ const seenNames = new Set();
1375
+ const nameBuckets = new Map();
1376
+ result.forEach(item => {
1377
+ if (!seenNames.has(item.name)) {
1378
+ seenNames.add(item.name);
1379
+ nameOrder.push(item.name);
1380
+ }
1381
+ if (!nameBuckets.has(item.name)) {
1382
+ nameBuckets.set(item.name, []);
1383
+ }
1384
+ nameBuckets.get(item.name).push(item);
1385
+ });
1386
+ const orderedResult = [];
1387
+ nameOrder.forEach(name => {
1388
+ const items = nameBuckets.get(name).sort((a, b) => {
1389
+ var _a$group_name, _b$group_name;
1390
+ const aOrder = groupOrder.has(a.group_name) ? groupOrder.get(a.group_name) : Number.MAX_SAFE_INTEGER;
1391
+ const bOrder = groupOrder.has(b.group_name) ? groupOrder.get(b.group_name) : Number.MAX_SAFE_INTEGER;
1392
+ if (aOrder !== bOrder) return aOrder - bOrder;
1393
+ return "".concat((_a$group_name = a.group_name) !== null && _a$group_name !== void 0 ? _a$group_name : '').localeCompare("".concat((_b$group_name = b.group_name) !== null && _b$group_name !== void 0 ? _b$group_name : ''));
1394
+ });
1395
+ orderedResult.push(...items);
1396
+ });
1397
+ result.splice(0, result.length, ...orderedResult);
1299
1398
  _baseUtils.default.sortCharts(result, groupbyColumn, 'name');
1300
- _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
1301
- _baseUtils.default.updateTableViewList(result, columnGroupbyColumn, 'group_name', 'group_color', false, false);
1399
+ await _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
1400
+ await _baseUtils.default.updateTableViewList(result, columnGroupbyColumn, 'group_name', 'group_color', false, false);
1302
1401
  _baseUtils.default.updateSummaryValuePrecision(result, summaryColumn, 'value');
1303
1402
  return result;
1304
1403
  };
@@ -1356,7 +1455,7 @@ SQLStatisticsUtils.groupingChartSQLResult2JavaScript = async (chart, sqlRows, ch
1356
1455
  }
1357
1456
  }
1358
1457
  _baseUtils.default.sortCharts(result, groupbyColumn, 'name');
1359
- _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
1458
+ await _baseUtils.default.updateTableViewList(result, groupbyColumn, 'name', 'color', false, true);
1360
1459
  const allSummaryColumns = [summaryColumn].concat(summaryColumnsWithMethod.map(item => item.column));
1361
1460
 
1362
1461
  // format precision of enabled precision columns
@@ -1518,7 +1617,7 @@ SQLStatisticsUtils.trendMapChartSQLResult2JavaScript = (chart, sqlRows, chartSQL
1518
1617
  const {
1519
1618
  compareDate,
1520
1619
  comparedDate
1521
- } = (0, _trendUtils.getCompareDate)(date_granularity);
1620
+ } = (0, _trendUtils.getCompareDate)(date_granularity, 'app');
1522
1621
  for (const item of sqlRows) {
1523
1622
  if (!item[sqlGroupbyColumnKey]) continue;
1524
1623
  const currentDate = item[sqlGroupbyColumnKey] + '';
@@ -1626,7 +1725,7 @@ SQLStatisticsUtils.sqlResult2JavaScript = async (chart, sqlRows, chartSQLMap, co
1626
1725
  case _constants.CHART_TYPE.COMPLETENESS:
1627
1726
  case _constants.CHART_TYPE.COMPLETENESS_GROUP:
1628
1727
  {
1629
- const result = _SQLStatisticsUtils.completenessSQlResult(chart, sqlRows, chartSQLMap, tables);
1728
+ const result = await _SQLStatisticsUtils.completenessSQlResult(chart, sqlRows, chartSQLMap, tables);
1630
1729
  return {
1631
1730
  result
1632
1731
  };
@@ -1657,7 +1756,7 @@ SQLStatisticsUtils.sqlResult2JavaScript = async (chart, sqlRows, chartSQLMap, co
1657
1756
  case _constants.CHART_TYPE.SCATTER:
1658
1757
  {
1659
1758
  return {
1660
- result: _SQLStatisticsUtils.scatterSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
1759
+ result: await _SQLStatisticsUtils.scatterSQLResult2JavaScript(chart, sqlRows, chartSQLMap, columnMap, tables)
1661
1760
  };
1662
1761
  }
1663
1762
  case _constants.CHART_TYPE.BAR_CUSTOM:
@@ -1711,16 +1810,10 @@ SQLStatisticsUtils._get_completeness_name = (row, column) => {
1711
1810
  }
1712
1811
  return value;
1713
1812
  };
1714
- SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables) => {
1715
- const {
1716
- config: {
1717
- type
1718
- }
1719
- } = chart;
1720
- const isGroup = type === _constants.CHART_TYPE.COMPLETENESS_GROUP;
1813
+ SQLStatisticsUtils.completenessSQlResult = async (chart, sqlRows, chartSQLMap, tables) => {
1721
1814
  const {
1722
1815
  sqlColumns,
1723
- sqlColumnGroupByColumnKey
1816
+ sqlColumnGroupbyColumnKey
1724
1817
  } = chartSQLMap;
1725
1818
  const {
1726
1819
  name_column,
@@ -1728,134 +1821,23 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
1728
1821
  target_column,
1729
1822
  column_groupby_column
1730
1823
  } = sqlColumns;
1731
- const res = [];
1732
- let summedSqlRows;
1733
1824
  const nameColumnDataAsAnArray = (0, _baseUtils.findIfColumnDataIsArray)(name_column);
1734
- if (!isGroup) {
1735
- if (nameColumnDataAsAnArray) {
1736
- const sumSqlRows = sqlRows.reduce((acc, row) => {
1737
- const names = row[name_column.key];
1738
- if (!names) {
1739
- row[name_column.key] = _intl.default.get('Empty');
1740
- acc[_intl.default.get('Empty')] = row;
1741
- return acc;
1742
- }
1743
- names.forEach(name => {
1744
- if (!acc[name]) {
1745
- row[name_column.key] = name;
1746
- acc[name] = row;
1747
- } else {
1748
- const accRow = acc[name];
1749
- Object.keys(row).forEach(key => {
1750
- if (key === completed_column.key || key === target_column.key) {
1751
- // in case of null
1752
- if (!row[key]) {
1753
- row[key] = 0;
1754
- }
1755
- if (!accRow[key]) {
1756
- accRow[key] = 0;
1757
- }
1758
- accRow[key] = accRow[key] + row[key];
1759
- }
1760
- });
1761
- }
1762
- });
1763
- return acc;
1764
- }, {});
1765
- summedSqlRows = Object.values(sumSqlRows);
1766
- } else {
1767
- const sumSqlRows = sqlRows.reduce((acc, row) => {
1768
- const nameValue = row[name_column.key];
1769
- if (!nameValue) {
1770
- row[name_column.key] = _intl.default.get('Empty');
1771
- acc[_intl.default.get('Empty')] = row;
1772
- return acc;
1773
- }
1774
- if (!acc[nameValue]) {
1775
- acc[nameValue] = row;
1776
- } else {
1777
- const accRow = acc[nameValue];
1778
- Object.keys(row).forEach(key => {
1779
- if (key === completed_column.key || key === target_column.key) {
1780
- accRow[key] = accRow[key] + row[key];
1781
- }
1782
- });
1783
- }
1784
- return acc;
1785
- }, {});
1786
- summedSqlRows = Object.values(sumSqlRows);
1787
- }
1788
- } else {
1789
- if (nameColumnDataAsAnArray) {
1790
- const sumSqlRows = sqlRows.reduce((acc, row) => {
1791
- const groupby = row[sqlColumnGroupByColumnKey];
1792
- const names = row[name_column.key];
1793
- if (!names) {
1794
- const key = "empty_".concat(groupby);
1795
- row[name_column.key] = _intl.default.get('Empty');
1796
- acc[key] = row;
1797
- return acc;
1798
- }
1799
- names.forEach(name => {
1800
- const key = "".concat(name, "_").concat(groupby);
1801
- if (!acc[key]) {
1802
- row[name_column.key] = name;
1803
- acc[key] = row;
1804
- } else {
1805
- const accRow = acc[key];
1806
- Object.keys(row).forEach(k => {
1807
- if (key === completed_column.key || key === target_column.key) {
1808
- accRow[key] = accRow[key] + row[key];
1809
- }
1810
- });
1811
- }
1812
- });
1813
- return acc;
1814
- }, {});
1815
- summedSqlRows = Object.values(sumSqlRows);
1816
- } else {
1817
- const sumSqlRows = sqlRows.reduce((acc, row) => {
1818
- const nameValue = row[name_column.key];
1819
- const groupby = row[sqlColumnGroupByColumnKey];
1820
- if (!nameValue) {
1821
- const key = "empty_".concat(groupby);
1822
- row[name_column.key] = _intl.default.get('Empty');
1823
- acc[key] = row;
1824
- return acc;
1825
- }
1826
- const key = "".concat(nameValue, "_").concat(groupby);
1827
- if (!acc[key]) {
1828
- acc[key] = row;
1829
- } else {
1830
- const accRow = acc[key];
1831
- Object.keys(row).forEach(key => {
1832
- if (key === completed_column.key || key === target_column.key) {
1833
- accRow[key] = accRow[key] + row[key];
1834
- }
1835
- });
1836
- }
1837
- return acc;
1838
- }, {});
1839
- summedSqlRows = Object.values(sumSqlRows);
1840
- }
1825
+ // group by name_column, so it can only have one value
1826
+ let originalSqlRows = (0, _lodashEs.cloneDeep)(sqlRows);
1827
+ if (nameColumnDataAsAnArray) {
1828
+ sqlRows.forEach(row => {
1829
+ var _row$name_column$key;
1830
+ row[name_column.key] = (_row$name_column$key = row[name_column.key]) === null || _row$name_column$key === void 0 ? void 0 : _row$name_column$key[0];
1831
+ });
1841
1832
  }
1842
-
1843
- // format the fetched value
1844
- _baseUtils.default.updateTableViewList(sqlRows, name_column, name_column.key, 'color', false, true);
1845
- if (sqlColumnGroupByColumnKey) _baseUtils.default.updateTableViewList(sqlRows, column_groupby_column, sqlColumnGroupByColumnKey, 'color', false, false);
1846
- summedSqlRows.forEach(row => {
1833
+ await _baseUtils.default.updateTableViewList(sqlRows, name_column, name_column.key, 'color', false, true);
1834
+ if (sqlColumnGroupbyColumnKey) await _baseUtils.default.updateTableViewList(sqlRows, column_groupby_column, sqlColumnGroupbyColumnKey, 'color', false, false);
1835
+ const res = [];
1836
+ sqlRows.forEach((row, index) => {
1847
1837
  const nameValue = row[name_column.key];
1848
- let targetValue;
1849
- let completedValue;
1850
- let groupby;
1851
- if (sqlColumnGroupByColumnKey) {
1852
- targetValue = row["SUM(".concat(target_column.name, ")")];
1853
- completedValue = row["SUM(".concat(completed_column.name, ")")];
1854
- groupby = row[sqlColumnGroupByColumnKey] || _intl.default.get('Empty');
1855
- } else {
1856
- completedValue = _SQLStatisticsUtils._get_completeness_name(row, completed_column);
1857
- targetValue = _SQLStatisticsUtils._get_completeness_name(row, target_column);
1858
- }
1838
+ const targetValue = row["SUM(".concat(target_column.name, ")")];
1839
+ const completedValue = row["SUM(".concat(completed_column.name, ")")];
1840
+ const groupby = row[sqlColumnGroupbyColumnKey] || _intl.default.get('Empty');
1859
1841
  let completedRate;
1860
1842
  if (!targetValue && completedValue) {
1861
1843
  completedRate = 100;
@@ -1873,7 +1855,8 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
1873
1855
  group_name: 'completed',
1874
1856
  groupby,
1875
1857
  color: row.color || _constants.CHART_STYLE_COLORS[0],
1876
- value: completedValue
1858
+ value: completedValue,
1859
+ rows: [originalSqlRows[index]]
1877
1860
  });
1878
1861
  res.push({
1879
1862
  name: nameValue,
@@ -1882,7 +1865,8 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
1882
1865
  value: Math.max(targetValue - completedValue, 0),
1883
1866
  groupby,
1884
1867
  color: '#bdbdbd',
1885
- completedRate
1868
+ completedRate,
1869
+ rows: [originalSqlRows[index]]
1886
1870
  });
1887
1871
  });
1888
1872
 
@@ -1894,9 +1878,29 @@ SQLStatisticsUtils.completenessSQlResult = (chart, sqlRows, chartSQLMap, tables)
1894
1878
  return 1;
1895
1879
  }
1896
1880
  });
1897
- return res;
1881
+
1882
+ // deduplicate by (name, group_name)
1883
+ const deduplicatedRes = [];
1884
+ const keyMap = {};
1885
+ res.forEach(item => {
1886
+ const key = "".concat(item.name, "_").concat(item.group_name);
1887
+ if (!keyMap[key]) {
1888
+ keyMap[key] = item;
1889
+ deduplicatedRes.push(item);
1890
+ } else {
1891
+ const existingItem = keyMap[key];
1892
+ existingItem.value = (existingItem.value || 0) + (item.value || 0);
1893
+ if (item.rows) {
1894
+ existingItem.rows = (existingItem.rows || []).concat(item.rows);
1895
+ }
1896
+ if (item.group_name === 'rest' && item.completedRate !== undefined) {
1897
+ existingItem.completedRate = item.completedRate;
1898
+ }
1899
+ }
1900
+ });
1901
+ return deduplicatedRes;
1898
1902
  };
1899
- SQLStatisticsUtils.scatterSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, columnMap, tables) => {
1903
+ SQLStatisticsUtils.scatterSQLResult2JavaScript = async (chart, sqlRows, chartSQLMap, columnMap, tables) => {
1900
1904
  const {
1901
1905
  sqlXColumnKey,
1902
1906
  sqlYColumnKey,
@@ -1910,13 +1914,13 @@ SQLStatisticsUtils.scatterSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, c
1910
1914
  // format sql rows
1911
1915
  const originalSqlRows = (0, _lodashEs.cloneDeep)(sqlRows);
1912
1916
  const isScatter = true;
1913
- _baseUtils.default.updateTableViewList(sqlRows, groupbyColumn, groupbyColumn.key, 'color', isScatter, true);
1914
- _baseUtils.default.updateTableViewList(sqlRows, summaryColumn, summaryColumn.key, 'color', isScatter, true);
1915
- if (sqlColumnGroupbyColumnKey) _baseUtils.default.updateTableViewList(sqlRows, columnGroupbyColumn, sqlColumnGroupbyColumnKey, 'color', isScatter, false);
1917
+ await _baseUtils.default.updateTableViewList(sqlRows, groupbyColumn, groupbyColumn.key, 'color', isScatter, true);
1918
+ await _baseUtils.default.updateTableViewList(sqlRows, summaryColumn, summaryColumn.key, 'color', isScatter, true);
1919
+ if (sqlColumnGroupbyColumnKey) await _baseUtils.default.updateTableViewList(sqlRows, columnGroupbyColumn, sqlColumnGroupbyColumnKey, 'color', isScatter, false);
1916
1920
  const res = [];
1917
1921
  sqlRows.forEach((row, index) => {
1918
- const xValue = row[sqlXColumnKey] ? '' + row[sqlXColumnKey] : _intl.default.get('Empty');
1919
- const yValue = row[sqlYColumnKey] ? '' + row[sqlYColumnKey] : _intl.default.get('Empty');
1922
+ const xValue = row[sqlXColumnKey];
1923
+ const yValue = row[sqlYColumnKey];
1920
1924
  const groupby = row[sqlColumnGroupbyColumnKey] ? '' + row[sqlColumnGroupbyColumnKey] : null;
1921
1925
  const originalSqlRow = originalSqlRows[index];
1922
1926
  const originalXValue = originalSqlRow[sqlXColumnKey];
@@ -1924,16 +1928,17 @@ SQLStatisticsUtils.scatterSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, c
1924
1928
  const originalGroupby = originalSqlRow[sqlColumnGroupbyColumnKey];
1925
1929
  res.push({
1926
1930
  name: xValue,
1927
- value: yValue,
1931
+ value: yValue !== null ? Number(yValue) : yValue,
1928
1932
  groupby,
1933
+ rows: [originalSqlRow],
1929
1934
  original_value: {
1930
- rows: [originalSqlRow],
1931
1935
  name: originalXValue,
1932
1936
  value: originalYValue,
1933
1937
  groupby: originalGroupby
1934
1938
  }
1935
1939
  });
1936
1940
  });
1941
+ _baseUtils.default.sortCharts(res, groupbyColumn, 'name');
1937
1942
  return res;
1938
1943
  };
1939
1944
  SQLStatisticsUtils.mapSQLResult2JavaScript = (chart, sqlRows, chartSQLMap, columnMap, tables) => {
@@ -8,7 +8,8 @@ exports.getColumnByKey = exports.getColorFromSingleSelectColumn = exports.format
8
8
  exports.getColumnOptions = getColumnOptions;
9
9
  exports.getFormattedValue = exports.getDateColumnFormat = void 0;
10
10
  exports.getSelectColumnOptions = getSelectColumnOptions;
11
- exports.sortDataByGroupSum = exports.islinkDateFormula = exports.isWorldMapColumn = exports.isStatisticWorldMapColumn = exports.isStatisticMirrorColumn = exports.isStatisticMapColumn = exports.isMapColumn = exports.isCheckboxColumn = exports.getSummaryResult = exports.getSqlGroup = void 0;
11
+ exports.sortDataByGroupSum = exports.isWorldMapColumn = exports.isStatisticWorldMapColumn = exports.isStatisticMirrorColumn = exports.isStatisticMapColumn = exports.isMapColumn = exports.isDateFormulaColumn = exports.isDateColumn = exports.isCheckboxColumn = exports.getSummaryResult = exports.getSqlGroup = void 0;
12
+ var _DTableColumnIcon2 = _interopRequireDefault(require("dtable-ui-component/lib/DTableColumnIcon"));
12
13
  var _dtableUtils = require("dtable-utils");
13
14
  var _react = _interopRequireDefault(require("react"));
14
15
  var _constants = require("../constants");
@@ -189,30 +190,42 @@ const isStatisticMirrorColumn = column => {
189
190
  return _constants.MIRROR_COLUMN_LIST.includes(column.type);
190
191
  };
191
192
  exports.isStatisticMirrorColumn = isStatisticMirrorColumn;
192
- const islinkDateFormula = column => {
193
+ const isDateFormulaColumn = column => {
193
194
  if (column) {
194
195
  const {
195
196
  type,
196
197
  data
197
198
  } = column;
198
199
  const {
199
- array_type
200
+ array_type,
201
+ result_type
200
202
  } = data || {};
201
- if (type === 'link-formula' && array_type === 'date') return true;
203
+ // formula or link formula
204
+ if (type === 'link-formula' && array_type === 'date' || type === 'formula' && result_type === _dtableUtils.FORMULA_RESULT_TYPE.DATE) return true;
205
+ }
206
+ return false;
207
+ };
208
+ exports.isDateFormulaColumn = isDateFormulaColumn;
209
+ const isDateColumn = column => {
210
+ if (column) {
211
+ const {
212
+ type
213
+ } = column;
214
+ return type === _dtableUtils.CellType.CTIME || type === _dtableUtils.CellType.MTIME || type === _dtableUtils.CellType.DATE;
202
215
  }
203
216
  return false;
204
217
  };
205
218
 
206
219
  // get
207
- exports.islinkDateFormula = islinkDateFormula;
220
+ exports.isDateColumn = isDateColumn;
208
221
  function getColumnOptions(columns) {
209
222
  return columns.map(column => {
210
223
  return {
211
224
  value: column,
212
225
  label: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
213
226
  className: "sea-chart-column-icon"
214
- }, /*#__PURE__*/_react.default.createElement("i", {
215
- className: _dtableUtils.COLUMNS_ICON_CONFIG[column.type]
227
+ }, /*#__PURE__*/_react.default.createElement(_DTableColumnIcon2.default, {
228
+ column: column
216
229
  })), /*#__PURE__*/_react.default.createElement("span", {
217
230
  className: 'select-module select-module-name ml-0'
218
231
  }, column.name))
@@ -4,8 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.settingsContext = exports.GlobalThemeContext = exports.DepartmentsContext = void 0;
7
+ exports.settingsContext = exports.GlobalThemeContext = exports.FirstDayOfWeekContext = exports.DepartmentsContext = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  const settingsContext = exports.settingsContext = /*#__PURE__*/_react.default.createContext('');
10
10
  const DepartmentsContext = exports.DepartmentsContext = /*#__PURE__*/_react.default.createContext([]);
11
- const GlobalThemeContext = exports.GlobalThemeContext = /*#__PURE__*/_react.default.createContext({});
11
+ const GlobalThemeContext = exports.GlobalThemeContext = /*#__PURE__*/_react.default.createContext({});
12
+ const FirstDayOfWeekContext = exports.FirstDayOfWeekContext = /*#__PURE__*/_react.default.createContext({
13
+ firstDayOfWeek: 'Sunday'
14
+ });