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.
- package/README.md +56 -5
- package/dist/index.js +1 -1
- package/es/cell-value-get/cell-value.js +250 -20
- package/es/cell-value-get/collaborator.js +16 -3
- package/es/cell-value-get/digital-sign.js +1 -1
- package/es/cell-value-get/duration.js +3 -3
- package/es/cell-value-get/geolocation.js +52 -30
- package/es/cell-value-get/long-text.js +1 -1
- package/es/cell-value-get/number.js +51 -19
- package/es/cell-value-get/option.js +33 -9
- package/es/cell-value-get/rate.js +11 -0
- package/es/cell-value-set/date.js +26 -0
- package/es/cell-value-set/number.js +53 -1
- package/es/color/column-color.js +437 -0
- package/es/color/gradient-color.js +100 -0
- package/es/color/row-color.js +289 -0
- package/es/column/{common.js → core.js} +2 -14
- package/es/column/date.js +1 -1
- package/es/column/number.js +1 -1
- package/es/column/option.js +143 -0
- package/es/common.js +23 -3
- package/es/constants/color.js +16 -0
- package/es/constants/column-permission.js +7 -0
- package/es/constants/column.js +127 -2
- package/es/constants/filter/index.js +5 -1
- package/es/constants/formula.js +2 -1
- package/es/constants/grid-header.js +6 -0
- package/es/constants/group.js +23 -0
- package/es/constants/limit.js +3 -0
- package/es/constants/reg.js +4 -0
- package/es/constants/row-color.js +11 -0
- package/es/constants/sort.js +11 -0
- package/es/date.js +1 -1
- package/es/filter/core.js +322 -0
- package/es/filter/filter-column/array.js +87 -0
- package/es/filter/filter-column/checkbox.js +14 -0
- package/es/filter/filter-column/collaborator.js +72 -0
- package/es/filter/filter-column/creator.js +59 -0
- package/es/filter/filter-column/date.js +102 -0
- package/es/filter/filter-column/digital-sign.js +29 -0
- package/es/filter/filter-column/file.js +27 -0
- package/es/filter/filter-column/formula.js +57 -0
- package/es/filter/filter-column/geolocation.js +58 -0
- package/es/filter/filter-column/link.js +20 -0
- package/es/filter/filter-column/long-text.js +28 -0
- package/es/filter/filter-column/multiple-select.js +64 -0
- package/es/filter/filter-column/number.js +97 -0
- package/es/filter/filter-column/single-select.js +45 -0
- package/es/filter/filter-column/text.js +60 -0
- package/es/filter/filter-row.js +233 -0
- package/es/group/core.js +116 -0
- package/es/group/group-row.js +402 -0
- package/es/index.js +63 -11
- package/es/link/core.js +78 -0
- package/es/number.js +21 -0
- package/es/row/core.js +180 -0
- package/es/sort/core.js +91 -0
- package/es/sort/sort-column/array.js +72 -0
- package/es/sort/sort-column/checkbox.js +22 -0
- package/es/sort/sort-column/collaborator.js +16 -0
- package/es/sort/sort-column/date.js +25 -0
- package/es/sort/sort-column/formula.js +49 -0
- package/es/sort/sort-column/link.js +32 -0
- package/es/sort/sort-column/multiple-select.js +45 -0
- package/es/sort/sort-column/number.js +31 -0
- package/es/sort/sort-column/single-select.js +36 -0
- package/es/sort/sort-column/text.js +69 -0
- package/es/sort/sort-row.js +110 -0
- package/es/table/column.js +27 -0
- package/es/table/core.js +14 -0
- package/es/table/row.js +25 -0
- package/es/validate/filter.js +1 -1
- package/es/validate/geolocation.js +5 -0
- package/es/view/core.js +134 -0
- package/es/view/formula.js +147 -0
- package/es/view/group.js +32 -0
- package/es/view/summaries.js +167 -0
- package/lib/cell-value-get/cell-value.js +254 -19
- package/lib/cell-value-get/collaborator.js +16 -2
- package/lib/cell-value-get/digital-sign.js +1 -1
- package/lib/cell-value-get/duration.js +3 -2
- package/lib/cell-value-get/geolocation.js +53 -30
- package/lib/cell-value-get/long-text.js +1 -1
- package/lib/cell-value-get/number.js +51 -18
- package/lib/cell-value-get/option.js +34 -8
- package/lib/cell-value-get/rate.js +15 -0
- package/lib/cell-value-set/date.js +30 -0
- package/lib/cell-value-set/number.js +53 -0
- package/lib/color/column-color.js +446 -0
- package/lib/color/gradient-color.js +110 -0
- package/lib/color/row-color.js +297 -0
- package/lib/column/{common.js → core.js} +1 -14
- package/lib/column/date.js +2 -2
- package/lib/column/number.js +3 -3
- package/lib/column/option.js +151 -0
- package/lib/common.js +27 -3
- package/lib/constants/color.js +20 -0
- package/lib/constants/column-permission.js +11 -0
- package/lib/constants/column.js +134 -1
- package/lib/constants/filter/index.js +5 -0
- package/lib/constants/formula.js +2 -0
- package/lib/constants/grid-header.js +10 -0
- package/lib/constants/group.js +36 -0
- package/lib/constants/limit.js +7 -0
- package/lib/constants/reg.js +9 -0
- package/lib/constants/row-color.js +17 -0
- package/lib/constants/sort.js +18 -0
- package/lib/filter/core.js +336 -0
- package/lib/filter/filter-column/array.js +91 -0
- package/lib/filter/filter-column/checkbox.js +18 -0
- package/lib/filter/filter-column/collaborator.js +80 -0
- package/lib/filter/filter-column/creator.js +63 -0
- package/lib/filter/filter-column/date.js +106 -0
- package/lib/filter/filter-column/digital-sign.js +33 -0
- package/lib/filter/filter-column/file.js +31 -0
- package/lib/filter/filter-column/formula.js +61 -0
- package/lib/filter/filter-column/geolocation.js +62 -0
- package/lib/filter/filter-column/link.js +24 -0
- package/lib/filter/filter-column/long-text.js +32 -0
- package/lib/filter/filter-column/multiple-select.js +72 -0
- package/lib/filter/filter-column/number.js +101 -0
- package/lib/filter/filter-column/single-select.js +49 -0
- package/lib/filter/filter-column/text.js +64 -0
- package/lib/filter/filter-row.js +239 -0
- package/lib/group/core.js +126 -0
- package/lib/group/group-row.js +413 -0
- package/lib/index.js +177 -7
- package/lib/link/core.js +90 -0
- package/lib/number.js +26 -0
- package/lib/row/core.js +189 -0
- package/lib/sort/core.js +102 -0
- package/lib/sort/sort-column/array.js +76 -0
- package/lib/sort/sort-column/checkbox.js +26 -0
- package/lib/sort/sort-column/collaborator.js +20 -0
- package/lib/sort/sort-column/date.js +29 -0
- package/lib/sort/sort-column/formula.js +53 -0
- package/lib/sort/sort-column/link.js +36 -0
- package/lib/sort/sort-column/multiple-select.js +49 -0
- package/lib/sort/sort-column/number.js +35 -0
- package/lib/sort/sort-column/single-select.js +40 -0
- package/lib/sort/sort-column/text.js +74 -0
- package/lib/sort/sort-row.js +115 -0
- package/lib/table/column.js +32 -0
- package/lib/table/core.js +18 -0
- package/lib/table/row.js +30 -0
- package/lib/validate/filter.js +3 -3
- package/lib/validate/geolocation.js +9 -0
- package/lib/view/core.js +143 -0
- package/lib/view/formula.js +154 -0
- package/lib/view/group.js +36 -0
- package/lib/view/summaries.js +173 -0
- 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
|
|
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
package/es/column/number.js
CHANGED
|
@@ -0,0 +1,143 @@
|
|
|
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
|
+
* @param {array} options e.g. [{ id, ... }, ...]
|
|
90
|
+
* @param {string} optionName used as the option name
|
|
91
|
+
* @returns return the option id if exist, otherwise generate a new option, object
|
|
92
|
+
*/
|
|
93
|
+
var generatorCellOption = function generatorCellOption(options, optionName) {
|
|
94
|
+
var existOption = options.find(function (option) {
|
|
95
|
+
return option.name === optionName;
|
|
96
|
+
});
|
|
97
|
+
if (existOption) {
|
|
98
|
+
return {
|
|
99
|
+
selectedOptionId: existOption.id
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
var newOption = createOption(options, optionName) || {};
|
|
103
|
+
return {
|
|
104
|
+
cellOption: newOption,
|
|
105
|
+
selectedOptionId: newOption.id
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Generate cell options by names.
|
|
111
|
+
* @param {array} options e.g. [{ id, ... }, ...]
|
|
112
|
+
* @param {array} optionNames used as the options names
|
|
113
|
+
* @returns Return the options ids if exist, otherwise generate new options, object
|
|
114
|
+
*/
|
|
115
|
+
var generatorCellOptions = function generatorCellOptions(options, optionNames) {
|
|
116
|
+
var cellOptions = [];
|
|
117
|
+
var selectedOptionIds = [];
|
|
118
|
+
optionNames.forEach(function (optionName) {
|
|
119
|
+
var existingOption = options.find(function (option) {
|
|
120
|
+
return option.name === optionName;
|
|
121
|
+
});
|
|
122
|
+
if (existingOption) {
|
|
123
|
+
selectedOptionIds.push(existingOption.id);
|
|
124
|
+
} else {
|
|
125
|
+
var cellOption = createOption(options, optionName);
|
|
126
|
+
if (cellOption) {
|
|
127
|
+
cellOptions.push(cellOption);
|
|
128
|
+
selectedOptionIds.push(cellOption.id);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
if (cellOptions.length === 0) {
|
|
133
|
+
return {
|
|
134
|
+
selectedOptionIds: selectedOptionIds
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
cellOptions: cellOptions,
|
|
139
|
+
selectedOptionIds: selectedOptionIds
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
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
|
-
|
|
16
|
-
|
|
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,
|
|
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 };
|