dtable-statistic 4.0.2-test-2

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 (210) hide show
  1. package/README.md +3 -0
  2. package/es/api/dtable-db-api.js +43 -0
  3. package/es/assets/css/color-picker.css +53 -0
  4. package/es/assets/css/color-rules-popover.css +144 -0
  5. package/es/assets/css/color-theme-dialog.css +40 -0
  6. package/es/assets/css/dashboard.css +562 -0
  7. package/es/assets/css/dialog.css +415 -0
  8. package/es/assets/css/mobile-dashboard.module.css +91 -0
  9. package/es/assets/css/slider.css +77 -0
  10. package/es/assets/css/statistic-chart.module.css +11 -0
  11. package/es/assets/css/statistic-custom-title.module.css +3 -0
  12. package/es/assets/css/statistic-custom.module.css +4 -0
  13. package/es/assets/css/statistic-numeric-column-item.module.css +43 -0
  14. package/es/assets/css/statistic-time-picker.module.css +21 -0
  15. package/es/assets/css/theme.css +61 -0
  16. package/es/assets/images/icon.png +0 -0
  17. package/es/calculator/base-calculator.js +111 -0
  18. package/es/calculator/basic-chart-calculator.js +571 -0
  19. package/es/calculator/combination-calculator.js +296 -0
  20. package/es/calculator/compare-bar-calculator.js +291 -0
  21. package/es/calculator/completeness-calculator.js +307 -0
  22. package/es/calculator/copy-value.js +47 -0
  23. package/es/calculator/dashboard-calculator.js +146 -0
  24. package/es/calculator/heat-map-calculator.js +225 -0
  25. package/es/calculator/horizontal-bar-calculator.js +100 -0
  26. package/es/calculator/index.js +88 -0
  27. package/es/calculator/map-calculator.js +169 -0
  28. package/es/calculator/mirror-calculator.js +217 -0
  29. package/es/calculator/number-card-calculator.js +135 -0
  30. package/es/calculator/pivot-table-calculator.js +810 -0
  31. package/es/calculator/scatter-calculator.js +150 -0
  32. package/es/calculator/thread-manager.js +70 -0
  33. package/es/calculator/trend-calculator.js +204 -0
  34. package/es/calculator/workers/basic-chart-calculator-worker.js +410 -0
  35. package/es/calculator/workers/calculator.worker.js +22 -0
  36. package/es/calculator/workers/card-calculator-worker.js +28 -0
  37. package/es/calculator/workers/combination-calculator-worker.js +257 -0
  38. package/es/calculator/workers/compare-bar-chart-calculator-worker.js +149 -0
  39. package/es/calculator/workers/completeness-calculator-worker.js +153 -0
  40. package/es/calculator/workers/dashboard-calculator-worker.js +56 -0
  41. package/es/calculator/workers/mirror-calculator-worker.js +132 -0
  42. package/es/calculator/workers/pivot-table-calculator-worker.js +615 -0
  43. package/es/calculator/workers/scatter-calculator-worker.js +67 -0
  44. package/es/calculator/workers/trend-calculator-worker.js +93 -0
  45. package/es/calculator/world-map-calculator.js +193 -0
  46. package/es/components/common-add-tool.js +19 -0
  47. package/es/components/dialog/chart-addition-edit-dialog.js +89 -0
  48. package/es/components/dialog/chart-addition-widgets/chart-selector.js +261 -0
  49. package/es/components/dialog/chart-addition-widgets/statistic-chart-selector.module.css +74 -0
  50. package/es/components/dialog/color-theme-dialog.js +71 -0
  51. package/es/components/dialog/enlarged-chart-dialog.js +73 -0
  52. package/es/components/dialog/new-table-dialog.js +113 -0
  53. package/es/components/dialog/new-view-dialog.js +87 -0
  54. package/es/components/dialog/rename-view-dialog.js +87 -0
  55. package/es/components/dialog/statistic-record-dialog/index.css +114 -0
  56. package/es/components/dialog/statistic-record-dialog/index.js +174 -0
  57. package/es/components/dialog/table-select-dialog.js +93 -0
  58. package/es/components/dropdown-menu/statistic-dropdown-menu.js +94 -0
  59. package/es/components/dtable-popover.js +109 -0
  60. package/es/components/dtable-search-input.js +137 -0
  61. package/es/components/dtable-select.js +104 -0
  62. package/es/components/index.js +11 -0
  63. package/es/components/loading.js +8 -0
  64. package/es/components/modal-portal.js +36 -0
  65. package/es/components/popover/color-rules/color-rule.js +179 -0
  66. package/es/components/popover/color-rules/index.js +87 -0
  67. package/es/components/popover/color-rules/rule-filters/filter.js +214 -0
  68. package/es/components/popover/color-rules/rule-filters/index.css +214 -0
  69. package/es/components/popover/color-rules/rule-filters/index.js +97 -0
  70. package/es/components/popover/color-rules/rule-filters/number-input.js +85 -0
  71. package/es/components/popover/color-rules-popover.js +213 -0
  72. package/es/components/popover/color-selector-popover.js +85 -0
  73. package/es/components/seatable-radio/index.css +51 -0
  74. package/es/components/seatable-radio/index.js +28 -0
  75. package/es/components/select/index.js +2 -0
  76. package/es/components/select/option-group.css +104 -0
  77. package/es/components/select/option-group.js +225 -0
  78. package/es/components/select/option.js +51 -0
  79. package/es/components/select/select.css +211 -0
  80. package/es/components/select/select.js +157 -0
  81. package/es/components/toast/alert.js +130 -0
  82. package/es/components/toast/index.js +3 -0
  83. package/es/components/toast/toast.js +164 -0
  84. package/es/components/toast/toastManager.js +150 -0
  85. package/es/components/toast/toaster.js +64 -0
  86. package/es/constants/color-rules.js +8 -0
  87. package/es/constants/dtable-select-style.js +61 -0
  88. package/es/constants/event-types.js +1 -0
  89. package/es/constants/index.js +501 -0
  90. package/es/constants/key-codes.js +102 -0
  91. package/es/constants/zIndexes.js +1 -0
  92. package/es/custom-g2.js +614 -0
  93. package/es/dashboard.js +408 -0
  94. package/es/desktop-dashboard.js +299 -0
  95. package/es/index.js +33 -0
  96. package/es/locale/index.js +17 -0
  97. package/es/locale/lang/de.js +237 -0
  98. package/es/locale/lang/en.js +237 -0
  99. package/es/locale/lang/fr.js +237 -0
  100. package/es/locale/lang/zh_CN.js +237 -0
  101. package/es/mobile-dashboard.js +103 -0
  102. package/es/model/collaborators.js +11 -0
  103. package/es/model/stat-item.js +340 -0
  104. package/es/model/statistic-dashboard.js +8 -0
  105. package/es/service/chart-service.js +192 -0
  106. package/es/service/dashboard-service.js +415 -0
  107. package/es/stat-editor/chart-name-editor.js +75 -0
  108. package/es/stat-editor/index.js +74 -0
  109. package/es/stat-editor/stat-settings/advance-chart-settings/basic-number-card-settings.js +149 -0
  110. package/es/stat-editor/stat-settings/advance-chart-settings/combination-settings.js +415 -0
  111. package/es/stat-editor/stat-settings/advance-chart-settings/dashboard-chart-settings.js +193 -0
  112. package/es/stat-editor/stat-settings/advance-chart-settings/geo-granularity-settings.js +13 -0
  113. package/es/stat-editor/stat-settings/advance-chart-settings/heat-map-settings.js +107 -0
  114. package/es/stat-editor/stat-settings/advance-chart-settings/index.js +332 -0
  115. package/es/stat-editor/stat-settings/advance-chart-settings/map-settings.js +170 -0
  116. package/es/stat-editor/stat-settings/advance-chart-settings/mirror-settings.js +141 -0
  117. package/es/stat-editor/stat-settings/advance-chart-settings/style-setting/combination-style-setting.js +219 -0
  118. package/es/stat-editor/stat-settings/advance-chart-settings/style-setting/heat-map-settings.js +89 -0
  119. package/es/stat-editor/stat-settings/advance-chart-settings/style-setting/map-setting.js +132 -0
  120. package/es/stat-editor/stat-settings/advance-chart-settings/summary-settings.js +319 -0
  121. package/es/stat-editor/stat-settings/advance-chart-settings/trend-chart-settings.js +138 -0
  122. package/es/stat-editor/stat-settings/advance-chart-settings/world-map-settings.js +135 -0
  123. package/es/stat-editor/stat-settings/basic-chart-settings/advance-bar-chart-settings.js +156 -0
  124. package/es/stat-editor/stat-settings/basic-chart-settings/bar-settings.js +147 -0
  125. package/es/stat-editor/stat-settings/basic-chart-settings/completeness-chart-settings.js +195 -0
  126. package/es/stat-editor/stat-settings/basic-chart-settings/custom-bar-settings.js +126 -0
  127. package/es/stat-editor/stat-settings/basic-chart-settings/groupby-settings.js +169 -0
  128. package/es/stat-editor/stat-settings/basic-chart-settings/horizontal-axis-group-settings.js +352 -0
  129. package/es/stat-editor/stat-settings/basic-chart-settings/horizontal-bar-settings.js +145 -0
  130. package/es/stat-editor/stat-settings/basic-chart-settings/horizontal-group-chart-settings.js +153 -0
  131. package/es/stat-editor/stat-settings/basic-chart-settings/index.js +466 -0
  132. package/es/stat-editor/stat-settings/basic-chart-settings/pie-settings.js +183 -0
  133. package/es/stat-editor/stat-settings/basic-chart-settings/pivot-table-settings.js +542 -0
  134. package/es/stat-editor/stat-settings/basic-chart-settings/scatter-settings.js +111 -0
  135. package/es/stat-editor/stat-settings/basic-chart-settings/stack-item-settings.js +86 -0
  136. package/es/stat-editor/stat-settings/basic-chart-settings/stacks-settings.js +169 -0
  137. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/bar-chart-style-setting.js +273 -0
  138. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/completeness-style.js +105 -0
  139. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/horizontal-bar-chart-style.js +243 -0
  140. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/label-font-size-editor.js +65 -0
  141. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/pie-chart-style-settings.js +318 -0
  142. package/es/stat-editor/stat-settings/basic-chart-settings/style-setting/time-compare-style.js +49 -0
  143. package/es/stat-editor/stat-settings/basic-chart-settings/summary-method-setting.js +124 -0
  144. package/es/stat-editor/stat-settings/basic-chart-settings/summary-settings.js +150 -0
  145. package/es/stat-editor/stat-settings/basic-chart-settings/time-comparison-settings.js +267 -0
  146. package/es/stat-editor/stat-settings/basic-chart-settings/timer-picker.js +109 -0
  147. package/es/stat-editor/stat-settings/basic-chart-settings/y-axis-group-settings.js +351 -0
  148. package/es/stat-editor/stat-settings/color-setting/color-group-selector.js +60 -0
  149. package/es/stat-editor/stat-settings/color-setting/color-picker.js +129 -0
  150. package/es/stat-editor/stat-settings/color-setting/color-use-type-selector.js +348 -0
  151. package/es/stat-editor/stat-settings/public-setting/axis-label-position-setting.js +102 -0
  152. package/es/stat-editor/stat-settings/public-setting/base-settings.js +124 -0
  153. package/es/stat-editor/stat-settings/public-setting/calender.js +124 -0
  154. package/es/stat-editor/stat-settings/public-setting/column-settings.js +15 -0
  155. package/es/stat-editor/stat-settings/public-setting/custom-title-setting.js +60 -0
  156. package/es/stat-editor/stat-settings/public-setting/data-sort-setting.js +57 -0
  157. package/es/stat-editor/stat-settings/public-setting/ind-toggle-setting.js +41 -0
  158. package/es/stat-editor/stat-settings/public-setting/min-max-setting.js +64 -0
  159. package/es/stat-editor/stat-settings/public-setting/numeric-summary-item.js +118 -0
  160. package/es/stat-editor/stat-settings/public-setting/toggle-setting.js +39 -0
  161. package/es/stat-list/chart-preview.js +139 -0
  162. package/es/stat-list/index.js +275 -0
  163. package/es/stat-view/area-chart.js +521 -0
  164. package/es/stat-view/bar-chart.js +568 -0
  165. package/es/stat-view/base-chart.js +44 -0
  166. package/es/stat-view/basic-number-card.js +255 -0
  167. package/es/stat-view/combination-chart.js +558 -0
  168. package/es/stat-view/compare-chart.js +485 -0
  169. package/es/stat-view/completeness-chart.js +389 -0
  170. package/es/stat-view/custom-bar.js +433 -0
  171. package/es/stat-view/dashboard-chart.js +317 -0
  172. package/es/stat-view/heat-map.js +501 -0
  173. package/es/stat-view/horizontal-bar-chart.js +569 -0
  174. package/es/stat-view/index.js +183 -0
  175. package/es/stat-view/line-chart.js +505 -0
  176. package/es/stat-view/map.js +428 -0
  177. package/es/stat-view/mirror.js +285 -0
  178. package/es/stat-view/pie-chart.js +326 -0
  179. package/es/stat-view/pivot-table/index.js +206 -0
  180. package/es/stat-view/pivot-table/one-dimension-table-no-numeric-columns.js +133 -0
  181. package/es/stat-view/pivot-table/one-dimension-table-with-numeric-columns.js +164 -0
  182. package/es/stat-view/pivot-table/statistic-pivot-table.module.css +132 -0
  183. package/es/stat-view/pivot-table/two-dimension-table.js +344 -0
  184. package/es/stat-view/ring-chart.js +416 -0
  185. package/es/stat-view/scatter-chart.js +367 -0
  186. package/es/stat-view/treemap-chart.js +318 -0
  187. package/es/stat-view/trend-chart.js +299 -0
  188. package/es/stat-view/world-map.js +443 -0
  189. package/es/tabs/index.js +252 -0
  190. package/es/tabs/statistic-tabs.module.css +154 -0
  191. package/es/tabs/tab.js +167 -0
  192. package/es/utils/basic-chart-utils.js +24 -0
  193. package/es/utils/cell-format.js +110 -0
  194. package/es/utils/cell-value.js +27 -0
  195. package/es/utils/collaborator.js +31 -0
  196. package/es/utils/color-utils.js +112 -0
  197. package/es/utils/column-utils.js +18 -0
  198. package/es/utils/column.js +13 -0
  199. package/es/utils/common-utils.js +303 -0
  200. package/es/utils/date-format.js +65 -0
  201. package/es/utils/export-table-utils.js +632 -0
  202. package/es/utils/index.js +26 -0
  203. package/es/utils/object.js +26 -0
  204. package/es/utils/row-utils.js +115 -0
  205. package/es/utils/search.js +67 -0
  206. package/es/utils/sql-utils.js +293 -0
  207. package/es/utils/stat-utils.js +353 -0
  208. package/es/utils/trend-utils.js +136 -0
  209. package/index.js +1 -0
  210. package/package.json +188 -0
@@ -0,0 +1,615 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
+ import { FORMULA_COLUMN_TYPES_MAP, isNumber, TableUtils, Views, isDateColumn, isNumericColumn } from 'dtable-store';
4
+ import { SUMMARY_TYPE } from '../../constants';
5
+ import { isArrayCellValue } from '../../utils/common-utils';
6
+ import { getFormattedLabel, isValidRow } from '../../utils/row-utils';
7
+ import StatUtils from '../../utils/stat-utils';
8
+ export default function calculateStatItem(chart, value, username, userId) {
9
+ var groupby_column_key = chart.groupby_column_key,
10
+ column_groupby_column_key = chart.column_groupby_column_key;
11
+ if (!groupby_column_key) {
12
+ return {};
13
+ }
14
+ if (!column_groupby_column_key) {
15
+ return calculateOneDimensionTable(chart, value, username, userId);
16
+ }
17
+ return calculateTwoDimensionTable(chart, value, username, userId);
18
+ }
19
+ function calculateOneDimensionTable(chart, value, username, userId) {
20
+ var table_id = chart.table_id,
21
+ view_id = chart.view_id,
22
+ summary_type = chart.summary_type,
23
+ summary_method = chart.summary_method,
24
+ summary_column_key = chart.summary_column_key,
25
+ groupby_column_key = chart.groupby_column_key,
26
+ include_empty = chart.groupby_include_empty_cells,
27
+ groupby_date_granularity = chart.groupby_date_granularity,
28
+ groupby_geolocation_granularity = chart.groupby_geolocation_granularity,
29
+ summary_columns_option = chart.summary_columns_option;
30
+ var table = TableUtils.getTableById(value.tables, table_id);
31
+ var view = table && Views.getViewById(table.views, view_id);
32
+ var column = TableUtils.getTableColumnByKey(table, groupby_column_key);
33
+ if (!column) return {};
34
+ var isColumnDataAsAnArray = isArrayCellValue(column);
35
+ var statRows = Views.getViewRows(view, table, value, username, userId);
36
+ var formulaRows = Views.getTableFormulaResults(table, statRows, value);
37
+ var pivot_rows = [];
38
+ statRows.forEach(function (row) {
39
+ var rowId = row._id;
40
+ var formulaRow = formulaRows[rowId];
41
+ if (isValidRow(row, formulaRow, column, include_empty)) {
42
+ var name = StatUtils.getGroupLabel(row[column.key], formulaRow, column, groupby_date_granularity, groupby_geolocation_granularity, value);
43
+ var pivotRowIndex;
44
+ if (isColumnDataAsAnArray) {
45
+ if (name.length === 0 && include_empty) {
46
+ var _pivotRowIndex = pivot_rows.findIndex(function (r) {
47
+ return !r.name;
48
+ });
49
+ updateOneDimensionRows(pivot_rows, _pivotRowIndex, null, row);
50
+ } else {
51
+ name.forEach(function (n) {
52
+ pivotRowIndex = pivot_rows.findIndex(function (r) {
53
+ return n === r.name;
54
+ });
55
+ updateOneDimensionRows(pivot_rows, pivotRowIndex, n, row);
56
+ });
57
+ }
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;
62
+ });
63
+ updateOneDimensionRows(pivot_rows, pivotRowIndex, name, row);
64
+ }
65
+ }
66
+ });
67
+ var summary_columns_option_keys = Array.isArray(summary_columns_option) ? summary_columns_option.map(function (option) {
68
+ return option.key;
69
+ }) : [];
70
+ var statisticColumnKeys = [summary_column_key].concat(_toConsumableArray(summary_columns_option_keys));
71
+ var validStatisticColumnKeys = statisticColumnKeys;
72
+ var statisticColumns = validStatisticColumnKeys.map(function (key) {
73
+ var column = TableUtils.getTableColumnByKey(table, key);
74
+ return column ? _objectSpread({}, column) : null;
75
+ }).filter(Boolean);
76
+ if (statisticColumns.length > 1) {
77
+ statisticColumns[0].method = summary_method;
78
+ Array.isArray(summary_columns_option) && summary_columns_option.forEach(function (option, index) {
79
+ if (statisticColumns[index + 1]) {
80
+ statisticColumns[index + 1].method = option.method;
81
+ }
82
+ });
83
+ }
84
+ var _getOneDimensionTotal = getOneDimensionTotal(statisticColumns, summary_type, summary_method, formulaRows, pivot_rows),
85
+ pivot_columns_total = _getOneDimensionTotal.pivot_columns_total;
86
+ StatUtils.sortStatistics(pivot_rows, column, 'name');
87
+ var pivot_columns = summary_type === SUMMARY_TYPE.COUNT ? [] : statisticColumns.map(function (column) {
88
+ return {
89
+ key: column.key,
90
+ method: column.method
91
+ };
92
+ }).filter(function (item) {
93
+ return TableUtils.getTableColumnByKey(table, item.key);
94
+ });
95
+ pivot_rows.forEach(function (row) {
96
+ row.name = getFormattedLabel(column, row.name, value.collaborators);
97
+ });
98
+ return {
99
+ pivot_columns_total: pivot_columns_total,
100
+ pivot_rows: pivot_rows,
101
+ pivot_columns: pivot_columns
102
+ };
103
+ }
104
+ function updateOneDimensionRows(pivot_rows, index, name, row) {
105
+ if (index > -1) {
106
+ var updatedPivotRow = pivot_rows[index];
107
+ updatedPivotRow.rows.push(row);
108
+ pivot_rows[index] = updatedPivotRow;
109
+ } else {
110
+ var _updatedPivotRow = {
111
+ name: name,
112
+ rows: [row]
113
+ };
114
+ pivot_rows.push(_updatedPivotRow);
115
+ }
116
+ }
117
+ function getOneDimensionTotal(columns, summary_type, summary_method, formula_rows) {
118
+ var statResult = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
119
+ var pivot_columns_total = {};
120
+ var dateColumnsTotalArr = {};
121
+ if (Array.isArray(columns) && columns.length > 0) {
122
+ columns.forEach(function (column) {
123
+ if (column && isDateColumn(column)) {
124
+ dateColumnsTotalArr[column.key] = [];
125
+ }
126
+ });
127
+ }
128
+ Array.isArray(statResult) && statResult.forEach(function (item, index) {
129
+ var rows = item.rows;
130
+ var updated = _objectSpread({}, item);
131
+ var totalMap = {};
132
+ if (summary_type === SUMMARY_TYPE.COUNT) {
133
+ totalMap['total'] = rows.length;
134
+ pivot_columns_total.total = (pivot_columns_total['total'] || 0) + rows.length;
135
+ } else {
136
+ if (Array.isArray(columns)) {
137
+ if (columns.length === 1) {
138
+ var summaryColumn = columns[0];
139
+ var key = summaryColumn.key;
140
+ var total = getTotal(summaryColumn, summary_type, summary_method, rows, formula_rows);
141
+ if (summaryColumn && isDateColumn(summaryColumn)) {
142
+ totalMap['total'] = total === 0 ? 0 : total.date;
143
+ if (total != 0) {
144
+ dateColumnsTotalArr[key].push(total);
145
+ }
146
+ if (summary_method === 'Max') {
147
+ pivot_columns_total['total'] = dateColumnsTotalArr[key].length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnsTotalArr[key], 'Max').date;
148
+ } else if (summary_method === 'Min') {
149
+ pivot_columns_total['total'] = dateColumnsTotalArr[key].length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnsTotalArr[key], 'Min').date;
150
+ }
151
+ } else {
152
+ var validTotal = total ? total - 0 : 0;
153
+ totalMap['total'] = validTotal;
154
+ var pivotColumnTotal = (pivot_columns_total['total'] ? pivot_columns_total['total'] - 0 : 0) + validTotal;
155
+ pivot_columns_total['total'] = Number.parseFloat(pivotColumnTotal.toFixed(8));
156
+ }
157
+ } else {
158
+ columns.forEach(function (column) {
159
+ var key = column.key,
160
+ method = column.method;
161
+ var total = getTotal(column, summary_type, method, rows, formula_rows);
162
+ if (column && isDateColumn(column)) {
163
+ totalMap[key + method] = total === 0 ? 0 : total.date;
164
+ if (total != 0) {
165
+ dateColumnsTotalArr[key].push(total);
166
+ }
167
+ if (method === 'Max') {
168
+ pivot_columns_total[key + method] = dateColumnsTotalArr[key].length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnsTotalArr[key], 'Max').date;
169
+ } else if (method === 'Min') {
170
+ pivot_columns_total[key + method] = dateColumnsTotalArr[key].length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnsTotalArr[key], 'Min').date;
171
+ }
172
+ } else {
173
+ var _validTotal = total ? total - 0 : 0;
174
+ totalMap[key + method] = _validTotal;
175
+ var _pivotColumnTotal = (pivot_columns_total[key + method] ? pivot_columns_total[key + method] - 0 : 0) + _validTotal;
176
+ pivot_columns_total[key + method] = Number.parseFloat(_pivotColumnTotal.toFixed(8));
177
+ }
178
+ });
179
+ }
180
+ }
181
+ }
182
+ updated.total = totalMap;
183
+ statResult[index] = updated;
184
+ });
185
+ return {
186
+ pivot_columns_total: pivot_columns_total
187
+ };
188
+ }
189
+ function calculateTwoDimensionTable(chart, value, username, userId) {
190
+ var table_id = chart.table_id,
191
+ view_id = chart.view_id,
192
+ summary_type = chart.summary_type,
193
+ summary_method = chart.summary_method,
194
+ summary_column_key = chart.summary_column_key,
195
+ groupby_column_key = chart.groupby_column_key,
196
+ include_empty = chart.groupby_include_empty_cells,
197
+ groupby_date_granularity = chart.groupby_date_granularity,
198
+ groupby_geolocation_granularity = chart.groupby_geolocation_granularity,
199
+ column_groupby_column_key = chart.column_groupby_column_key,
200
+ column_groupby_date_granularity = chart.column_groupby_date_granularity,
201
+ column_groupby_geolocation_granularity = chart.column_groupby_geolocation_granularity,
202
+ summary_columns_option = chart.summary_columns_option;
203
+ var table = TableUtils.getTableById(value.tables, table_id);
204
+ var view = table && Views.getViewById(table.views, view_id);
205
+ if (!view) return;
206
+ var groupbyColumn = TableUtils.getTableColumnByKey(table, groupby_column_key);
207
+ if (!groupbyColumn) return;
208
+ var isGroupbyColumnDataAsAnArray = isArrayCellValue(groupbyColumn);
209
+ var rowGroupbyColumn = TableUtils.getTableColumnByKey(table, column_groupby_column_key);
210
+ if (!rowGroupbyColumn) {
211
+ return calculateOneDimensionTable(chart, value);
212
+ }
213
+ var isRowGroupbyColumnDataAsAnArray = isArrayCellValue(rowGroupbyColumn);
214
+ var summaryColumn = TableUtils.getTableColumnByKey(table, summary_column_key);
215
+ var statRows = Views.getViewRows(view, table, value, username, userId);
216
+ var formulaRows = Views.getTableFormulaResults(table, statRows, value);
217
+ var pivot_summary_multiple_columns = [];
218
+ summary_columns_option.forEach(function (item) {
219
+ var column = TableUtils.getTableColumnByKey(table, item.key);
220
+ if (column && isNumericColumn(column)) {
221
+ pivot_summary_multiple_columns.push({
222
+ key: item.key,
223
+ type: column.type,
224
+ method: item.method,
225
+ column_name: column.name
226
+ });
227
+ }
228
+ });
229
+
230
+ // [{key: null}, {key: cell_value}, {key: cell_value}, ...]
231
+ var pivot_columns = [];
232
+
233
+ // [
234
+ // {
235
+ // name: '',
236
+ // cells: {
237
+ // [key1]: {rows: [], total: ''},
238
+ // [key2]: {rows: [], total: ''},
239
+ // [key3]: {rows: [], total: ''},
240
+ // }
241
+ // },
242
+ // ...
243
+ // ]
244
+ var pivot_rows = [];
245
+ statRows.forEach(function (row) {
246
+ var rowId = row._id;
247
+ var formulaRow = formulaRows[rowId];
248
+ var cellValueForColumn = StatUtils.getGroupLabel(row[rowGroupbyColumn.key], formulaRow, rowGroupbyColumn, column_groupby_date_granularity, column_groupby_geolocation_granularity, value);
249
+ if (isValidRow(row, formulaRow, rowGroupbyColumn, include_empty)) {
250
+ updateTwoDimensionColumns(value, pivot_columns, rowGroupbyColumn, row, formulaRow, include_empty, column_groupby_date_granularity, column_groupby_geolocation_granularity, isRowGroupbyColumnDataAsAnArray);
251
+ }
252
+ if (isValidRow(row, formulaRow, groupbyColumn, include_empty)) {
253
+ var name = StatUtils.getGroupLabel(row[groupbyColumn.key], formulaRow, groupbyColumn, groupby_date_granularity, groupby_geolocation_granularity, value);
254
+ var pivotRowIndex;
255
+ if (isGroupbyColumnDataAsAnArray) {
256
+ if (name.length === 0 && include_empty) {
257
+ var _pivotRowIndex2 = pivot_rows.findIndex(function (r) {
258
+ return !r.name;
259
+ });
260
+ updateTwoDimensionRows(pivot_rows, pivot_columns, _pivotRowIndex2, null, row, isRowGroupbyColumnDataAsAnArray, cellValueForColumn);
261
+ } else {
262
+ name.forEach(function (n) {
263
+ pivotRowIndex = pivot_rows.findIndex(function (r) {
264
+ return n === r.name;
265
+ });
266
+ updateTwoDimensionRows(pivot_rows, pivot_columns, pivotRowIndex, n, row, isRowGroupbyColumnDataAsAnArray, cellValueForColumn);
267
+ });
268
+ }
269
+ } else {
270
+ pivotRowIndex = pivot_rows.findIndex(function (r) {
271
+ var resName = r.name;
272
+ return resName === null && name === null || resName === undefined && name === undefined || resName === 0 && name === 0 || resName === name;
273
+ });
274
+ updateTwoDimensionRows(pivot_rows, pivot_columns, pivotRowIndex, name, row, isRowGroupbyColumnDataAsAnArray, cellValueForColumn);
275
+ }
276
+ }
277
+ });
278
+ var _getTwoDimensionTotal = getTwoDimensionTotal(summaryColumn, summary_type, summary_method, formulaRows, pivot_rows, pivot_columns),
279
+ pivot_columns_total = _getTwoDimensionTotal.pivot_columns_total,
280
+ pivot_table_total = _getTwoDimensionTotal.pivot_table_total;
281
+ StatUtils.sortStatistics(pivot_rows, groupbyColumn, 'name');
282
+ StatUtils.sortStatistics(pivot_columns, rowGroupbyColumn, 'key');
283
+
284
+ // format shown label(name)
285
+ var map = {};
286
+ pivot_columns.forEach(function (column) {
287
+ var name = getFormattedLabel(rowGroupbyColumn, column.key, value.collaborators);
288
+ map[column.key] = name;
289
+ column.key = name;
290
+ });
291
+ pivot_rows.forEach(function (row) {
292
+ row.name = getFormattedLabel(groupbyColumn, row.name, value.collaborators);
293
+ var cells = {};
294
+ Object.keys(row.cells).forEach(function (key) {
295
+ cells[map[key]] = row.cells[key];
296
+ });
297
+ row.cells = cells;
298
+ });
299
+ var new_pivot_columns_total = {};
300
+ Object.keys(pivot_columns_total).forEach(function (key) {
301
+ new_pivot_columns_total[map[key]] = pivot_columns_total[key];
302
+ });
303
+ return {
304
+ pivot_rows: pivot_rows,
305
+ pivot_columns: pivot_columns,
306
+ pivot_columns_total: new_pivot_columns_total,
307
+ pivot_table_total: pivot_table_total,
308
+ pivot_summary_multiple_columns: pivot_summary_multiple_columns,
309
+ formulaRows: formulaRows
310
+ };
311
+ }
312
+ function updateTwoDimensionColumns(value, pivot_columns, column, row, formulaRow, isIncludeEmpty, dateGranularity, geolocationGranularity, isRowGroupbyColumnDataAsAnArray) {
313
+ var key = StatUtils.getGroupLabel(row[column.key], formulaRow, column, dateGranularity, geolocationGranularity, value);
314
+ var pivotColumnIndex;
315
+ if (isRowGroupbyColumnDataAsAnArray) {
316
+ if (key.length === 0 && isIncludeEmpty) {
317
+ pivotColumnIndex = pivot_columns.findIndex(function (r) {
318
+ return !r.key;
319
+ });
320
+ if (pivotColumnIndex < 0) {
321
+ pivot_columns.unshift({
322
+ key: null
323
+ });
324
+ }
325
+ } else {
326
+ key.forEach(function (k) {
327
+ pivotColumnIndex = pivot_columns.findIndex(function (r) {
328
+ return r.key === k;
329
+ });
330
+ if (pivotColumnIndex < 0) {
331
+ pivot_columns.push({
332
+ key: k
333
+ });
334
+ }
335
+ });
336
+ }
337
+ } else {
338
+ pivotColumnIndex = pivot_columns.findIndex(function (r) {
339
+ var resKey = r.key;
340
+ return resKey === null && key === null || resKey === undefined && key === undefined || resKey === 0 && key === 0 || resKey === key;
341
+ });
342
+ if (pivotColumnIndex < 0) {
343
+ pivot_columns.push({
344
+ key: key
345
+ });
346
+ }
347
+ }
348
+ }
349
+ function updateTwoDimensionRows(pivot_rows, pivot_columns, index, name, row, isColumnDataAsAnArray, cellValue) {
350
+ if (index > -1) {
351
+ var updatedPivotRow = pivot_rows[index];
352
+ var cells = updatedPivotRow.cells;
353
+ pivot_columns.forEach(function (c) {
354
+ var key = c.key;
355
+ if (isSameGroup(isColumnDataAsAnArray, cellValue, key)) {
356
+ if (cells[key]) {
357
+ cells[key].rows.push(row);
358
+ } else {
359
+ cells[key] = {
360
+ rows: [row]
361
+ };
362
+ }
363
+ }
364
+ });
365
+ updatedPivotRow.cells = cells;
366
+ pivot_rows[index] = updatedPivotRow;
367
+ } else {
368
+ var _cells = {};
369
+ pivot_columns.forEach(function (c) {
370
+ var key = c.key;
371
+ if (isSameGroup(isColumnDataAsAnArray, cellValue, key)) {
372
+ _cells[key] = {
373
+ rows: [row]
374
+ };
375
+ }
376
+ });
377
+ pivot_rows.push({
378
+ name: name,
379
+ cells: _cells
380
+ });
381
+ }
382
+ }
383
+ function isSameGroup(isColumnDataAsAnArray, source, target) {
384
+ if (isColumnDataAsAnArray) {
385
+ return (!source || source.length === 0) && !target || source && source.includes(target);
386
+ }
387
+ return source === null && target === null || source === undefined && target === undefined || source === target;
388
+ }
389
+ function getTwoDimensionTotal(summaryColumn, summary_type, summary_method, formula_rows) {
390
+ var pivot_rows = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
391
+ var pivot_columns = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
392
+ var pivot_columns_total = {};
393
+ var pivot_table_total = 0;
394
+ var dateColumnsTotalArr = [];
395
+ var _ref = summaryColumn || {},
396
+ summary_column_type = _ref.type;
397
+ var isSummaryDateColumn = summaryColumn && isDateColumn(summaryColumn);
398
+ var date_summary_column_format = isSummaryDateColumn ? summaryColumn.data.format : '';
399
+ Array.isArray(pivot_rows) && pivot_rows.forEach(function (pivotRow) {
400
+ var cells = pivotRow.cells;
401
+ var total = 0;
402
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (pivotColumn) {
403
+ var key = pivotColumn.key;
404
+ if (cells[key]) {
405
+ var rows = cells[key].rows;
406
+ var subTotal = getTotal(summaryColumn, summary_type, summary_method, rows, formula_rows);
407
+ if (isSummaryDateColumn) {
408
+ if (subTotal === 0) {
409
+ cells[key].total = 0;
410
+ } else {
411
+ subTotal.key = key;
412
+ subTotal.name = pivotRow.name;
413
+ dateColumnsTotalArr.push(subTotal);
414
+ cells[key].total = subTotal.date;
415
+ }
416
+ } else {
417
+ cells[key].total = subTotal;
418
+ total += subTotal ? subTotal - 0 : 0;
419
+ var columnTotal = pivot_columns_total[key] ? pivot_columns_total[key] : 0;
420
+ columnTotal += subTotal ? subTotal - 0 : 0;
421
+ pivot_columns_total[key] = columnTotal;
422
+ }
423
+ }
424
+ });
425
+ if (summary_column_type != 'date') {
426
+ pivotRow.total = Number.parseFloat(total.toFixed(8));
427
+ pivot_table_total += total;
428
+ }
429
+ });
430
+ if (summaryColumn && isDateColumn(summaryColumn)) {
431
+ pivot_columns_total = showTwoDimensionDateColumnsAndRowsTotal(dateColumnsTotalArr, pivot_rows, date_summary_column_format, pivot_columns, summary_method);
432
+ if (summary_method === 'Max') {
433
+ pivot_table_total = dateColumnsTotalArr.length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnsTotalArr, 'Max').date;
434
+ } else if (summary_method === 'Min') {
435
+ pivot_table_total = dateColumnsTotalArr.length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnsTotalArr, 'Min').date;
436
+ }
437
+ } else {
438
+ pivot_table_total = Number.parseFloat(pivot_table_total.toFixed(8));
439
+ }
440
+ return {
441
+ pivot_columns_total: pivot_columns_total,
442
+ pivot_table_total: pivot_table_total
443
+ };
444
+ }
445
+ function getTotal(summary_column, summary_type, summary_method) {
446
+ var rows = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
447
+ var formula_rows = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
448
+ var summary_column_key = summary_column ? summary_column.key : '';
449
+ var summary_column_type = summary_column ? summary_column.type : '';
450
+ var rowsLength = rows.length;
451
+ var total;
452
+ if (summary_type === SUMMARY_TYPE.COUNT) {
453
+ total = rowsLength;
454
+ } else if (summary_type === SUMMARY_TYPE.ADVANCED) {
455
+ if (summary_column && isDateColumn(summary_column)) {
456
+ if (rowsLength === 0) return;
457
+ var dateArr = [];
458
+ rows.forEach(function (r) {
459
+ var formatDate = {};
460
+ var formatDateData;
461
+ var value = r[summary_column_key];
462
+ if (FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
463
+ var formulaRow = formula_rows[r._id] || {};
464
+ value = formulaRow[summary_column_key];
465
+ }
466
+ if (!value) return;
467
+ if (value.indexOf('T') != -1) {
468
+ var index = value.indexOf('T');
469
+ var targetStr = value.substring(0, index);
470
+ formatDateData = targetStr.replace(/-/g, '/');
471
+ formatDate.date = targetStr;
472
+ } else {
473
+ formatDateData = value.replace(/-/g, '/');
474
+ formatDate.date = value;
475
+ }
476
+ formatDate.value = Date.parse(formatDateData);
477
+ dateArr.push(formatDate);
478
+ });
479
+ if (summary_method === 'Max') {
480
+ total = getDateMaxOrMinTotal(dateArr, 'Max');
481
+ } else if (summary_method === 'Min') {
482
+ total = getDateMaxOrMinTotal(dateArr, 'Min');
483
+ }
484
+ } else {
485
+ switch (summary_method) {
486
+ case 'Sum':
487
+ case 'Mean':
488
+ {
489
+ var sum = 0;
490
+ var validNumbersCount = 0;
491
+ rows.forEach(function (r) {
492
+ var num;
493
+ if (FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
494
+ var formulaRow = formula_rows[r._id] || {};
495
+ if (formulaRow[summary_column_key] && typeof formulaRow[summary_column_key] === 'object') {
496
+ num = formulaRow[summary_column_key][0];
497
+ } else {
498
+ num = formulaRow[summary_column_key];
499
+ }
500
+ } else {
501
+ num = r[summary_column_key];
502
+ }
503
+ if (isNumber(num)) {
504
+ validNumbersCount++;
505
+ sum += num;
506
+ }
507
+ });
508
+ if (summary_method === 'Sum') {
509
+ total = Number.parseFloat(sum.toFixed(8));
510
+ } else if (summary_method === 'Mean') {
511
+ total = validNumbersCount === 0 ? 0 : Number.parseFloat((sum / validNumbersCount).toFixed(8));
512
+ }
513
+ break;
514
+ }
515
+ case 'Max':
516
+ case 'Min':
517
+ {
518
+ if (rowsLength > 0) {
519
+ var result = rows.reduce(function (current, next) {
520
+ var currentValue, nextValue;
521
+ if (FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
522
+ var currentFormulaRow = formula_rows[current._id] || {};
523
+ var nextFormulaRow = formula_rows[next._id] || {};
524
+ currentValue = currentFormulaRow[summary_column_key];
525
+ nextValue = nextFormulaRow[summary_column_key];
526
+ } else {
527
+ currentValue = current[summary_column_key];
528
+ nextValue = next[summary_column_key];
529
+ }
530
+ if (!nextValue && nextValue !== 0) {
531
+ return current;
532
+ }
533
+ var isNextGreater = currentValue < nextValue;
534
+ if (summary_method === 'Min') {
535
+ return isNextGreater ? current : next;
536
+ } else {
537
+ return isNextGreater ? next : current;
538
+ }
539
+ });
540
+ if (FORMULA_COLUMN_TYPES_MAP[summary_column_type]) {
541
+ var formulaRow = formula_rows[result._id];
542
+ if (formulaRow) {
543
+ if (formulaRow[summary_column_key] && typeof formulaRow[summary_column_key] === 'object') {
544
+ total = formulaRow[summary_column_key][0];
545
+ } else {
546
+ total = formulaRow[summary_column_key];
547
+ }
548
+ } else {
549
+ total = null;
550
+ }
551
+ } else {
552
+ total = result[summary_column_key];
553
+ }
554
+ }
555
+ break;
556
+ }
557
+ default:
558
+ {
559
+ break;
560
+ }
561
+ }
562
+ }
563
+ }
564
+ // formula_rows result can be '#VALUE!'
565
+ if (total === '#VALUE!') {
566
+ total = 0;
567
+ }
568
+ return total || 0;
569
+ }
570
+ function showTwoDimensionDateColumnsAndRowsTotal(dateArr, pivot_rows, summary_column_format, pivot_columns, summary_method) {
571
+ var pivot_columns_total = {};
572
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (pivotColumn) {
573
+ var key = pivotColumn.key;
574
+ var dateColumnTotal = [];
575
+ dateArr.forEach(function (item) {
576
+ if (item.key === key) {
577
+ dateColumnTotal.push(item);
578
+ }
579
+ });
580
+ if (summary_method === 'Max') {
581
+ pivot_columns_total[key] = dateColumnTotal.length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnTotal, 'Max').date;
582
+ } else if (summary_method === 'Min') {
583
+ pivot_columns_total[key] = dateColumnTotal.length === 0 ? 0 : getDateMaxOrMinTotal(dateColumnTotal, 'Min').date;
584
+ }
585
+ });
586
+ Array.isArray(pivot_rows) && pivot_rows.forEach(function (pivotRow) {
587
+ var dateRowTotal = [];
588
+ dateArr.forEach(function (item) {
589
+ if (item.name === pivotRow.name) {
590
+ dateRowTotal.push(item);
591
+ }
592
+ });
593
+ if (summary_method === 'Max') {
594
+ pivotRow.total = dateRowTotal.length === 0 ? 0 : getDateMaxOrMinTotal(dateRowTotal, 'Max').date;
595
+ } else if (summary_method === 'Min') {
596
+ pivotRow.total = dateRowTotal.length === 0 ? 0 : getDateMaxOrMinTotal(dateRowTotal, 'Min').date;
597
+ }
598
+ });
599
+ return pivot_columns_total;
600
+ }
601
+ function getDateMaxOrMinTotal(dateArr, type) {
602
+ if (dateArr.length === 0) return;
603
+ var list = dateArr.map(function (item) {
604
+ return item.value;
605
+ });
606
+ var dateValue = 0;
607
+ var dateIndex = 0;
608
+ if (type === 'Max') {
609
+ dateValue = Math.max.apply(Math, _toConsumableArray(list));
610
+ } else if (type === 'Min') {
611
+ dateValue = Math.min.apply(Math, _toConsumableArray(list));
612
+ }
613
+ dateIndex = list.indexOf(dateValue);
614
+ return dateArr[dateIndex];
615
+ }
@@ -0,0 +1,67 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import { isNumber, TableUtils, Views } from 'dtable-store';
3
+ import StatUtils from '../../utils/stat-utils';
4
+ import { isArrayCellValue } from '../../utils/common-utils';
5
+ import { getCellValue, getFormattedLabel } from '../../utils/row-utils';
6
+ import { DATE_GRANULARITY } from '../../constants';
7
+ function calculateResult(chart, value, username, userId) {
8
+ var table_id = chart.table_id,
9
+ view_id = chart.view_id,
10
+ x_axis_column = chart.x_axis_column,
11
+ y_axis_column = chart.y_axis_column,
12
+ group_column = chart.group_column;
13
+ var table = TableUtils.getTableById(value.tables, table_id);
14
+ var view = table && Views.getViewById(table.views, view_id);
15
+ if (!view) {
16
+ return [];
17
+ }
18
+ var selectedXAxisColumn = TableUtils.getTableColumnByKey(table, x_axis_column);
19
+ var selectedYAxisColumn = TableUtils.getTableColumnByKey(table, y_axis_column);
20
+ var selectedGroupColumn = TableUtils.getTableColumnByKey(table, group_column);
21
+ var statRows = Views.getViewRows(view, table, value, username, userId);
22
+ var formulaRows = Views.getTableFormulaResults(table, statRows, value);
23
+ var data = [];
24
+ statRows.forEach(function (row) {
25
+ var rowId = row._id;
26
+ var formulaRow = formulaRows[rowId] || {};
27
+ var x_axis = getCellValue(row, formulaRow, selectedXAxisColumn);
28
+ var y_axis = getCellValue(row, formulaRow, selectedYAxisColumn);
29
+ x_axis = isNumber(x_axis) ? x_axis : 0;
30
+ y_axis = isNumber(y_axis) ? y_axis : 0;
31
+ var name = getColumnValue(row, formulaRow, selectedGroupColumn, value);
32
+ var nameIndex = data.findIndex(function (r) {
33
+ return r.name === name && r.x_axis === x_axis && r.y_axis === y_axis;
34
+ });
35
+ var dataItem = {
36
+ x_axis: x_axis,
37
+ y_axis: y_axis,
38
+ group_by: name
39
+ };
40
+ updateBasicChartRows(data, nameIndex, name, dataItem, row);
41
+ });
42
+ return data;
43
+ }
44
+ function updateBasicChartRows(results, index, name, dataItem, row) {
45
+ var updatedResult;
46
+ if (index > -1) {
47
+ updatedResult = results[index];
48
+ updatedResult.rows.push(row);
49
+ results[index] = updatedResult;
50
+ } else {
51
+ updatedResult = _objectSpread(_objectSpread({}, dataItem), {}, {
52
+ name: name,
53
+ rows: [row]
54
+ });
55
+ results.push(updatedResult);
56
+ }
57
+ }
58
+ function getColumnValue(data, formulaRow, column, dtableValue) {
59
+ var tempValue = data[column.key];
60
+ var value = StatUtils.getGroupLabel(tempValue, formulaRow, column, DATE_GRANULARITY.DAY, '', dtableValue);
61
+ if (isArrayCellValue(column)) {
62
+ value = value[0];
63
+ }
64
+ value = getFormattedLabel(column, value, dtableValue.collaborators);
65
+ return value;
66
+ }
67
+ export default calculateResult;