dtable-utils 0.0.2 → 0.0.3-beta.1

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 (150) hide show
  1. package/README.md +30 -2
  2. package/dist/index.js +1 -1
  3. package/es/cell-value-get/cell-value.js +227 -19
  4. package/es/cell-value-get/collaborator.js +9 -3
  5. package/es/cell-value-get/digital-sign.js +1 -1
  6. package/es/cell-value-get/geolocation.js +29 -5
  7. package/es/cell-value-get/long-text.js +1 -1
  8. package/es/cell-value-get/number.js +42 -18
  9. package/es/cell-value-get/option.js +17 -7
  10. package/es/cell-value-get/rate.js +6 -0
  11. package/es/cell-value-set/date.js +20 -0
  12. package/es/cell-value-set/number.js +53 -1
  13. package/es/color/gradient-color.js +100 -0
  14. package/es/column/color.js +415 -0
  15. package/es/column/{common.js → core.js} +3 -15
  16. package/es/column/date.js +2 -3
  17. package/es/column/number.js +3 -5
  18. package/es/column/option.js +115 -0
  19. package/es/common.js +10 -1
  20. package/es/constants/color.js +16 -0
  21. package/es/constants/column-permission.js +7 -0
  22. package/es/constants/column.js +127 -2
  23. package/es/constants/filter/index.js +5 -1
  24. package/es/constants/grid-header.js +6 -0
  25. package/es/constants/group.js +23 -0
  26. package/es/constants/limit.js +3 -0
  27. package/es/constants/reg.js +4 -0
  28. package/es/constants/row-color.js +11 -0
  29. package/es/constants/sort.js +11 -0
  30. package/es/date.js +1 -1
  31. package/es/filter/core.js +287 -0
  32. package/es/filter/filter-column/array.js +82 -0
  33. package/es/filter/filter-column/checkbox.js +8 -0
  34. package/es/filter/filter-column/collaborator.js +67 -0
  35. package/es/filter/filter-column/creator.js +50 -0
  36. package/es/filter/filter-column/date.js +59 -0
  37. package/es/filter/filter-column/digital-sign.js +26 -0
  38. package/es/filter/filter-column/file.js +24 -0
  39. package/es/filter/filter-column/formula.js +49 -0
  40. package/es/filter/filter-column/geolocation.js +53 -0
  41. package/es/filter/filter-column/link.js +12 -0
  42. package/es/filter/filter-column/long-text.js +25 -0
  43. package/es/filter/filter-column/multiple-select.js +60 -0
  44. package/es/filter/filter-column/number.js +93 -0
  45. package/es/filter/filter-column/single-select.js +41 -0
  46. package/es/filter/filter-column/text.js +55 -0
  47. package/es/filter/filter-row.js +198 -0
  48. package/es/group/core.js +107 -0
  49. package/es/group/group-row.js +366 -0
  50. package/es/index.js +62 -10
  51. package/es/link/core.js +78 -0
  52. package/es/number.js +13 -0
  53. package/es/row/color.js +278 -0
  54. package/es/row/core.js +161 -0
  55. package/es/sort/core.js +32 -0
  56. package/es/sort/sort-column/array.js +63 -0
  57. package/es/sort/sort-column/checkbox.js +15 -0
  58. package/es/sort/sort-column/collaborator.js +9 -0
  59. package/es/sort/sort-column/date.js +25 -0
  60. package/es/sort/sort-column/formula.js +40 -0
  61. package/es/sort/sort-column/link.js +23 -0
  62. package/es/sort/sort-column/multiple-select.js +45 -0
  63. package/es/sort/sort-column/number.js +18 -0
  64. package/es/sort/sort-column/single-select.js +22 -0
  65. package/es/sort/sort-column/text.js +47 -0
  66. package/es/sort/sort-row.js +126 -0
  67. package/es/table/column.js +27 -0
  68. package/es/table/core.js +14 -0
  69. package/es/table/index.js +14 -0
  70. package/es/table/row.js +25 -0
  71. package/es/validate/filter.js +1 -1
  72. package/es/validate/geolocation.js +5 -0
  73. package/es/view/core.js +135 -0
  74. package/es/view/formula.js +143 -0
  75. package/es/view/group.js +32 -0
  76. package/es/view/summaries.js +179 -0
  77. package/lib/cell-value-get/cell-value.js +231 -18
  78. package/lib/cell-value-get/collaborator.js +9 -2
  79. package/lib/cell-value-get/digital-sign.js +1 -1
  80. package/lib/cell-value-get/geolocation.js +30 -5
  81. package/lib/cell-value-get/long-text.js +1 -1
  82. package/lib/cell-value-get/number.js +42 -17
  83. package/lib/cell-value-get/option.js +18 -6
  84. package/lib/cell-value-get/rate.js +10 -0
  85. package/lib/cell-value-set/date.js +24 -0
  86. package/lib/cell-value-set/number.js +53 -0
  87. package/lib/color/gradient-color.js +110 -0
  88. package/lib/column/color.js +424 -0
  89. package/lib/column/{common.js → core.js} +3 -16
  90. package/lib/column/date.js +2 -3
  91. package/lib/column/number.js +3 -5
  92. package/lib/column/option.js +123 -0
  93. package/lib/common.js +14 -0
  94. package/lib/constants/color.js +20 -0
  95. package/lib/constants/column-permission.js +11 -0
  96. package/lib/constants/column.js +134 -1
  97. package/lib/constants/filter/index.js +5 -0
  98. package/lib/constants/grid-header.js +10 -0
  99. package/lib/constants/group.js +36 -0
  100. package/lib/constants/limit.js +7 -0
  101. package/lib/constants/reg.js +9 -0
  102. package/lib/constants/row-color.js +17 -0
  103. package/lib/constants/sort.js +18 -0
  104. package/lib/filter/core.js +301 -0
  105. package/lib/filter/filter-column/array.js +86 -0
  106. package/lib/filter/filter-column/checkbox.js +12 -0
  107. package/lib/filter/filter-column/collaborator.js +75 -0
  108. package/lib/filter/filter-column/creator.js +54 -0
  109. package/lib/filter/filter-column/date.js +63 -0
  110. package/lib/filter/filter-column/digital-sign.js +30 -0
  111. package/lib/filter/filter-column/file.js +28 -0
  112. package/lib/filter/filter-column/formula.js +53 -0
  113. package/lib/filter/filter-column/geolocation.js +57 -0
  114. package/lib/filter/filter-column/link.js +16 -0
  115. package/lib/filter/filter-column/long-text.js +29 -0
  116. package/lib/filter/filter-column/multiple-select.js +68 -0
  117. package/lib/filter/filter-column/number.js +97 -0
  118. package/lib/filter/filter-column/single-select.js +45 -0
  119. package/lib/filter/filter-column/text.js +59 -0
  120. package/lib/filter/filter-row.js +204 -0
  121. package/lib/group/core.js +117 -0
  122. package/lib/group/group-row.js +377 -0
  123. package/lib/index.js +176 -6
  124. package/lib/link/core.js +90 -0
  125. package/lib/number.js +18 -0
  126. package/lib/row/color.js +286 -0
  127. package/lib/row/core.js +170 -0
  128. package/lib/sort/core.js +37 -0
  129. package/lib/sort/sort-column/array.js +67 -0
  130. package/lib/sort/sort-column/checkbox.js +19 -0
  131. package/lib/sort/sort-column/collaborator.js +13 -0
  132. package/lib/sort/sort-column/date.js +29 -0
  133. package/lib/sort/sort-column/formula.js +44 -0
  134. package/lib/sort/sort-column/link.js +27 -0
  135. package/lib/sort/sort-column/multiple-select.js +50 -0
  136. package/lib/sort/sort-column/number.js +22 -0
  137. package/lib/sort/sort-column/single-select.js +26 -0
  138. package/lib/sort/sort-column/text.js +52 -0
  139. package/lib/sort/sort-row.js +136 -0
  140. package/lib/table/column.js +32 -0
  141. package/lib/table/core.js +18 -0
  142. package/lib/table/index.js +18 -0
  143. package/lib/table/row.js +30 -0
  144. package/lib/validate/filter.js +3 -3
  145. package/lib/validate/geolocation.js +9 -0
  146. package/lib/view/core.js +144 -0
  147. package/lib/view/formula.js +150 -0
  148. package/lib/view/group.js +36 -0
  149. package/lib/view/summaries.js +185 -0
  150. package/package.json +4 -2
@@ -0,0 +1,415 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import deepCopy from 'deep-copy';
3
+ import { deleteInvalidFilter, getFormattedFilters } from '../filter/core.js';
4
+ import { filterRows, filterRow } from '../filter/filter-row.js';
5
+ import { ValidateFilter } from '../validate/filter.js';
6
+ import { isNumberColumn } from './number.js';
7
+ import { getRowsByIds } from '../table/row.js';
8
+ import { sortTableRows } from '../sort/sort-row.js';
9
+ import { isTableRows } from '../row/core.js';
10
+ import RowColorUtils from '../row/color.js';
11
+ import GradientColorUtils from '../color/gradient-color.js';
12
+ import { CellType } from '../constants/cell-type.js';
13
+ import '../constants/column.js';
14
+ import { FILTER_CONJUNCTION_TYPE } from '../constants/filter/index.js';
15
+ import '../constants/formula.js';
16
+ import '../constants/sort.js';
17
+ import '../constants/group.js';
18
+
19
+ 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; }
20
+ 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; }
21
+ var COMPUTED_COLUMN_TYPES = [CellType.LINK, CellType.FORMULA, CellType.LINK_FORMULA];
22
+ var BY_RULES = 'by_rules';
23
+ var BY_NUMERIC_RANGE = 'by_numeric_range';
24
+ var BY_REPEAT_VALUE = 'by_repeat_value';
25
+ var isColumnHasColorRules = function isColumnHasColorRules(column) {
26
+ var colorbys = column && column.colorbys;
27
+ if (!colorbys) return false;
28
+ var type = colorbys.type,
29
+ colorByRules = colorbys.color_by_rules,
30
+ rangeSettings = colorbys.range_settings,
31
+ repeatValueSettings = colorbys.repeat_value_settings;
32
+ if (type === BY_RULES) {
33
+ return colorByRules && Array.isArray(colorByRules) && colorByRules.length > 0;
34
+ }
35
+ if (type === BY_REPEAT_VALUE) {
36
+ return repeatValueSettings;
37
+ }
38
+
39
+ // type === BY_NUMERIC_RANGE
40
+ return rangeSettings && Object.keys(rangeSettings).length > 0;
41
+ };
42
+ var hasRelatedColumnColorRule = function hasRelatedColumnColorRule(columns, updatedColumnKeyMap) {
43
+ return (
44
+ // the updated column is one of current table, and the column has color_rules
45
+ columns.some(function (column) {
46
+ return updatedColumnKeyMap[column.key] && isColumnHasColorRules(column);
47
+ })
48
+ );
49
+ };
50
+ var isColumnColorRulesValid = function isColumnColorRulesValid(column) {
51
+ var columns = [column];
52
+ var colorbys = column.colorbys;
53
+ var type = colorbys.type,
54
+ colorByRules = colorbys.color_by_rules;
55
+ if (type === BY_RULES) {
56
+ var isHasValidColorRule = colorByRules.some(function (rule) {
57
+ var filters = rule.filters;
58
+ if (filters.length === 0) return false;
59
+ return filters.some(function (filter) {
60
+ return !ValidateFilter.validate(filter, columns).error_message;
61
+ });
62
+ });
63
+ return isHasValidColorRule;
64
+ }
65
+ if (type === BY_REPEAT_VALUE) {
66
+ return true;
67
+ }
68
+ if (type === BY_NUMERIC_RANGE) {
69
+ // gradient color is only used for number column
70
+ return isNumberColumn(column);
71
+ }
72
+ return false;
73
+ };
74
+ var isColumnColorsView = function isColumnColorsView(columns) {
75
+ return columns.some(function (column) {
76
+ if (!isColumnHasColorRules(column)) return false;
77
+
78
+ // valid color rule: the column maybe changed type
79
+ if (!isColumnColorRulesValid(column)) return false;
80
+ return true;
81
+ });
82
+ };
83
+ var getValidRulesColumns = function getValidRulesColumns(columns) {
84
+ // judgement current table's columns has own color_rules columns or not
85
+ var ownRulesColumns = columns.filter(function (column) {
86
+ return isColumnHasColorRules(column);
87
+ });
88
+ if (ownRulesColumns.length === 0) return [];
89
+
90
+ // judgement current table's columns has valid color_rules columns ro not
91
+ var validRulesColumns = ownRulesColumns.filter(function (column) {
92
+ return isColumnColorRulesValid(column);
93
+ });
94
+ if (validRulesColumns.length === 0) return [];
95
+ return validRulesColumns;
96
+ };
97
+ var getSortedViewRows = function getSortedViewRows(column, view, table, value, _ref) {
98
+ var username = _ref.username,
99
+ userId = _ref.userId;
100
+ var filter = {
101
+ column_key: column.key,
102
+ filter_predicate: 'is_not_empty',
103
+ filter_term: '',
104
+ column: column
105
+ };
106
+ var formulaRows = view.formula_rows;
107
+ var filterRowIds = filterRows(FILTER_CONJUNCTION_TYPE.AND, [filter], table.rows, {
108
+ formulaRows: formulaRows,
109
+ username: username,
110
+ userId: userId
111
+ });
112
+ var sort = {
113
+ sort_type: 'up',
114
+ column_key: column.key
115
+ };
116
+ var rows = getRowsByIds(table, filterRowIds);
117
+ var sortedRowIds = sortTableRows([sort], rows, [column], {
118
+ formulaRows: formulaRows,
119
+ value: value
120
+ });
121
+ return getRowsByIds(table, sortedRowIds);
122
+ };
123
+ var getCellValue = function getCellValue(row, column, formulaRows) {
124
+ var key = column.key,
125
+ type = column.type;
126
+ var cellValue = row[key];
127
+ if (COMPUTED_COLUMN_TYPES.includes(type)) {
128
+ var formulaRow = formulaRows && formulaRows[row._id] || {};
129
+ if (CellType.LINK === type) {
130
+ var startCellValues = formulaRow[key] && Array.isArray(formulaRow[key]) ? formulaRow[key] : [];
131
+ var _ref2 = startCellValues.length > 0 ? startCellValues[0] : {},
132
+ _ref2$display_value = _ref2.display_value,
133
+ display_value = _ref2$display_value === void 0 ? null : _ref2$display_value;
134
+ cellValue = display_value;
135
+ } else {
136
+ var cellValues = formulaRow[key];
137
+ cellValue = Array.isArray(cellValues) ? cellValues[0] : cellValues;
138
+ }
139
+ }
140
+ return cellValue;
141
+ };
142
+ var getFormattedColumn = function getFormattedColumn(column, view, table, value, rows, _ref3) {
143
+ var username = _ref3.username,
144
+ userId = _ref3.userId;
145
+ var dupColumn = deepCopy(column);
146
+ var colorbys = dupColumn.colorbys;
147
+ var type = colorbys.type,
148
+ colorByRules = colorbys.color_by_rules,
149
+ rangeSettings = colorbys.range_settings,
150
+ repeatValueSettings = colorbys.repeat_value_settings,
151
+ duplicateColumnKey = colorbys.duplicate_column_key;
152
+ if (type === BY_RULES) {
153
+ // formatted color rules
154
+ var formattedColorRules = colorByRules.map(function (colorRule) {
155
+ var filters = colorRule.filters;
156
+ var validFilters = [];
157
+ try {
158
+ validFilters = deleteInvalidFilter(filters, [column]);
159
+ } catch (err) {
160
+ validFilters = [];
161
+ }
162
+ validFilters = getFormattedFilters(validFilters);
163
+
164
+ // return formatted colorRule
165
+ return _objectSpread(_objectSpread({}, colorRule), {}, {
166
+ filters: validFilters
167
+ });
168
+ });
169
+ dupColumn.colorbys = _objectSpread(_objectSpread({}, colorbys), {}, {
170
+ color_by_rules: formattedColorRules
171
+ });
172
+ return dupColumn;
173
+ }
174
+ if (type === BY_REPEAT_VALUE) {
175
+ var _ref4 = value || {},
176
+ _ref4$collaborators = _ref4.collaborators,
177
+ collaborators = _ref4$collaborators === void 0 ? [] : _ref4$collaborators;
178
+ var formattedColumn = RowColorUtils.getFormattedDuplicateColumns([dupColumn], [duplicateColumnKey], {
179
+ collaborators: collaborators
180
+ });
181
+ var duplicate_rows_ids_map = {};
182
+ var formulaRows = view.formula_rows;
183
+ for (var i = 0; i < rows.length; i++) {
184
+ var row = rows[i];
185
+ var rowId = row._id;
186
+ var formulaRow = formulaRows && formulaRows[rowId];
187
+ var rowValue = RowColorUtils.getDuplicateRowValue(row, formattedColumn, formulaRow);
188
+ if (!rowValue) continue;
189
+ var rowIds = duplicate_rows_ids_map[rowValue];
190
+ if (rowIds && rowIds.length > 0) {
191
+ rowIds.push(rowId);
192
+ } else {
193
+ duplicate_rows_ids_map[rowValue] = [rowId];
194
+ }
195
+ }
196
+ dupColumn.duplicate_rows_ids_map = duplicate_rows_ids_map;
197
+ dupColumn.colorbys = _objectSpread(_objectSpread({}, colorbys), {}, {
198
+ repeat_value_settings: repeatValueSettings
199
+ });
200
+ return dupColumn;
201
+ }
202
+ // type === BY_NUMERIC_RANGE
203
+ // column type has been changed
204
+ if (!isNumberColumn(column)) {
205
+ dupColumn.gradientColorUtils = null;
206
+ dupColumn.colorbys = _objectSpread(_objectSpread({}, colorbys), {}, {
207
+ range_settings: {}
208
+ });
209
+ return dupColumn;
210
+ }
211
+
212
+ // add gradient_colors computed properties for dumColumn
213
+ var colorType = rangeSettings.color_type,
214
+ isCustomStartValue = rangeSettings.is_custom_start_value,
215
+ isCustomEndValue = rangeSettings.is_custom_end_value,
216
+ startValue = rangeSettings.start_value,
217
+ endValue = rangeSettings.end_value;
218
+ var min = startValue;
219
+ var max = endValue;
220
+ if ((!isCustomStartValue || !isCustomEndValue) && table.rows.length > 0) {
221
+ // sort rows
222
+ var sortedRows = getSortedViewRows(column, view, table, value, {
223
+ username: username,
224
+ userId: userId
225
+ });
226
+ var _formulaRows = view.formula_rows;
227
+ // number rows length need great than zero
228
+ if (sortedRows.length > 0) {
229
+ var startRow = sortedRows[0];
230
+ var endRow = sortedRows[sortedRows.length - 1];
231
+ var startCellValue = getCellValue(startRow, column, _formulaRows);
232
+ var endCellValue = getCellValue(endRow, column, _formulaRows);
233
+ min = isCustomStartValue ? startValue : startCellValue;
234
+ max = isCustomEndValue ? endValue : endCellValue;
235
+ }
236
+ }
237
+ var gradientColorUtils = new GradientColorUtils({
238
+ colorType: colorType,
239
+ min: min,
240
+ max: max
241
+ });
242
+ dupColumn.gradientColorUtils = gradientColorUtils;
243
+ return dupColumn;
244
+ };
245
+ var getColumnColors = function getColumnColors(rows, view, table, value) {
246
+ var _ref5 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
247
+ _ref5$username = _ref5.username,
248
+ username = _ref5$username === void 0 ? '' : _ref5$username,
249
+ _ref5$userId = _ref5.userId,
250
+ userId = _ref5$userId === void 0 ? '' : _ref5$userId;
251
+ var columns = table.columns;
252
+ var validRulesColumns = getValidRulesColumns(columns);
253
+ if (validRulesColumns.length === 0) return {};
254
+
255
+ // formatted column's color_rules
256
+ validRulesColumns = validRulesColumns.map(function (column) {
257
+ return getFormattedColumn(column, view, table, value, rows, {
258
+ username: username,
259
+ userId: userId
260
+ });
261
+ });
262
+
263
+ /**
264
+ * column_colors data struct
265
+ * {
266
+ * row_id: {[column_key]: value, [column_key]: value},
267
+ * row_id: {[column_key]: value, [column_key]: value},
268
+ * }
269
+ */
270
+ var column_colors = {};
271
+ var formulaRows = view.formula_rows;
272
+ var tableRows = isTableRows(rows) ? rows : getRowsByIds(table, rows);
273
+ var rowsLength = tableRows.length;
274
+
275
+ // forEach rows
276
+ var _loop = function _loop() {
277
+ var row = tableRows[i];
278
+
279
+ // forEach own color_rules columns
280
+ var column_color = {};
281
+ var rowId = row._id;
282
+ var formulaRow = formulaRows && formulaRows[rowId] || {};
283
+ for (var j = 0; j < validRulesColumns.length; j++) {
284
+ var column = validRulesColumns[j];
285
+ var columnKey = column.key,
286
+ colorbys = column.colorbys,
287
+ _column$duplicate_row = column.duplicate_rows_ids_map,
288
+ duplicate_rows_ids_map = _column$duplicate_row === void 0 ? {} : _column$duplicate_row;
289
+ var type = colorbys.type,
290
+ colorByRules = colorbys.color_by_rules,
291
+ rangeSettings = colorbys.range_settings,
292
+ repeatValueSettings = colorbys.repeat_value_settings,
293
+ duplicateColumnKey = colorbys.duplicate_column_key;
294
+ if (type === BY_RULES) {
295
+ // obtain the row data that meets the rules and record the color
296
+ for (var m = 0; m < colorByRules.length; m++) {
297
+ var colorRule = colorByRules[m];
298
+ var filter_conjunction = colorRule.filter_conjunction,
299
+ filters = colorRule.filters,
300
+ color = colorRule.color;
301
+ if (filterRow(row, filter_conjunction, filters, {
302
+ formulaRow: formulaRow,
303
+ username: username,
304
+ userId: userId
305
+ })) {
306
+ column_color[columnKey] = color;
307
+ break;
308
+ }
309
+ }
310
+ }
311
+ if (type === BY_REPEAT_VALUE) {
312
+ var _color = repeatValueSettings.color;
313
+ var _ref6 = value || {},
314
+ _ref6$collaborators = _ref6.collaborators,
315
+ collaborators = _ref6$collaborators === void 0 ? [] : _ref6$collaborators;
316
+ var formattedColumn = RowColorUtils.getFormattedDuplicateColumns([column], [duplicateColumnKey], {
317
+ collaborators: collaborators
318
+ });
319
+ var rowValue = RowColorUtils.getDuplicateRowValue(row, formattedColumn, formulaRow);
320
+ if (!rowValue) continue;
321
+ var rowIds = duplicate_rows_ids_map[rowValue];
322
+ if (rowIds && rowIds.length > 1) {
323
+ var hasRowId = rowIds.some(function (id) {
324
+ return id === rowId;
325
+ });
326
+ if (hasRowId) {
327
+ column_color[columnKey] = _color;
328
+ var firstDuplicateRowId = rowIds[0];
329
+ if (!column_colors[firstDuplicateRowId]) {
330
+ column_colors[firstDuplicateRowId] = column_color;
331
+ }
332
+ }
333
+ }
334
+ }
335
+ if (type === BY_NUMERIC_RANGE) {
336
+ if (Object.keys(rangeSettings).length === 0) break;
337
+ var cellValue = getCellValue(row, column, formulaRows);
338
+ if (cellValue || cellValue === 0) {
339
+ var gradientColorUtils = column.gradientColorUtils;
340
+ var cellColor = gradientColorUtils.getCellColor(cellValue);
341
+ if (cellColor) {
342
+ column_color[columnKey] = cellColor;
343
+ }
344
+ }
345
+ }
346
+ }
347
+ if (Object.keys(column_color).length > 0) {
348
+ column_colors[rowId] = column_color;
349
+ }
350
+ };
351
+ for (var i = 0; i < rowsLength; i++) {
352
+ _loop();
353
+ }
354
+ return column_colors;
355
+ };
356
+ var updateColumnColorsByUpdateRows = function updateColumnColorsByUpdateRows(rows, view, table, value) {
357
+ var _ref7 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
358
+ _ref7$username = _ref7.username,
359
+ username = _ref7$username === void 0 ? '' : _ref7$username,
360
+ _ref7$userId = _ref7.userId,
361
+ userId = _ref7$userId === void 0 ? '' : _ref7$userId;
362
+ var columns = table.columns;
363
+ var validRulesColumns = getValidRulesColumns(columns);
364
+ if (validRulesColumns.length === 0) return {};
365
+ var hasByGradientColorRule = validRulesColumns.some(function (column) {
366
+ var colorbys = column.colorbys;
367
+ return colorbys.type === BY_NUMERIC_RANGE;
368
+ });
369
+ var hasRepeatValueColorRule = validRulesColumns.some(function (column) {
370
+ var colorbys = column.colorbys;
371
+ return colorbys.type === BY_REPEAT_VALUE;
372
+ });
373
+
374
+ // if columns has one column which colorbys type is by_gradient_color,
375
+ // recalculate all the rows background color
376
+ if (hasByGradientColorRule || hasRepeatValueColorRule) {
377
+ view.column_colors = getColumnColors(table.rows, view, table, value, {
378
+ username: username,
379
+ userId: userId
380
+ });
381
+ return view.column_colors;
382
+ }
383
+
384
+ // recalculate the updated rows background color
385
+ var updatedRows = isTableRows(rows) ? rows : getRowsByIds(table, rows);
386
+ var columnColors = getColumnColors(updatedRows, view, table, value, {
387
+ username: username,
388
+ userId: userId
389
+ });
390
+ var column_colors = view.column_colors;
391
+ if (!column_colors) {
392
+ column_colors = {};
393
+ view.column_colors = column_colors;
394
+ }
395
+ updatedRows.forEach(function (row) {
396
+ var rowId = row._id;
397
+ var columnColor = columnColors[rowId];
398
+ column_colors[rowId] = columnColor;
399
+ });
400
+ return view.column_colors;
401
+ };
402
+ var ColumnColorUtils = {
403
+ isColumnHasColorRules: isColumnHasColorRules,
404
+ hasRelatedColumnColorRule: hasRelatedColumnColorRule,
405
+ isColumnColorRulesValid: isColumnColorRulesValid,
406
+ isColumnColorsView: isColumnColorsView,
407
+ getValidRulesColumns: getValidRulesColumns,
408
+ getSortedViewRows: getSortedViewRows,
409
+ getCellValue: getCellValue,
410
+ getFormattedColumn: getFormattedColumn,
411
+ getColumnColors: getColumnColors,
412
+ updateColumnColorsByUpdateRows: updateColumnColorsByUpdateRows
413
+ };
414
+
415
+ export { ColumnColorUtils as default };
@@ -3,10 +3,10 @@ import { FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE } from '../constants/form
3
3
 
4
4
  /**
5
5
  * Get column type.
6
- * @param {object} column { type: 'xxx', ... }
6
+ * @param {object} column { type, ... }
7
7
  * @returns column type
8
8
  */
9
- var getCheckType = function getCheckType(column) {
9
+ var getColumnType = function getColumnType(column) {
10
10
  var type = column.type,
11
11
  data = column.data;
12
12
  if (FORMULA_COLUMN_TYPES_MAP[type]) {
@@ -26,16 +26,4 @@ var getCheckType = function getCheckType(column) {
26
26
  return type;
27
27
  };
28
28
 
29
- /**
30
- * Get options from single-select/multiple-select column.
31
- * @param {object} column e.g. { type, data: { options: [] } }
32
- * @returns options, array
33
- */
34
- var getColumnOptions = function getColumnOptions(column) {
35
- if (!column || !column.data || !Array.isArray(column.data.options)) {
36
- return [];
37
- }
38
- return column.data.options;
39
- };
40
-
41
- export { getCheckType, getColumnOptions };
29
+ export { getColumnType };
package/es/column/date.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getCheckType } from './common.js';
1
+ import { getColumnType } from './core.js';
2
2
  import { DATE_COLUMN_OPTIONS } from '../constants/column.js';
3
3
 
4
4
  /**
@@ -10,8 +10,7 @@ import { DATE_COLUMN_OPTIONS } from '../constants/column.js';
10
10
  * @returns true/false, bool
11
11
  */
12
12
  var isDateColumn = function isDateColumn(column) {
13
- var checkType = getCheckType(column);
14
- return DATE_COLUMN_OPTIONS.includes(checkType);
13
+ return DATE_COLUMN_OPTIONS.includes(getColumnType(column));
15
14
  };
16
15
 
17
16
  export { isDateColumn };
@@ -1,4 +1,4 @@
1
- import { getCheckType } from './common.js';
1
+ import { getColumnType } from './core.js';
2
2
  import { CellType } from '../constants/cell-type.js';
3
3
  import { NUMERIC_COLUMNS_TYPES } from '../constants/column.js';
4
4
 
@@ -11,8 +11,7 @@ import { NUMERIC_COLUMNS_TYPES } from '../constants/column.js';
11
11
  * @returns true/false, bool
12
12
  */
13
13
  var isNumericColumn = function isNumericColumn(column) {
14
- var checkType = getCheckType(column);
15
- return NUMERIC_COLUMNS_TYPES.includes(checkType);
14
+ return NUMERIC_COLUMNS_TYPES.includes(getColumnType(column));
16
15
  };
17
16
 
18
17
  /**
@@ -24,8 +23,7 @@ var isNumericColumn = function isNumericColumn(column) {
24
23
  * @returns true/false, bool
25
24
  */
26
25
  var isNumberColumn = function isNumberColumn(column) {
27
- var checkType = getCheckType(column);
28
- return checkType === CellType.NUMBER;
26
+ return getColumnType(column) === CellType.NUMBER;
29
27
  };
30
28
 
31
29
  export { isNumberColumn, isNumericColumn };
@@ -0,0 +1,115 @@
1
+ import { SELECT_OPTION_COLORS } from '../constants/select-option.js';
2
+
3
+ /**
4
+ * Get options from single-select/multiple-select column.
5
+ * @param {object} column e.g. { type, data: { options: [] } }
6
+ * @returns options, array
7
+ */
8
+ var getColumnOptions = function getColumnOptions(column) {
9
+ if (!column || !column.data || !Array.isArray(column.data.options)) {
10
+ return [];
11
+ }
12
+ return column.data.options;
13
+ };
14
+ var generateOptionID = function generateOptionID(options) {
15
+ if (options.length === 1) return String(Math.floor(Math.random() * Math.pow(10, 6)));
16
+ var optionID;
17
+ var isIDUnique = false;
18
+ while (!isIDUnique) {
19
+ optionID = String(Math.floor(Math.random() * Math.pow(10, 6)));
20
+
21
+ // eslint-disable-next-line
22
+ isIDUnique = options.every(function (option) {
23
+ return option.id !== optionID;
24
+ });
25
+ if (isIDUnique) {
26
+ break;
27
+ }
28
+ }
29
+ return optionID;
30
+ };
31
+ var getRandomOptionColor = function getRandomOptionColor(options) {
32
+ var defaultOptions = SELECT_OPTION_COLORS.slice(12, 24);
33
+ var colorIdx = Math.floor(Math.random() * defaultOptions.length);
34
+ if (!Array.isArray(options) || options.length === 0) {
35
+ return defaultOptions[colorIdx];
36
+ }
37
+
38
+ // Avoid using the same color for adjacent labels
39
+ var adjacentOptions = options.slice(-(defaultOptions.length - 1));
40
+ var adjacentOptionsColorIdxArr = [];
41
+ var selectOptionColorObj = {};
42
+ defaultOptions.forEach(function (colorItem, index) {
43
+ selectOptionColorObj[colorItem.COLOR] = index;
44
+ });
45
+ adjacentOptions.forEach(function (option) {
46
+ var optionColorIdx = selectOptionColorObj[option.color];
47
+ adjacentOptionsColorIdxArr.push(optionColorIdx);
48
+ });
49
+
50
+ // eslint-disable-next-line
51
+ while (adjacentOptionsColorIdxArr.indexOf(colorIdx) != -1) {
52
+ colorIdx = Math.floor(Math.random() * defaultOptions.length);
53
+ }
54
+ return defaultOptions[colorIdx] || defaultOptions[0];
55
+ };
56
+ var createOption = function createOption(options, optionName) {
57
+ var selectOptionColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
58
+ var id = generateOptionID(options);
59
+ var optionColor = selectOptionColor && SELECT_OPTION_COLORS.find(function (item) {
60
+ return item.COLOR === selectOptionColor;
61
+ });
62
+ if (!optionColor) {
63
+ optionColor = getRandomOptionColor(options);
64
+ }
65
+ return {
66
+ id: id,
67
+ name: optionName,
68
+ color: optionColor.COLOR,
69
+ textColor: optionColor.TEXT_COLOR
70
+ };
71
+ };
72
+ var generatorCellOption = function generatorCellOption(options, optionName) {
73
+ var existOption = options.find(function (option) {
74
+ return option.name === optionName;
75
+ });
76
+ if (existOption) {
77
+ return {
78
+ selectedOptionId: existOption.id
79
+ };
80
+ }
81
+ var newOption = createOption(options, optionName) || {};
82
+ return {
83
+ cellOption: newOption,
84
+ selectedOptionId: newOption.id
85
+ };
86
+ };
87
+ var generatorCellOptions = function generatorCellOptions(options, optionNames) {
88
+ var cellOptions = [];
89
+ var selectedOptionIds = [];
90
+ optionNames.forEach(function (optionName) {
91
+ var existingOption = options.find(function (option) {
92
+ return option.name === optionName;
93
+ });
94
+ if (existingOption) {
95
+ selectedOptionIds.push(existingOption.id);
96
+ } else {
97
+ var cellOption = createOption(options, optionName);
98
+ if (cellOption) {
99
+ cellOptions.push(cellOption);
100
+ selectedOptionIds.push(cellOption.id);
101
+ }
102
+ }
103
+ });
104
+ if (cellOptions.length === 0) {
105
+ return {
106
+ selectedOptionIds: selectedOptionIds
107
+ };
108
+ }
109
+ return {
110
+ cellOptions: cellOptions,
111
+ selectedOptionIds: selectedOptionIds
112
+ };
113
+ };
114
+
115
+ export { createOption, generateOptionID, generatorCellOption, generatorCellOptions, getColumnOptions };
package/es/common.js CHANGED
@@ -1,3 +1,5 @@
1
+ import _typeof from '@babel/runtime/helpers/typeof';
2
+
1
3
  /**
2
4
  * Generate a random string of specified length.
3
5
  * @param {number} keyLength
@@ -12,5 +14,12 @@ var generatorBase64Code = function generatorBase64Code() {
12
14
  }
13
15
  return key;
14
16
  };
17
+ var isEmpty = function isEmpty(val) {
18
+ if (val == null) return true;
19
+ if (val.length !== undefined) return val.length === 0;
20
+ if (val instanceof Date) return false;
21
+ if (_typeof(val) === 'object') return Object.keys(val).length === 0;
22
+ return false;
23
+ };
15
24
 
16
- export { generatorBase64Code };
25
+ export { generatorBase64Code, isEmpty };
@@ -0,0 +1,16 @@
1
+ var COLOR_GRADATION_OPTIONS = {
2
+ color_gradation_1: ['#FFFFFF', '#CAE9FF', '#9AC5FF', '#7DAAFF', '#5C90F9'],
3
+ color_gradation_2: ['#5C90F9', '#7DAAFF', '#9AC5FF', '#CAE9FF', '#FFFFFF'],
4
+ color_gradation_3: ['#FFFFFF', '#AAF7D2', '#74E6B6', '#42C090', '#17A675'],
5
+ color_gradation_4: ['#17A675', '#42C090', '#74E6B6', '#AAF7D2', '#FFFFFF'],
6
+ color_gradation_5: ['#FFFFFF', '#EBE2F1', '#D4C4E2', '#BFA8D4', '#A989C5'],
7
+ color_gradation_6: ['#A989C5', '#BFA8D4', '#D4C4E2', '#EBE2F1', '#FFFFFF'],
8
+ color_gradation_7: ['#FFFFFF', '#FBE2E1', '#F7C6C6', '#F3A9A9', '#F17F7E'],
9
+ color_gradation_8: ['#F17F7E', '#F3A9A9', '#F7C6C6', '#FBE2E1', '#FFFFFF'],
10
+ color_gradation_9: ['#FFFFFF', '#FFF2D4', '#FFE9B8', '#FFDD95', '#FFD470'],
11
+ color_gradation_10: ['#FFD470', '#FFDD95', '#FFE9B8', '#FFF2D4', '#FFFFFF'],
12
+ color_gradation_11: ['#FFFFFF', '#FEE6CE', '#FDD1A2', '#FDAD6B', '#FD8D3D'],
13
+ color_gradation_12: ['#FD8D3D', '#FDAD6B', '#FDD1A2', '#FEE6CE', '#FFFFFF']
14
+ };
15
+
16
+ export { COLOR_GRADATION_OPTIONS };
@@ -0,0 +1,7 @@
1
+ var COLUMN_PERMISSION_TYPE = {
2
+ NONE: 'none',
3
+ ADMINS: 'admins',
4
+ SPECIFIC_USERS: 'specific_users'
5
+ };
6
+
7
+ export { COLUMN_PERMISSION_TYPE };