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