dtable-utils 0.0.3 → 0.0.4-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 (152) hide show
  1. package/README.md +42 -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 +145 -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 +25 -0
  66. package/es/sort/sort-column/single-select.js +30 -0
  67. package/es/sort/sort-column/text.js +61 -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 +153 -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 +29 -0
  140. package/lib/sort/sort-column/single-select.js +34 -0
  141. package/lib/sort/sort-column/text.js +66 -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,289 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import { getTableColumnByKey } from '../table/column.js';
3
+ import { getRowsByIds } from '../table/row.js';
4
+ import { isTableRows } from '../row/core.js';
5
+ import { getColumnOptions } from '../column/option.js';
6
+ import { getGeolocationDisplayString } from '../cell-value-get/geolocation.js';
7
+ import { ValidateFilter } from '../validate/filter.js';
8
+ import { deleteInvalidFilter, getFormattedFilters } from '../filter/core.js';
9
+ import { filterRow } from '../filter/filter-row.js';
10
+ import { ROW_COLOR_TYPE, ROW_COLOR_FOR_DUPLICATE_VALUES, SUPPORT_CHECKING_DUPLICATE_COLUMNS_TYPES } from '../constants/row-color.js';
11
+ import { CellType } from '../constants/cell-type.js';
12
+
13
+ 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; }
14
+ 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; }
15
+ var isValidRowColorRule = function isValidRowColorRule(rule, columns) {
16
+ var filters = rule.filters;
17
+ if (!filters || filters.length === 0) return false;
18
+ return filters.some(function (filter) {
19
+ return !ValidateFilter.validate(filter, columns).error_message;
20
+ });
21
+ };
22
+ var getValidRowColorRules = function getValidRowColorRules(colorRules, columns) {
23
+ return colorRules.filter(function (colorRule) {
24
+ return isValidRowColorRule(colorRule, columns);
25
+ });
26
+ };
27
+ var getOptionIdMap = function getOptionIdMap(options) {
28
+ if (!Array.isArray(options) || options.length === 0) return {};
29
+ var optionsMap = {};
30
+ options.forEach(function (option) {
31
+ optionsMap[option.id] = true;
32
+ });
33
+ return optionsMap;
34
+ };
35
+ var getFormattedDuplicateColumns = function getFormattedDuplicateColumns(columns, duplicateColumnKeys, _ref) {
36
+ var collaborators = _ref.collaborators;
37
+ var formattedColumns = [];
38
+ var _loop = function _loop() {
39
+ var key = duplicateColumnKeys[i];
40
+ var currColumn = columns.find(function (column) {
41
+ return column.key === key;
42
+ });
43
+ if (!currColumn) return "continue";
44
+ var type = currColumn.type,
45
+ data = currColumn.data;
46
+ var formattedColumnData = data;
47
+ if (!SUPPORT_CHECKING_DUPLICATE_COLUMNS_TYPES.includes(type)) return "continue";
48
+ if (type === CellType.SINGLE_SELECT || type === CellType.MULTIPLE_SELECT) {
49
+ var options = getColumnOptions(currColumn);
50
+ formattedColumnData = getOptionIdMap(options);
51
+ } else if (type === CellType.COLLABORATOR) {
52
+ var optionsMap = {};
53
+ if (Array.isArray(collaborators)) {
54
+ collaborators.forEach(function (collaborator) {
55
+ optionsMap[collaborator.email] = true;
56
+ });
57
+ }
58
+ formattedColumnData = optionsMap;
59
+ }
60
+ formattedColumns.push({
61
+ key: key,
62
+ type: type,
63
+ data: formattedColumnData
64
+ });
65
+ };
66
+ for (var i = 0; i < duplicateColumnKeys.length; i++) {
67
+ var _ret = _loop();
68
+ if (_ret === "continue") continue;
69
+ }
70
+ return formattedColumns;
71
+ };
72
+ var getDuplicateRowValue = function getDuplicateRowValue(row, columns, formulaRow) {
73
+ if (!row) return '';
74
+ var rowValue = columns.map(function (column) {
75
+ var type = column.type,
76
+ data = column.data,
77
+ key = column.key;
78
+ var cellValue = row[key];
79
+ switch (type) {
80
+ case CellType.SINGLE_SELECT:
81
+ {
82
+ return data[cellValue] ? cellValue : '';
83
+ }
84
+ case CellType.MULTIPLE_SELECT:
85
+ case CellType.COLLABORATOR:
86
+ {
87
+ if (!Array.isArray(cellValue) || cellValue.length === 0) return '';
88
+ return cellValue.filter(function (item) {
89
+ return data[item];
90
+ }).sort().join('');
91
+ }
92
+ case CellType.GEOLOCATION:
93
+ {
94
+ if (!cellValue) return '';
95
+ return getGeolocationDisplayString(cellValue, data) || '';
96
+ }
97
+ case CellType.NUMBER:
98
+ {
99
+ if (!cellValue && cellValue !== 0) return '';
100
+ return cellValue;
101
+ }
102
+ case CellType.FORMULA:
103
+ {
104
+ if (!formulaRow) return '';
105
+ cellValue = formulaRow[key];
106
+ return cellValue;
107
+ }
108
+ default:
109
+ {
110
+ return cellValue || '';
111
+ }
112
+ }
113
+ }).join('_seatable_join_key_');
114
+ if (!rowValue) return '';
115
+ if (typeof ''.replaceAll !== 'function') {
116
+ // eslint-disable-next-line
117
+ String.prototype.replaceAll = function (s1, s2) {
118
+ return this.replace(new RegExp(s1, 'gm'), s2);
119
+ };
120
+ }
121
+ if (!rowValue.replaceAll('_seatable_join_key_', '')) return '';
122
+ return rowValue;
123
+ };
124
+ var getRowsColorBySingleSelectColumn = function getRowsColorBySingleSelectColumn(rows, columnKey, table) {
125
+ var colors = {};
126
+ var column = getTableColumnByKey(table, columnKey);
127
+ var options = getColumnOptions(column);
128
+ if (!Array.isArray(options) || options.length === 0) return {};
129
+ var option_id_color_map = {};
130
+ options.forEach(function (option) {
131
+ option_id_color_map[option.id] = option.color;
132
+ });
133
+ rows.forEach(function (row) {
134
+ var optionId = row[columnKey];
135
+ var color = optionId ? option_id_color_map[optionId] : '';
136
+ if (color) {
137
+ colors[row._id] = color;
138
+ }
139
+ });
140
+ return colors;
141
+ };
142
+ var getRowsColorByRules = function getRowsColorByRules(rows, view, table) {
143
+ var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
144
+ username = _ref2.username,
145
+ userId = _ref2.userId;
146
+ var formula_rows = view.formula_rows,
147
+ colorbys = view.colorbys;
148
+ var _ref3 = colorbys || {},
149
+ type = _ref3.type,
150
+ color_by_rules = _ref3.color_by_rules;
151
+ if (type !== ROW_COLOR_TYPE.BY_RULES) return {};
152
+ var columns = table.columns;
153
+ var validColorRules = getValidRowColorRules(color_by_rules, columns);
154
+ var colorRulesLen = validColorRules.length;
155
+ var colors = {};
156
+ if (colorRulesLen === 0) return {};
157
+ validColorRules = validColorRules.map(function (colorRule) {
158
+ var filters = colorRule.filters;
159
+ var validFilters;
160
+ try {
161
+ validFilters = deleteInvalidFilter(filters, columns);
162
+ } catch (err) {
163
+ validFilters = [];
164
+ }
165
+ validFilters = getFormattedFilters(validFilters);
166
+ return _objectSpread(_objectSpread({}, colorRule), {}, {
167
+ filters: validFilters
168
+ });
169
+ });
170
+ rows.forEach(function (row) {
171
+ var rowId = row._id;
172
+ var formulaRow = formula_rows && formula_rows[rowId] || {};
173
+ for (var i = 0; i < colorRulesLen; i++) {
174
+ var colorRule = validColorRules[i];
175
+ var color = colorRule.color,
176
+ filter_conjunction = colorRule.filter_conjunction,
177
+ filters = colorRule.filters;
178
+ if (filterRow(row, filter_conjunction, filters, {
179
+ formulaRow: formulaRow,
180
+ username: username,
181
+ userId: userId
182
+ })) {
183
+ colors[rowId] = color;
184
+ break;
185
+ }
186
+ }
187
+ });
188
+ return colors;
189
+ };
190
+ var getRowsColorByDuplicateValues = function getRowsColorByDuplicateValues(rows, view, table, _ref4) {
191
+ var collaborators = _ref4.collaborators;
192
+ var colorbys = view.colorbys,
193
+ formula_rows = view.formula_rows;
194
+ var color_by_duplicate_column_keys = colorbys.color_by_duplicate_column_keys;
195
+ if (!Array.isArray(color_by_duplicate_column_keys) || color_by_duplicate_column_keys.length === 0) return {};
196
+ var columns = table.columns;
197
+ var formattedColumns = getFormattedDuplicateColumns(columns, color_by_duplicate_column_keys, {
198
+ collaborators: collaborators
199
+ });
200
+ if (formattedColumns.length === 0) return {};
201
+ var colors = {};
202
+ var duplicate_rows_ids_map = {}; // row value: [ row_id ]
203
+ for (var i = 0; i < rows.length; i++) {
204
+ var row = rows[i];
205
+ var rowId = row._id;
206
+ var formulaRow = formula_rows && formula_rows[rowId];
207
+ var rowValue = getDuplicateRowValue(row, formattedColumns, formulaRow);
208
+ if (!rowValue) continue;
209
+ var validRowIds = duplicate_rows_ids_map[rowValue];
210
+ if (validRowIds && validRowIds.length > 0) {
211
+ colors[rowId] = ROW_COLOR_FOR_DUPLICATE_VALUES;
212
+ validRowIds.push(rowId);
213
+ var firstDuplicateRowId = validRowIds[0];
214
+ if (!colors[firstDuplicateRowId]) {
215
+ colors[firstDuplicateRowId] = ROW_COLOR_FOR_DUPLICATE_VALUES;
216
+ }
217
+ } else {
218
+ duplicate_rows_ids_map[rowValue] = [rowId];
219
+ }
220
+ }
221
+ return {
222
+ colors: colors,
223
+ duplicate_rows_ids_map: duplicate_rows_ids_map
224
+ };
225
+ };
226
+
227
+ /**
228
+ * Calculate rows color.
229
+ * @param {array} rows
230
+ * @param {object} view
231
+ * @param {object} table e.g. { id_row_map, ... }
232
+ * @param {object} value e.g. { tables, collaborators, ... }
233
+ * @param {string} username
234
+ * @param {userId} username
235
+ * @returns rows color, object
236
+ */
237
+ var getRowsColor = function getRowsColor(rows, view, table, value) {
238
+ var _ref5 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
239
+ username = _ref5.username,
240
+ userId = _ref5.userId;
241
+ var colorbys = view.colorbys;
242
+ if (!colorbys) return {};
243
+ var tableRows = isTableRows(rows) ? rows : getRowsByIds(table, rows);
244
+ if (tableRows.length === 0) return {};
245
+ var type = colorbys.type,
246
+ color_by_column = colorbys.color_by_column;
247
+ switch (type) {
248
+ case ROW_COLOR_TYPE.BY_COLUMN:
249
+ {
250
+ return {
251
+ colors: getRowsColorBySingleSelectColumn(tableRows, color_by_column, table)
252
+ };
253
+ }
254
+ case ROW_COLOR_TYPE.BY_RULES:
255
+ {
256
+ return {
257
+ colors: getRowsColorByRules(tableRows, view, table, {
258
+ username: username,
259
+ userId: userId
260
+ })
261
+ };
262
+ }
263
+ case ROW_COLOR_TYPE.BY_DUPLICATE_VALUES:
264
+ {
265
+ var _ref6 = value || {},
266
+ _ref6$collaborators = _ref6.collaborators,
267
+ collaborators = _ref6$collaborators === void 0 ? [] : _ref6$collaborators;
268
+ return getRowsColorByDuplicateValues(tableRows, view, table, {
269
+ collaborators: collaborators
270
+ });
271
+ }
272
+ default:
273
+ {
274
+ return {};
275
+ }
276
+ }
277
+ };
278
+ var RowColorUtils = {
279
+ isValidRowColorRule: isValidRowColorRule,
280
+ getValidRowColorRules: getValidRowColorRules,
281
+ getRowsColor: getRowsColor,
282
+ getFormattedDuplicateColumns: getFormattedDuplicateColumns,
283
+ getDuplicateRowValue: getDuplicateRowValue,
284
+ getRowsColorBySingleSelectColumn: getRowsColorBySingleSelectColumn,
285
+ getRowsColorByRules: getRowsColorByRules,
286
+ getRowsColorByDuplicateValues: getRowsColorByDuplicateValues
287
+ };
288
+
289
+ export { RowColorUtils as default };
@@ -3,7 +3,7 @@ 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
9
  var getColumnType = function getColumnType(column) {
@@ -26,16 +26,4 @@ var getColumnType = function getColumnType(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 { getColumnOptions, getColumnType };
29
+ export { getColumnType };
package/es/column/date.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getColumnType } from './common.js';
1
+ import { getColumnType } from './core.js';
2
2
  import { DATE_COLUMN_OPTIONS } from '../constants/column.js';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { getColumnType } 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
 
@@ -0,0 +1,145 @@
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
+
15
+ /**
16
+ * generate unique option id
17
+ * @param {array} options e.g. [{ id, ... }, ...]
18
+ * @returns generated option id, string
19
+ */
20
+ var generateOptionID = function generateOptionID(options) {
21
+ if (options.length === 1) return String(Math.floor(Math.random() * Math.pow(10, 6)));
22
+ var optionID;
23
+ var isIDUnique = false;
24
+ while (!isIDUnique) {
25
+ optionID = String(Math.floor(Math.random() * Math.pow(10, 6)));
26
+
27
+ // eslint-disable-next-line
28
+ isIDUnique = options.every(function (option) {
29
+ return option.id !== optionID;
30
+ });
31
+ if (isIDUnique) {
32
+ break;
33
+ }
34
+ }
35
+ return optionID;
36
+ };
37
+ var getRandomOptionColor = function getRandomOptionColor(options) {
38
+ var defaultOptions = SELECT_OPTION_COLORS.slice(12, 24);
39
+ var colorIdx = Math.floor(Math.random() * defaultOptions.length);
40
+ if (!Array.isArray(options) || options.length === 0) {
41
+ return defaultOptions[colorIdx];
42
+ }
43
+
44
+ // Avoid using the same color for adjacent labels
45
+ var adjacentOptions = options.slice(-(defaultOptions.length - 1));
46
+ var adjacentOptionsColorIdxArr = [];
47
+ var selectOptionColorObj = {};
48
+ defaultOptions.forEach(function (colorItem, index) {
49
+ selectOptionColorObj[colorItem.COLOR] = index;
50
+ });
51
+ adjacentOptions.forEach(function (option) {
52
+ var optionColorIdx = selectOptionColorObj[option.color];
53
+ adjacentOptionsColorIdxArr.push(optionColorIdx);
54
+ });
55
+
56
+ // eslint-disable-next-line
57
+ while (adjacentOptionsColorIdxArr.indexOf(colorIdx) != -1) {
58
+ colorIdx = Math.floor(Math.random() * defaultOptions.length);
59
+ }
60
+ return defaultOptions[colorIdx] || defaultOptions[0];
61
+ };
62
+
63
+ /**
64
+ * generate option
65
+ * @param {array} options e.g. [{ id, ... }, ...]
66
+ * @param {string} optionName
67
+ * @param {string} optionColor used to find system support color options. The new color option will be generated if not found by "optionColor" or not supported
68
+ * @returns generated option, object
69
+ */
70
+ var createOption = function createOption(options, optionName) {
71
+ var optionColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
72
+ var id = generateOptionID(options);
73
+ var colors = optionColor && SELECT_OPTION_COLORS.find(function (systemColor) {
74
+ return systemColor.COLOR === optionColor;
75
+ });
76
+ if (!colors) {
77
+ colors = getRandomOptionColor(options);
78
+ }
79
+ return {
80
+ id: id,
81
+ name: optionName,
82
+ color: colors.COLOR,
83
+ textColor: colors.TEXT_COLOR
84
+ };
85
+ };
86
+
87
+ /**
88
+ * Generate cell option by name.
89
+ * Return the option id if exist, otherwise generate a new option
90
+ * @param {array} options e.g. [{ id, ... }, ...]
91
+ * @param {string} optionName used as the option name
92
+ * @returns option id and option, object
93
+ */
94
+ var generatorCellOption = function generatorCellOption(options, optionName) {
95
+ var existOption = options.find(function (option) {
96
+ return option.name === optionName;
97
+ });
98
+ if (existOption) {
99
+ return {
100
+ selectedOptionId: existOption.id
101
+ };
102
+ }
103
+ var newOption = createOption(options, optionName) || {};
104
+ return {
105
+ cellOption: newOption,
106
+ selectedOptionId: newOption.id
107
+ };
108
+ };
109
+
110
+ /**
111
+ * Generate cell options by names.
112
+ * Return the options ids if exist, otherwise generate new options
113
+ * @param {array} options e.g. [{ id, ... }, ...]
114
+ * @param {array} optionNames used as the options names
115
+ * @returns options ids and options, object
116
+ */
117
+ var generatorCellOptions = function generatorCellOptions(options, optionNames) {
118
+ var cellOptions = [];
119
+ var selectedOptionIds = [];
120
+ optionNames.forEach(function (optionName) {
121
+ var existingOption = options.find(function (option) {
122
+ return option.name === optionName;
123
+ });
124
+ if (existingOption) {
125
+ selectedOptionIds.push(existingOption.id);
126
+ } else {
127
+ var cellOption = createOption(options, optionName);
128
+ if (cellOption) {
129
+ cellOptions.push(cellOption);
130
+ selectedOptionIds.push(cellOption.id);
131
+ }
132
+ }
133
+ });
134
+ if (cellOptions.length === 0) {
135
+ return {
136
+ selectedOptionIds: selectedOptionIds
137
+ };
138
+ }
139
+ return {
140
+ cellOptions: cellOptions,
141
+ selectedOptionIds: selectedOptionIds
142
+ };
143
+ };
144
+
145
+ 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,15 +14,33 @@ var generatorBase64Code = function generatorBase64Code() {
12
14
  }
13
15
  return key;
14
16
  };
15
- var isNumber = function isNumber(num) {
16
- return (num || num === 0) && Object.prototype.toString.call(num) === '[object Number]';
17
+
18
+ /**
19
+ * Check whether the given value is empty
20
+ * @param {any} val
21
+ * @returns bool
22
+ */
23
+ var isEmpty = function isEmpty(val) {
24
+ if (val === null || val === undefined) return true;
25
+ if (val.length !== undefined) return val.length === 0;
26
+ if (val instanceof Date) return false;
27
+ if (_typeof(val) === 'object') return Object.keys(val).length === 0;
28
+ return false;
17
29
  };
30
+
31
+ /**
32
+ * Check whether the object is empty.
33
+ * The true will be returned if the "obj" is invalid.
34
+ * @param {object} obj
35
+ * @returns bool
36
+ */
18
37
  var isEmptyObject = function isEmptyObject(obj) {
19
38
  var name;
39
+ // eslint-disable-next-line
20
40
  for (name in obj) {
21
41
  return false;
22
42
  }
23
43
  return true;
24
44
  };
25
45
 
26
- export { generatorBase64Code, isEmptyObject, isNumber };
46
+ export { generatorBase64Code, isEmpty, isEmptyObject };
@@ -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 };