dtable-utils 0.0.3 → 4.2.0

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 (152) hide show
  1. package/README.md +56 -5
  2. package/dist/index.js +1 -1
  3. package/es/cell-value-get/cell-value.js +250 -20
  4. package/es/cell-value-get/collaborator.js +16 -3
  5. package/es/cell-value-get/digital-sign.js +1 -1
  6. package/es/cell-value-get/duration.js +3 -3
  7. package/es/cell-value-get/geolocation.js +52 -30
  8. package/es/cell-value-get/long-text.js +1 -1
  9. package/es/cell-value-get/number.js +51 -19
  10. package/es/cell-value-get/option.js +33 -9
  11. package/es/cell-value-get/rate.js +11 -0
  12. package/es/cell-value-set/date.js +26 -0
  13. package/es/cell-value-set/number.js +53 -1
  14. package/es/color/column-color.js +437 -0
  15. package/es/color/gradient-color.js +100 -0
  16. package/es/color/row-color.js +289 -0
  17. package/es/column/{common.js → core.js} +2 -14
  18. package/es/column/date.js +1 -1
  19. package/es/column/number.js +1 -1
  20. package/es/column/option.js +143 -0
  21. package/es/common.js +23 -3
  22. package/es/constants/color.js +16 -0
  23. package/es/constants/column-permission.js +7 -0
  24. package/es/constants/column.js +127 -2
  25. package/es/constants/filter/index.js +5 -1
  26. package/es/constants/formula.js +2 -1
  27. package/es/constants/grid-header.js +6 -0
  28. package/es/constants/group.js +23 -0
  29. package/es/constants/limit.js +3 -0
  30. package/es/constants/reg.js +4 -0
  31. package/es/constants/row-color.js +11 -0
  32. package/es/constants/sort.js +11 -0
  33. package/es/date.js +1 -1
  34. package/es/filter/core.js +322 -0
  35. package/es/filter/filter-column/array.js +87 -0
  36. package/es/filter/filter-column/checkbox.js +14 -0
  37. package/es/filter/filter-column/collaborator.js +72 -0
  38. package/es/filter/filter-column/creator.js +59 -0
  39. package/es/filter/filter-column/date.js +102 -0
  40. package/es/filter/filter-column/digital-sign.js +29 -0
  41. package/es/filter/filter-column/file.js +27 -0
  42. package/es/filter/filter-column/formula.js +57 -0
  43. package/es/filter/filter-column/geolocation.js +58 -0
  44. package/es/filter/filter-column/link.js +20 -0
  45. package/es/filter/filter-column/long-text.js +28 -0
  46. package/es/filter/filter-column/multiple-select.js +64 -0
  47. package/es/filter/filter-column/number.js +97 -0
  48. package/es/filter/filter-column/single-select.js +45 -0
  49. package/es/filter/filter-column/text.js +60 -0
  50. package/es/filter/filter-row.js +233 -0
  51. package/es/group/core.js +116 -0
  52. package/es/group/group-row.js +402 -0
  53. package/es/index.js +63 -11
  54. package/es/link/core.js +78 -0
  55. package/es/number.js +21 -0
  56. package/es/row/core.js +180 -0
  57. package/es/sort/core.js +91 -0
  58. package/es/sort/sort-column/array.js +72 -0
  59. package/es/sort/sort-column/checkbox.js +22 -0
  60. package/es/sort/sort-column/collaborator.js +16 -0
  61. package/es/sort/sort-column/date.js +25 -0
  62. package/es/sort/sort-column/formula.js +49 -0
  63. package/es/sort/sort-column/link.js +32 -0
  64. package/es/sort/sort-column/multiple-select.js +45 -0
  65. package/es/sort/sort-column/number.js +31 -0
  66. package/es/sort/sort-column/single-select.js +36 -0
  67. package/es/sort/sort-column/text.js +69 -0
  68. package/es/sort/sort-row.js +110 -0
  69. package/es/table/column.js +27 -0
  70. package/es/table/core.js +14 -0
  71. package/es/table/row.js +25 -0
  72. package/es/validate/filter.js +1 -1
  73. package/es/validate/geolocation.js +5 -0
  74. package/es/view/core.js +134 -0
  75. package/es/view/formula.js +147 -0
  76. package/es/view/group.js +32 -0
  77. package/es/view/summaries.js +167 -0
  78. package/lib/cell-value-get/cell-value.js +254 -19
  79. package/lib/cell-value-get/collaborator.js +16 -2
  80. package/lib/cell-value-get/digital-sign.js +1 -1
  81. package/lib/cell-value-get/duration.js +3 -2
  82. package/lib/cell-value-get/geolocation.js +53 -30
  83. package/lib/cell-value-get/long-text.js +1 -1
  84. package/lib/cell-value-get/number.js +51 -18
  85. package/lib/cell-value-get/option.js +34 -8
  86. package/lib/cell-value-get/rate.js +15 -0
  87. package/lib/cell-value-set/date.js +30 -0
  88. package/lib/cell-value-set/number.js +53 -0
  89. package/lib/color/column-color.js +446 -0
  90. package/lib/color/gradient-color.js +110 -0
  91. package/lib/color/row-color.js +297 -0
  92. package/lib/column/{common.js → core.js} +1 -14
  93. package/lib/column/date.js +2 -2
  94. package/lib/column/number.js +3 -3
  95. package/lib/column/option.js +151 -0
  96. package/lib/common.js +27 -3
  97. package/lib/constants/color.js +20 -0
  98. package/lib/constants/column-permission.js +11 -0
  99. package/lib/constants/column.js +134 -1
  100. package/lib/constants/filter/index.js +5 -0
  101. package/lib/constants/formula.js +2 -0
  102. package/lib/constants/grid-header.js +10 -0
  103. package/lib/constants/group.js +36 -0
  104. package/lib/constants/limit.js +7 -0
  105. package/lib/constants/reg.js +9 -0
  106. package/lib/constants/row-color.js +17 -0
  107. package/lib/constants/sort.js +18 -0
  108. package/lib/filter/core.js +336 -0
  109. package/lib/filter/filter-column/array.js +91 -0
  110. package/lib/filter/filter-column/checkbox.js +18 -0
  111. package/lib/filter/filter-column/collaborator.js +80 -0
  112. package/lib/filter/filter-column/creator.js +63 -0
  113. package/lib/filter/filter-column/date.js +106 -0
  114. package/lib/filter/filter-column/digital-sign.js +33 -0
  115. package/lib/filter/filter-column/file.js +31 -0
  116. package/lib/filter/filter-column/formula.js +61 -0
  117. package/lib/filter/filter-column/geolocation.js +62 -0
  118. package/lib/filter/filter-column/link.js +24 -0
  119. package/lib/filter/filter-column/long-text.js +32 -0
  120. package/lib/filter/filter-column/multiple-select.js +72 -0
  121. package/lib/filter/filter-column/number.js +101 -0
  122. package/lib/filter/filter-column/single-select.js +49 -0
  123. package/lib/filter/filter-column/text.js +64 -0
  124. package/lib/filter/filter-row.js +239 -0
  125. package/lib/group/core.js +126 -0
  126. package/lib/group/group-row.js +413 -0
  127. package/lib/index.js +177 -7
  128. package/lib/link/core.js +90 -0
  129. package/lib/number.js +26 -0
  130. package/lib/row/core.js +189 -0
  131. package/lib/sort/core.js +102 -0
  132. package/lib/sort/sort-column/array.js +76 -0
  133. package/lib/sort/sort-column/checkbox.js +26 -0
  134. package/lib/sort/sort-column/collaborator.js +20 -0
  135. package/lib/sort/sort-column/date.js +29 -0
  136. package/lib/sort/sort-column/formula.js +53 -0
  137. package/lib/sort/sort-column/link.js +36 -0
  138. package/lib/sort/sort-column/multiple-select.js +49 -0
  139. package/lib/sort/sort-column/number.js +35 -0
  140. package/lib/sort/sort-column/single-select.js +40 -0
  141. package/lib/sort/sort-column/text.js +74 -0
  142. package/lib/sort/sort-row.js +115 -0
  143. package/lib/table/column.js +32 -0
  144. package/lib/table/core.js +18 -0
  145. package/lib/table/row.js +30 -0
  146. package/lib/validate/filter.js +3 -3
  147. package/lib/validate/geolocation.js +9 -0
  148. package/lib/view/core.js +143 -0
  149. package/lib/view/formula.js +154 -0
  150. package/lib/view/group.js +36 -0
  151. package/lib/view/summaries.js +173 -0
  152. package/package.json +5 -3
@@ -0,0 +1,413 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
7
+ var core$1 = require('../row/core.js');
8
+ var row = require('../table/row.js');
9
+ var core = require('./core.js');
10
+ var date = require('../date.js');
11
+ var date$1 = require('../column/date.js');
12
+ var collaborator = require('../cell-value-get/collaborator.js');
13
+ var geolocation = require('../cell-value-get/geolocation.js');
14
+ var cellValue = require('../cell-value-get/cell-value.js');
15
+ var checkbox = require('../sort/sort-column/checkbox.js');
16
+ var collaborator$1 = require('../sort/sort-column/collaborator.js');
17
+ var date$2 = require('../sort/sort-column/date.js');
18
+ var number = require('../sort/sort-column/number.js');
19
+ var text = require('../sort/sort-column/text.js');
20
+ var cellType = require('../constants/cell-type.js');
21
+ var column = require('../constants/column.js');
22
+ var formula = require('../constants/formula.js');
23
+ var formula$1 = require('../sort/sort-column/formula.js');
24
+ var link = require('../sort/sort-column/link.js');
25
+ var multipleSelect = require('../sort/sort-column/multiple-select.js');
26
+ var singleSelect = require('../sort/sort-column/single-select.js');
27
+ var group = require('../constants/group.js');
28
+ var sort = require('../constants/sort.js');
29
+
30
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
31
+
32
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
33
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
34
+
35
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
36
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
37
+ var _getCellValue = function _getCellValue(row, formulaRows, groupby) {
38
+ var column_key = groupby.column_key,
39
+ column = groupby.column;
40
+ var cellValue = row[column_key];
41
+ var type = column.type;
42
+ if (formula.FORMULA_COLUMN_TYPES_MAP[type]) {
43
+ var formulaRow = formulaRows[row._id] || {};
44
+ return formulaRow[column_key];
45
+ }
46
+ // link column value is calculate as a special formula column
47
+ if (type === cellType.CellType.LINK) {
48
+ var _formulaRow = formulaRows[row._id] || {};
49
+ return _formulaRow[column_key] || [];
50
+ }
51
+ return cellValue;
52
+ };
53
+ var _getFormattedCellValue = function _getFormattedCellValue(cellValue$1, groupby) {
54
+ var column = groupby.column,
55
+ countType = groupby.count_type;
56
+ var columnType = column.type,
57
+ columnData = column.data;
58
+ switch (columnType) {
59
+ case cellType.CellType.TEXT:
60
+ case cellType.CellType.URL:
61
+ case cellType.CellType.EMAIL:
62
+ case cellType.CellType.LAST_MODIFIER:
63
+ case cellType.CellType.CREATOR:
64
+ {
65
+ return cellValue$1 || null;
66
+ }
67
+ case cellType.CellType.DATE:
68
+ case cellType.CellType.CTIME:
69
+ case cellType.CellType.MTIME:
70
+ {
71
+ return date.DateUtils.getDateByGranularity(cellValue$1, countType) || null;
72
+ }
73
+ case cellType.CellType.NUMBER:
74
+ case cellType.CellType.DURATION:
75
+ case cellType.CellType.RATE:
76
+ {
77
+ return cellValue$1 || cellValue$1 === 0 ? cellValue$1 : null;
78
+ }
79
+ case cellType.CellType.CHECKBOX:
80
+ {
81
+ return !!cellValue$1;
82
+ }
83
+ case cellType.CellType.SINGLE_SELECT:
84
+ {
85
+ return cellValue$1 || null;
86
+ }
87
+ case cellType.CellType.MULTIPLE_SELECT:
88
+ {
89
+ return Array.isArray(cellValue$1) ? cellValue$1 : [];
90
+ }
91
+ case cellType.CellType.COLLABORATOR:
92
+ {
93
+ if (!Array.isArray(cellValue$1)) {
94
+ return [];
95
+ }
96
+ var collaborator_email_map = groupby.collaborator_email_map;
97
+ return cellValue$1.filter(function (email) {
98
+ return collaborator_email_map[email];
99
+ });
100
+ }
101
+ case cellType.CellType.GEOLOCATION:
102
+ {
103
+ return geolocation.getGeolocationByGranularity(cellValue$1, countType);
104
+ }
105
+ case cellType.CellType.FORMULA:
106
+ case cellType.CellType.LINK_FORMULA:
107
+ {
108
+ var _ref = columnData || {},
109
+ result_type = _ref.result_type;
110
+ if (result_type === formula.FORMULA_RESULT_TYPE.NUMBER) {
111
+ return cellValue$1 || cellValue$1 === 0 ? cellValue$1 : null;
112
+ }
113
+ if (result_type === formula.FORMULA_RESULT_TYPE.DATE) {
114
+ return date.DateUtils.getDateByGranularity(cellValue$1, countType) || null;
115
+ }
116
+ if (result_type === formula.FORMULA_RESULT_TYPE.BOOL) {
117
+ return !!cellValue$1;
118
+ }
119
+ if (result_type === formula.FORMULA_RESULT_TYPE.ARRAY) {
120
+ var newCellValue = cellValue$1;
121
+ if (date$1.isDateColumn(column) && Array.isArray(cellValue$1) && cellValue$1.length > 0) {
122
+ return date.DateUtils.getDateByGranularity(cellValue$1[0], countType) || null;
123
+ }
124
+
125
+ // convert to string
126
+ return cellValue.getFormulaDisplayString(newCellValue, columnData) || null;
127
+ }
128
+ return cellValue$1 || null;
129
+ }
130
+ case cellType.CellType.LINK:
131
+ {
132
+ if (!Array.isArray(cellValue$1) || cellValue$1.length === 0) {
133
+ return [];
134
+ }
135
+ return cellValue$1.map(function (linked) {
136
+ return linked.display_value;
137
+ });
138
+ }
139
+ default:
140
+ {
141
+ return null;
142
+ }
143
+ }
144
+ };
145
+ var _getStrCellValue = function _getStrCellValue(cellValue, columnType) {
146
+ var sCellValue = null;
147
+ if (column.SINGLE_CELL_VALUE_COLUMN_TYPE_MAP[columnType]) {
148
+ sCellValue = typeof cellValue === 'string' ? cellValue : String(cellValue);
149
+ } else if (column.MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP[columnType]) {
150
+ sCellValue = _toConsumableArray__default["default"](cellValue).sort().toString();
151
+ }
152
+ return sCellValue;
153
+ };
154
+ var _findGroupIndexWithMultipleGroupbys = function _findGroupIndexWithMultipleGroupbys(sCellValue, cellValue2GroupIndexMap, groupsLength) {
155
+ var target = cellValue2GroupIndexMap[sCellValue];
156
+ if (target && target.index > -1) {
157
+ return target.index;
158
+ }
159
+
160
+ // eslint-disable-next-line
161
+ cellValue2GroupIndexMap[sCellValue] = {};
162
+
163
+ // eslint-disable-next-line
164
+ cellValue2GroupIndexMap[sCellValue].subgroups = {};
165
+
166
+ // eslint-disable-next-line
167
+ cellValue2GroupIndexMap[sCellValue].index = groupsLength;
168
+ return -1;
169
+ };
170
+ var _findGroupIndex = function _findGroupIndex(sCellValue, cellValue2GroupIndexMap, groupsLength) {
171
+ var index = cellValue2GroupIndexMap[sCellValue];
172
+ if (index > -1) {
173
+ return index;
174
+ }
175
+
176
+ // eslint-disable-next-line
177
+ cellValue2GroupIndexMap[sCellValue] = groupsLength;
178
+ return -1;
179
+ };
180
+ var getSortedGroups = function getSortedGroups(groups, groupbys, value, level) {
181
+ var _groupbys$level = groupbys[level],
182
+ column$1 = _groupbys$level.column,
183
+ sort_type = _groupbys$level.sort_type;
184
+ var collaborators = value.collaborators;
185
+ var columnType = column$1.type,
186
+ columnData = column$1.data;
187
+ var normalizedSortType = sort_type || sort.SORT_TYPE.UP;
188
+ var option_id_index_map = {};
189
+ if (columnType === cellType.CellType.SINGLE_SELECT || columnType === cellType.CellType.MULTIPLE_SELECT) {
190
+ var _ref2 = columnData || {},
191
+ options = _ref2.options;
192
+ if (Array.isArray(options)) {
193
+ options.forEach(function (option, index) {
194
+ option_id_index_map[option.id] = index;
195
+ });
196
+ }
197
+ }
198
+ groups.sort(function (currGroupRow, nextGroupRow) {
199
+ var currCellVal = currGroupRow.cell_value;
200
+ var nextCellVal = nextGroupRow.cell_value;
201
+ if (sort.SORT_COLUMN_OPTIONS.includes(columnType)) {
202
+ var sortResult;
203
+ if (sort.TEXT_SORTER_COLUMN_TYPES.includes(columnType)) {
204
+ sortResult = text.sortText(currCellVal, nextCellVal, normalizedSortType);
205
+ } else if (sort.NUMBER_SORTER_COLUMN_TYPES.includes(columnType)) {
206
+ sortResult = number.sortNumber(currCellVal, nextCellVal, normalizedSortType);
207
+ } else if (column.DATE_COLUMN_OPTIONS.includes(columnType)) {
208
+ sortResult = date$2.sortDate(currCellVal, nextCellVal, normalizedSortType);
209
+ } else if (columnType === cellType.CellType.CHECKBOX) {
210
+ sortResult = checkbox.sortCheckbox(currCellVal, nextCellVal, normalizedSortType);
211
+ } else if (columnType === cellType.CellType.COLLABORATOR) {
212
+ var currCollaborators = currCellVal;
213
+ var nextCollaborators = nextCellVal;
214
+ if (collaborators) {
215
+ currCollaborators = collaborator.getCollaboratorsNames(currCollaborators, collaborators);
216
+ nextCollaborators = collaborator.getCollaboratorsNames(nextCollaborators, collaborators);
217
+ }
218
+ sortResult = collaborator$1.sortCollaborator(currCollaborators, nextCollaborators, normalizedSortType);
219
+ } else if (columnType === cellType.CellType.SINGLE_SELECT) {
220
+ sortResult = singleSelect.sortSingleSelect(currCellVal, nextCellVal, {
221
+ sort_type: normalizedSortType,
222
+ option_id_index_map: option_id_index_map
223
+ });
224
+ } else if (columnType === cellType.CellType.MULTIPLE_SELECT) {
225
+ sortResult = multipleSelect.sortMultipleSelect(currCellVal, nextCellVal, {
226
+ sort_type: normalizedSortType,
227
+ option_id_index_map: option_id_index_map
228
+ });
229
+ } else if (formula.FORMULA_COLUMN_TYPES_MAP[columnType]) {
230
+ var currOriginalCellVal = currGroupRow.original_cell_value;
231
+ var nextOriginalCellVal = nextGroupRow.original_cell_value;
232
+ sortResult = formula$1.sortFormula(currOriginalCellVal, nextOriginalCellVal, normalizedSortType, {
233
+ columnData: columnData,
234
+ value: value
235
+ });
236
+ } else if (columnType === cellType.CellType.LINK) {
237
+ var _currOriginalCellVal = currGroupRow.original_cell_value;
238
+ var _nextOriginalCellVal = nextGroupRow.original_cell_value;
239
+ sortResult = link.sortLink(_currOriginalCellVal, _nextOriginalCellVal, normalizedSortType, {
240
+ columnData: columnData,
241
+ value: value
242
+ });
243
+ }
244
+ return sortResult;
245
+ }
246
+ if (currCellVal === '') return 1;
247
+ if (nextCellVal === '') return -1;
248
+ return 0;
249
+ });
250
+
251
+ // for nested group.
252
+ var isNestedGroup = Array.isArray(groups[0].subgroups) && groups[0].subgroups.length > 0;
253
+ if (isNestedGroup) {
254
+ var nextLevel = level + 1;
255
+
256
+ // eslint-disable-next-line
257
+ groups = groups.map(function (group) {
258
+ var sortedSubgroups = getSortedGroups(group.subgroups, groupbys, value, nextLevel);
259
+ return _objectSpread(_objectSpread({}, group), {}, {
260
+ subgroups: sortedSubgroups
261
+ });
262
+ });
263
+ }
264
+ return groups;
265
+ };
266
+ var groupRowsWithMultipleGroupbys = function groupRowsWithMultipleGroupbys(groupbys, rows, formulaRows, value) {
267
+ var validGroupbys = groupbys.length > group.MAX_GROUP_LEVEL ? groupbys.slice(0, group.MAX_GROUP_LEVEL) : _toConsumableArray__default["default"](groupbys);
268
+ var groups = [];
269
+ var cellValue2GroupIndexMap = {};
270
+ rows.forEach(function (row) {
271
+ var rowId = row._id;
272
+ var updatedGroup;
273
+ var updateCellValue2GroupIndexMap;
274
+ for (var level = 0; level < validGroupbys.length; level++) {
275
+ var currentGroupby = validGroupbys[level];
276
+ var column = currentGroupby.column,
277
+ column_key = currentGroupby.column_key;
278
+ var columnType = column.type;
279
+ var cellValue = _getCellValue(row, formulaRows, currentGroupby);
280
+ var formattedValue = _getFormattedCellValue(cellValue, currentGroupby);
281
+ var sCellValue = _getStrCellValue(formattedValue, columnType);
282
+ var group = {
283
+ cell_value: formattedValue,
284
+ original_cell_value: cellValue,
285
+ row_ids: null,
286
+ column_key: column_key,
287
+ subgroups: [],
288
+ summaries: {}
289
+ };
290
+ if (level === 0) {
291
+ var groupedRowIndex = _findGroupIndexWithMultipleGroupbys(sCellValue, cellValue2GroupIndexMap, groups.length);
292
+ updateCellValue2GroupIndexMap = cellValue2GroupIndexMap[sCellValue].subgroups;
293
+ if (groupedRowIndex < 0) {
294
+ groups.push(group);
295
+ updatedGroup = groups[groups.length - 1];
296
+ } else {
297
+ updatedGroup = groups[groupedRowIndex];
298
+ }
299
+ } else {
300
+ var _groupedRowIndex = _findGroupIndexWithMultipleGroupbys(sCellValue, updateCellValue2GroupIndexMap, updatedGroup.subgroups.length);
301
+ updateCellValue2GroupIndexMap = updateCellValue2GroupIndexMap[sCellValue].subgroups;
302
+ if (_groupedRowIndex < 0) {
303
+ updatedGroup.subgroups.push(group);
304
+ updatedGroup = updatedGroup.subgroups[updatedGroup.subgroups.length - 1];
305
+ } else {
306
+ updatedGroup = updatedGroup.subgroups[_groupedRowIndex];
307
+ }
308
+
309
+ // update row_ids in the deepest group.
310
+ if (level === validGroupbys.length - 1) {
311
+ if (!updatedGroup.row_ids) {
312
+ updatedGroup.row_ids = [rowId];
313
+ } else {
314
+ updatedGroup.row_ids.push(rowId);
315
+ }
316
+ }
317
+ }
318
+ }
319
+ });
320
+ groups = getSortedGroups(groups, validGroupbys, value, 0);
321
+ return groups;
322
+ };
323
+
324
+ /**
325
+ * Group table rows
326
+ * @param {array} groupbys e.g. [{ column_key, count_type, column, ... }, ...]
327
+ * @param {array} rows e.g. [{ _id, ... }, ...]
328
+ * @param {object} formulaRows computed value of formula, link-formula, link etc.
329
+ * @param {object} value e.g. { collaborators, ... }
330
+ * @returns groups: [{
331
+ * cell_value, original_cell_value, column_key,
332
+ row_ids, subgroups, summaries, ...}, ...], array
333
+ */
334
+ var groupTableRows = function groupTableRows(groupbys, rows, formulaRows, value) {
335
+ if (groupbys.length === 0) {
336
+ return [];
337
+ }
338
+ if (groupbys.length > 1) {
339
+ return groupRowsWithMultipleGroupbys(groupbys, rows, formulaRows, value);
340
+ }
341
+ var groupby = groupbys[0];
342
+ var column_key = groupby.column_key,
343
+ column = groupby.column;
344
+ var columnType = column.type;
345
+ var groups = [];
346
+ var cellValue2GroupIndexMap = {};
347
+ rows.forEach(function (r) {
348
+ var cellValue = _getCellValue(r, formulaRows, groupby);
349
+ var formattedValue = _getFormattedCellValue(cellValue, groupby);
350
+ var sCellValue = _getStrCellValue(formattedValue, columnType);
351
+ var groupedRowIndex = _findGroupIndex(sCellValue, cellValue2GroupIndexMap, groups.length);
352
+ if (groupedRowIndex > -1) {
353
+ groups[groupedRowIndex].row_ids.push(r._id);
354
+ } else {
355
+ groups.push({
356
+ cell_value: formattedValue,
357
+ original_cell_value: cellValue,
358
+ column_key: column_key,
359
+ row_ids: [r._id],
360
+ subgroups: null,
361
+ summaries: {}
362
+ });
363
+ }
364
+ });
365
+
366
+ // sort groups
367
+ groups = getSortedGroups(groups, groupbys, value, 0);
368
+ return groups;
369
+ };
370
+
371
+ /**
372
+ * Group view rows
373
+ * @param {array} groupbys e.g. [{ column_key, count_type, column, ... }, ...]
374
+ * @param {object} table e.g. { id_row_map, ... }
375
+ * @param {array} rowsIds e.g. [ row._id, ...]
376
+ * @param {object} formulaRows computed value of formula, link-formula, link etc.
377
+ * @param {object} value e.g. { collaborators, ... }
378
+ * @returns groups: [{
379
+ * cell_value, original_cell_value, column_key,
380
+ row_ids, subgroups, summaries, ...}, ...], array
381
+ */
382
+ var groupViewRows = function groupViewRows(groupbys, table, rowsIds, formulaRows, value) {
383
+ if (rowsIds.length === 0) {
384
+ return [];
385
+ }
386
+ var rowsData = row.getRowsByIds(table, rowsIds);
387
+ return groupTableRows(groupbys, rowsData, formulaRows, value);
388
+ };
389
+
390
+ /**
391
+ * Group rows
392
+ * The "formulaRows" must be supplied if you want group rows by formula/link-formula/link columns
393
+ * @param {array} groupbys e.g. [{ column_key, count_type, ... }, ...]
394
+ * @param {array} rows e.g. table rows: [{ _id, ... }, ...] | view rows: [ row._id, ...]
395
+ * @param {object} table e.g. { id_row_map, columns, ... }
396
+ * @param {object} value e.g. { collaborators, ... }
397
+ * @param {object} formulaRows computed value of formula, link-formula, link etc.
398
+ * @returns groups: [{
399
+ * cell_value, original_cell_value, column_key,
400
+ row_ids, subgroups, summaries, ...}, ...], array
401
+ */
402
+ var getGroupedRowsWithoutFormulaCalculation = function getGroupedRowsWithoutFormulaCalculation(groupbys, rows, table, value) {
403
+ var _ref3 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
404
+ _ref3$formulaRows = _ref3.formulaRows,
405
+ formulaRows = _ref3$formulaRows === void 0 ? null : _ref3$formulaRows;
406
+ var columns = table.columns;
407
+ var validGroupbys = core.deleteInvalidGroupby(groupbys, columns, table, value);
408
+ return core$1.isTableRows(rows) ? groupTableRows(validGroupbys, rows, formulaRows, value) : groupViewRows(validGroupbys, table, rows, formulaRows, value);
409
+ };
410
+
411
+ exports.getGroupedRowsWithoutFormulaCalculation = getGroupedRowsWithoutFormulaCalculation;
412
+ exports.groupTableRows = groupTableRows;
413
+ exports.groupViewRows = groupViewRows;
package/lib/index.js CHANGED
@@ -7,7 +7,22 @@ var column = require('./constants/column.js');
7
7
  var index = require('./constants/filter/index.js');
8
8
  var formula = require('./constants/formula.js');
9
9
  var selectOption = require('./constants/select-option.js');
10
+ var sort = require('./constants/sort.js');
11
+ var group = require('./constants/group.js');
12
+ var columnPermission = require('./constants/column-permission.js');
13
+ var reg = require('./constants/reg.js');
14
+ var color = require('./constants/color.js');
15
+ var gridHeader = require('./constants/grid-header.js');
10
16
  var common = require('./common.js');
17
+ var core = require('./table/core.js');
18
+ var column$1 = require('./table/column.js');
19
+ var row = require('./table/row.js');
20
+ var core$1 = require('./row/core.js');
21
+ var core$2 = require('./view/core.js');
22
+ var summaries = require('./view/summaries.js');
23
+ var formula$1 = require('./view/formula.js');
24
+ var group$1 = require('./view/group.js');
25
+ var core$3 = require('./link/core.js');
11
26
  var date = require('./cell-value-get/date.js');
12
27
  var duration = require('./cell-value-get/duration.js');
13
28
  var number = require('./cell-value-get/number.js');
@@ -17,13 +32,50 @@ var geolocation = require('./cell-value-get/geolocation.js');
17
32
  var digitalSign = require('./cell-value-get/digital-sign.js');
18
33
  var longText = require('./cell-value-get/long-text.js');
19
34
  var cellValue = require('./cell-value-get/cell-value.js');
35
+ var rate = require('./cell-value-get/rate.js');
20
36
  var number$1 = require('./cell-value-set/number.js');
21
- var common$1 = require('./column/common.js');
22
- var date$1 = require('./column/date.js');
37
+ var date$1 = require('./cell-value-set/date.js');
38
+ var option$1 = require('./column/option.js');
39
+ var date$2 = require('./column/date.js');
23
40
  var number$2 = require('./column/number.js');
24
- var date$2 = require('./date.js');
41
+ var date$3 = require('./date.js');
42
+ var number$3 = require('./number.js');
25
43
  var filter = require('./validate/filter.js');
26
44
  var email = require('./validate/email.js');
45
+ var geolocation$1 = require('./validate/geolocation.js');
46
+ var core$4 = require('./filter/core.js');
47
+ var checkbox = require('./filter/filter-column/checkbox.js');
48
+ var collaborator$1 = require('./filter/filter-column/collaborator.js');
49
+ var creator = require('./filter/filter-column/creator.js');
50
+ var date$4 = require('./filter/filter-column/date.js');
51
+ var digitalSign$1 = require('./filter/filter-column/digital-sign.js');
52
+ var file = require('./filter/filter-column/file.js');
53
+ var formula$2 = require('./filter/filter-column/formula.js');
54
+ var geolocation$2 = require('./filter/filter-column/geolocation.js');
55
+ var text = require('./filter/filter-column/text.js');
56
+ var longText$1 = require('./filter/filter-column/long-text.js');
57
+ var multipleSelect = require('./filter/filter-column/multiple-select.js');
58
+ var number$4 = require('./filter/filter-column/number.js');
59
+ var singleSelect = require('./filter/filter-column/single-select.js');
60
+ var link = require('./filter/filter-column/link.js');
61
+ var filterRow = require('./filter/filter-row.js');
62
+ var core$5 = require('./sort/core.js');
63
+ var checkbox$1 = require('./sort/sort-column/checkbox.js');
64
+ var collaborator$2 = require('./sort/sort-column/collaborator.js');
65
+ var date$5 = require('./sort/sort-column/date.js');
66
+ var array = require('./sort/sort-column/array.js');
67
+ var formula$3 = require('./sort/sort-column/formula.js');
68
+ var link$1 = require('./sort/sort-column/link.js');
69
+ var multipleSelect$1 = require('./sort/sort-column/multiple-select.js');
70
+ var number$5 = require('./sort/sort-column/number.js');
71
+ var singleSelect$1 = require('./sort/sort-column/single-select.js');
72
+ var text$1 = require('./sort/sort-column/text.js');
73
+ var sortRow = require('./sort/sort-row.js');
74
+ var core$6 = require('./group/core.js');
75
+ var groupRow = require('./group/group-row.js');
76
+ var gradientColor = require('./color/gradient-color.js');
77
+ var columnColor = require('./color/column-color.js');
78
+ var rowColor = require('./color/row-color.js');
27
79
  var filterColumnOptions = require('./constants/filter/filter-column-options.js');
28
80
  var filterModifier = require('./constants/filter/filter-modifier.js');
29
81
  var filterPredicate = require('./constants/filter/filter-predicate.js');
@@ -34,44 +86,162 @@ var filterIsWithin = require('./constants/filter/filter-is-within.js');
34
86
  exports.CellType = cellType.CellType;
35
87
  exports.COLLABORATOR_COLUMN_TYPES = column.COLLABORATOR_COLUMN_TYPES;
36
88
  exports.COLUMNS_ICON_CONFIG = column.COLUMNS_ICON_CONFIG;
89
+ exports.COLUMN_OPTIONS = column.COLUMN_OPTIONS;
37
90
  exports.DATE_COLUMN_OPTIONS = column.DATE_COLUMN_OPTIONS;
91
+ exports.DATE_DEFAULT_TYPES = column.DATE_DEFAULT_TYPES;
92
+ exports.DATE_FORMAT_MAP = column.DATE_FORMAT_MAP;
93
+ exports.DATE_UNIT = column.DATE_UNIT;
38
94
  exports.DEFAULT_DATE_FORMAT = column.DEFAULT_DATE_FORMAT;
39
95
  exports.DEFAULT_NUMBER_FORMAT = column.DEFAULT_NUMBER_FORMAT;
40
96
  exports.DURATION_DECIMAL_DIGITS = column.DURATION_DECIMAL_DIGITS;
41
97
  exports.DURATION_FORMATS = column.DURATION_FORMATS;
42
98
  exports.DURATION_FORMATS_MAP = column.DURATION_FORMATS_MAP;
43
99
  exports.DURATION_ZERO_DISPLAY = column.DURATION_ZERO_DISPLAY;
100
+ exports.FILL_DEFAULT_VALUE_COLUMNS_TYPE = column.FILL_DEFAULT_VALUE_COLUMNS_TYPE;
101
+ exports.MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP = column.MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP;
102
+ exports.NOT_SUPPORT_EDIT_COLUMN_TYPE_MAP = column.NOT_SUPPORT_EDIT_COLUMN_TYPE_MAP;
44
103
  exports.NUMERIC_COLUMNS_TYPES = column.NUMERIC_COLUMNS_TYPES;
104
+ exports.SINGLE_CELL_VALUE_COLUMN_TYPE_MAP = column.SINGLE_CELL_VALUE_COLUMN_TYPE_MAP;
105
+ exports.UTC_FORMAT_DEFAULT = column.UTC_FORMAT_DEFAULT;
106
+ exports.FILTER_CONJUNCTION_TYPE = index.FILTER_CONJUNCTION_TYPE;
45
107
  exports.FILTER_ERR_MSG = index.FILTER_ERR_MSG;
108
+ exports.DISPLAY_INTERNAL_ERRORS = formula.DISPLAY_INTERNAL_ERRORS;
46
109
  exports.FORMULA_COLUMN_TYPES_MAP = formula.FORMULA_COLUMN_TYPES_MAP;
47
110
  exports.FORMULA_RESULT_TYPE = formula.FORMULA_RESULT_TYPE;
48
111
  exports.HIGHLIGHT_COLORS = selectOption.HIGHLIGHT_COLORS;
49
112
  exports.SELECT_OPTION_COLORS = selectOption.SELECT_OPTION_COLORS;
113
+ exports.NUMBER_SORTER_COLUMN_TYPES = sort.NUMBER_SORTER_COLUMN_TYPES;
114
+ exports.SORT_COLUMN_OPTIONS = sort.SORT_COLUMN_OPTIONS;
115
+ exports.SORT_TYPE = sort.SORT_TYPE;
116
+ exports.TEXT_SORTER_COLUMN_TYPES = sort.TEXT_SORTER_COLUMN_TYPES;
117
+ exports.DISPLAY_GROUP_DATE_GRANULARITY = group.DISPLAY_GROUP_DATE_GRANULARITY;
118
+ exports.DISPLAY_GROUP_GEOLOCATION_GRANULARITY = group.DISPLAY_GROUP_GEOLOCATION_GRANULARITY;
119
+ exports.GROUP_DATE_GRANULARITY = group.GROUP_DATE_GRANULARITY;
120
+ exports.GROUP_GEOLOCATION_GRANULARITY = group.GROUP_GEOLOCATION_GRANULARITY;
121
+ exports.MAX_GROUP_LEVEL = group.MAX_GROUP_LEVEL;
122
+ exports.SUPPORT_GROUP_COLUMN_TYPES = group.SUPPORT_GROUP_COLUMN_TYPES;
123
+ exports.COLUMN_PERMISSION_TYPE = columnPermission.COLUMN_PERMISSION_TYPE;
124
+ exports.REG_NUMBER_DIGIT = reg.REG_NUMBER_DIGIT;
125
+ exports.REG_STRING_NUMBER_PARTS = reg.REG_STRING_NUMBER_PARTS;
126
+ exports.COLOR_GRADATION_OPTIONS = color.COLOR_GRADATION_OPTIONS;
127
+ exports.HEADER_HEIGHT_TYPE = gridHeader.HEADER_HEIGHT_TYPE;
50
128
  exports.generatorBase64Code = common.generatorBase64Code;
129
+ exports.isEmpty = common.isEmpty;
51
130
  exports.isEmptyObject = common.isEmptyObject;
52
- exports.isNumber = common.isNumber;
131
+ exports.getTableById = core.getTableById;
132
+ exports.getTableColumnByKey = column$1.getTableColumnByKey;
133
+ exports.getTableColumnByName = column$1.getTableColumnByName;
134
+ exports.getRowById = row.getRowById;
135
+ exports.getRowsByIds = row.getRowsByIds;
136
+ exports.convertRow = core$1.convertRow;
137
+ exports.isTableRows = core$1.isTableRows;
138
+ exports.getLinkColumnsUsedInFilters = core$2.getLinkColumnsUsedInFilters;
139
+ exports.getViewById = core$2.getViewById;
140
+ exports.isDefaultView = core$2.isDefaultView;
141
+ exports.isFilterView = core$2.isFilterView;
142
+ exports.isGroupView = core$2.isGroupView;
143
+ exports.isSortView = core$2.isSortView;
144
+ exports.getSummaries = summaries.getSummaries;
145
+ exports.getSummariesWithSubgroups = summaries.getSummariesWithSubgroups;
146
+ exports.updateGroupSummaries = summaries.updateGroupSummaries;
147
+ exports.getFormulaColumnsContainLinks = formula$1.getFormulaColumnsContainLinks;
148
+ exports.getSortedFormulaColumns = formula$1.getSortedFormulaColumns;
149
+ exports.getSortedFormulaColumnsContainLinks = formula$1.getSortedFormulaColumnsContainLinks;
150
+ exports.transLink2LinkFormula = formula$1.transLink2LinkFormula;
151
+ exports.getGroupByPath = group$1.getGroupByPath;
152
+ exports.getLinkById = core$3.getLinkById;
153
+ exports.getLinkCellValue = core$3.getLinkCellValue;
154
+ exports.getLinkTableID = core$3.getLinkTableID;
155
+ exports.getLinkedTableID = core$3.getLinkedTableID;
156
+ exports.isValidLink = core$3.isValidLink;
53
157
  exports.getDateDisplayString = date.getDateDisplayString;
54
158
  exports.getDurationDisplayString = duration.getDurationDisplayString;
55
159
  exports.getNumberDisplayString = number.getNumberDisplayString;
160
+ exports.getPrecisionNumber = number.getPrecisionNumber;
56
161
  exports.replaceNumberNotAllowInput = number.replaceNumberNotAllowInput;
162
+ exports.getColumnOptionNameById = option.getColumnOptionNameById;
57
163
  exports.getMultipleOptionName = option.getMultipleOptionName;
164
+ exports.getOption = option.getOption;
58
165
  exports.getOptionName = option.getOptionName;
166
+ exports.getCollaborator = collaborator.getCollaborator;
59
167
  exports.getCollaboratorsName = collaborator.getCollaboratorsName;
60
168
  exports.getCollaboratorsNames = collaborator.getCollaboratorsNames;
169
+ exports.getGeolocationByGranularity = geolocation.getGeolocationByGranularity;
61
170
  exports.getGeolocationDisplayString = geolocation.getGeolocationDisplayString;
62
171
  exports.getDigitalSignImageUrl = digitalSign.getDigitalSignImageUrl;
63
172
  exports.getLongtextDisplayString = longText.getLongtextDisplayString;
64
173
  exports.getCellValueDisplayString = cellValue.getCellValueDisplayString;
174
+ exports.getCellValueStringResult = cellValue.getCellValueStringResult;
65
175
  exports.getFormulaDisplayString = cellValue.getFormulaDisplayString;
176
+ exports.getRateDisplayString = rate.getRateDisplayString;
177
+ exports.formatDurationToNumber = number$1.formatDurationToNumber;
66
178
  exports.formatStringToNumber = number$1.formatStringToNumber;
67
179
  exports.getFloatNumber = number$1.getFloatNumber;
68
- exports.getColumnOptions = common$1.getColumnOptions;
69
- exports.isDateColumn = date$1.isDateColumn;
180
+ exports.formatTextToDate = date$1.formatTextToDate;
181
+ exports.createOption = option$1.createOption;
182
+ exports.generateOptionID = option$1.generateOptionID;
183
+ exports.generatorCellOption = option$1.generatorCellOption;
184
+ exports.generatorCellOptions = option$1.generatorCellOptions;
185
+ exports.getColumnOptions = option$1.getColumnOptions;
186
+ exports.isDateColumn = date$2.isDateColumn;
70
187
  exports.isNumberColumn = number$2.isNumberColumn;
71
188
  exports.isNumericColumn = number$2.isNumericColumn;
72
- exports.DateUtils = date$2.DateUtils;
189
+ exports.DateUtils = date$3.DateUtils;
190
+ exports.isNumber = number$3.isNumber;
191
+ exports.isNumberEqual = number$3.isNumberEqual;
73
192
  exports.ValidateFilter = filter.ValidateFilter;
74
193
  exports.isValidEmail = email.isValidEmail;
194
+ exports.isValidPosition = geolocation$1.isValidPosition;
195
+ exports.deleteInvalidFilter = core$4.deleteInvalidFilter;
196
+ exports.getFormattedFilter = core$4.getFormattedFilter;
197
+ exports.getFormattedFilterOtherDate = core$4.getFormattedFilterOtherDate;
198
+ exports.getFormattedFilters = core$4.getFormattedFilters;
199
+ exports.getValidFilters = core$4.getValidFilters;
200
+ exports.getValidFiltersWithoutError = core$4.getValidFiltersWithoutError;
201
+ exports.otherDate = core$4.otherDate;
202
+ exports.checkboxFilter = checkbox.checkboxFilter;
203
+ exports.collaboratorFilter = collaborator$1.collaboratorFilter;
204
+ exports.creatorFilter = creator.creatorFilter;
205
+ exports.dateFilter = date$4.dateFilter;
206
+ exports.digitalSignFilter = digitalSign$1.digitalSignFilter;
207
+ exports.fileFilter = file.fileFilter;
208
+ exports.formulaFilter = formula$2.formulaFilter;
209
+ exports.geolocationFilter = geolocation$2.geolocationFilter;
210
+ exports.textFilter = text.textFilter;
211
+ exports.longTextFilter = longText$1.longTextFilter;
212
+ exports.multipleSelectFilter = multipleSelect.multipleSelectFilter;
213
+ exports.numberFilter = number$4.numberFilter;
214
+ exports.singleSelectFilter = singleSelect.singleSelectFilter;
215
+ exports.linkFilter = link.linkFilter;
216
+ exports.filterRow = filterRow.filterRow;
217
+ exports.filterRows = filterRow.filterRows;
218
+ exports.getFilteredRowsWithoutFormulaCalculation = filterRow.getFilteredRowsWithoutFormulaCalculation;
219
+ exports.deleteInvalidSort = core$5.deleteInvalidSort;
220
+ exports.getMultipleIndexesOrderbyOptions = core$5.getMultipleIndexesOrderbyOptions;
221
+ exports.getValidSorts = core$5.getValidSorts;
222
+ exports.isValidSort = core$5.isValidSort;
223
+ exports.sortCheckbox = checkbox$1.sortCheckbox;
224
+ exports.sortCollaborator = collaborator$2.sortCollaborator;
225
+ exports.sortDate = date$5.sortDate;
226
+ exports.sortByArrayType = array.sortByArrayType;
227
+ exports.sortFormula = formula$3.sortFormula;
228
+ exports.sortLink = link$1.sortLink;
229
+ exports.sortMultipleSelect = multipleSelect$1.sortMultipleSelect;
230
+ exports.sortNumber = number$5.sortNumber;
231
+ exports.sortSingleSelect = singleSelect$1.sortSingleSelect;
232
+ exports.compareString = text$1.compareString;
233
+ exports.sortText = text$1.sortText;
234
+ exports.sortRowsWithMultiSorts = sortRow.sortRowsWithMultiSorts;
235
+ exports.sortTableRows = sortRow.sortTableRows;
236
+ exports.deleteInvalidGroupby = core$6.deleteInvalidGroupby;
237
+ exports.getValidGroupbys = core$6.getValidGroupbys;
238
+ exports.isValidGroupby = core$6.isValidGroupby;
239
+ exports.getGroupedRowsWithoutFormulaCalculation = groupRow.getGroupedRowsWithoutFormulaCalculation;
240
+ exports.groupTableRows = groupRow.groupTableRows;
241
+ exports.groupViewRows = groupRow.groupViewRows;
242
+ exports.GradientColorUtils = gradientColor["default"];
243
+ exports.ColumnColorUtils = columnColor["default"];
244
+ exports.RowColorUtils = rowColor["default"];
75
245
  exports.FILTER_COLUMN_OPTIONS = filterColumnOptions.FILTER_COLUMN_OPTIONS;
76
246
  exports.FILTER_TERM_MODIFIER_SHOW = filterModifier.FILTER_TERM_MODIFIER_SHOW;
77
247
  exports.FILTER_TERM_MODIFIER_TYPE = filterModifier.FILTER_TERM_MODIFIER_TYPE;