dtable-utils 4.3.5 → 4.3.6

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 (52) hide show
  1. package/dist/index.js +1 -1
  2. package/es/archive/clause-module/search.js +185 -0
  3. package/es/archive/clause-module/update.js +121 -0
  4. package/es/archive/sql-generator/filter-condition.js +15 -7
  5. package/es/cell-value-get/auto-number.js +17 -0
  6. package/es/cell-value-get/collaborator.js +14 -1
  7. package/es/cell-value-set/auto-number.js +85 -0
  8. package/es/cell-value-set/checkbox.js +5 -0
  9. package/es/cell-value-set/duration.js +56 -0
  10. package/es/cell-value-set/geolocation.js +68 -0
  11. package/es/cell-value-set/image.js +20 -0
  12. package/es/cell-value-set/long-text.js +27 -0
  13. package/es/cell-value-set/multiple-select.js +81 -0
  14. package/es/cell-value-set/number.js +16 -1
  15. package/es/cell-value-set/single-select.js +47 -0
  16. package/es/column/file.js +13 -0
  17. package/es/column/long-text.js +68 -0
  18. package/es/constants/auto-number.js +7 -0
  19. package/es/constants/column.js +2 -1
  20. package/es/constants/formula.js +2 -1
  21. package/es/constants/limit.js +7 -1
  22. package/es/constants/permission.js +7 -0
  23. package/es/helper/patch-utils.js +38 -0
  24. package/es/index.js +19 -4
  25. package/es/row/convert.js +201 -2
  26. package/es/view/summaries.js +11 -2
  27. package/lib/archive/clause-module/search.js +200 -0
  28. package/lib/archive/clause-module/update.js +126 -0
  29. package/lib/archive/sql-generator/filter-condition.js +15 -7
  30. package/lib/cell-value-get/auto-number.js +21 -0
  31. package/lib/cell-value-get/collaborator.js +14 -0
  32. package/lib/cell-value-set/auto-number.js +94 -0
  33. package/lib/cell-value-set/checkbox.js +9 -0
  34. package/lib/cell-value-set/duration.js +60 -0
  35. package/lib/cell-value-set/geolocation.js +72 -0
  36. package/lib/cell-value-set/image.js +24 -0
  37. package/lib/cell-value-set/long-text.js +31 -0
  38. package/lib/cell-value-set/multiple-select.js +86 -0
  39. package/lib/cell-value-set/number.js +16 -0
  40. package/lib/cell-value-set/single-select.js +51 -0
  41. package/lib/column/file.js +21 -0
  42. package/lib/column/long-text.js +72 -0
  43. package/lib/constants/auto-number.js +12 -0
  44. package/lib/constants/column.js +2 -0
  45. package/lib/constants/formula.js +2 -0
  46. package/lib/constants/limit.js +8 -0
  47. package/lib/constants/permission.js +11 -0
  48. package/lib/helper/patch-utils.js +47 -0
  49. package/lib/index.js +64 -20
  50. package/lib/row/convert.js +204 -0
  51. package/lib/view/summaries.js +11 -2
  52. package/package.json +1 -1
@@ -0,0 +1,185 @@
1
+ import dayjs from 'dayjs';
2
+ import utc from 'dayjs/plugin/utc';
3
+ import '../../constants/column.js';
4
+ import { FILTER_ERR_MSG } from '../../constants/filter/index.js';
5
+ import '../../constants/formula.js';
6
+ import '../../constants/sort.js';
7
+ import '../../constants/group.js';
8
+ import { filter2SqlCondition, getSqlConditionByFilter } from '../sql-generator/filter-condition.js';
9
+ import { getValidSorts } from '../../sort/core.js';
10
+ import '../../cell-value-get/cell-value.js';
11
+ import { ValidateFilter } from '../../validate/filter.js';
12
+ import { getViewShownColumns } from '../../view/core.js';
13
+ import '@babel/runtime/helpers/typeof';
14
+ import '@babel/runtime/helpers/defineProperty';
15
+ import '@babel/runtime/helpers/toConsumableArray';
16
+ import '../../date.js';
17
+
18
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
19
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
21
+ dayjs.extend(utc);
22
+ var generatorSearchSQL = function generatorSearchSQL(table, view, start, limit, username, userId, userDepartmentIdsMap) {
23
+ // MAIN
24
+ var table_name = table.name;
25
+ var searchingColumnsString = generateViewSearchColumnsString(table, view);
26
+ var sql = "SELECT ".concat(searchingColumnsString, " FROM `").concat(table_name, "`");
27
+
28
+ // WHERE CLAUSE
29
+ var filterClause = filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap);
30
+
31
+ // ORDER BY CLAUSE
32
+ var sortSqlClause = sort2SqlCondition(table, view);
33
+
34
+ // LIMIT CLAUSE
35
+ var reg1 = /^[1-9]d*|0$/; // non-negative integer
36
+ var reg2 = /^[1-9]\d*$/; // positive integer
37
+ var limitClause = '';
38
+ var isValidStart = reg1.test(start);
39
+ var isValidLimit = reg2.test(limit);
40
+ if (isValidStart && isValidLimit) {
41
+ limitClause = "LIMIT ".concat(start, ", ").concat(limit, ";");
42
+ }
43
+ return "".concat(sql, " ").concat(filterClause, " ").concat(sortSqlClause, " ").concat(limitClause);
44
+ };
45
+ var generatorCustomSearchSQL = function generatorCustomSearchSQL(table, start, limit, conditions) {
46
+ // MAIN
47
+ var table_name = table.name;
48
+ var sql = "SELECT * FROM `".concat(table_name, "`");
49
+
50
+ // WHERE CLAUSE
51
+ var filterClause = customFilter2SqlCondition(table, conditions);
52
+
53
+ // ORDER BY CLAUSE
54
+ var sortSqlClause = customSort2SqlCondition(table, conditions);
55
+
56
+ // LIMIT CLAUSE
57
+ var reg1 = /^[1-9]d*|0$/; // non-negative integer
58
+ var reg2 = /^[1-9]\d*$/; // positive integer
59
+ var limitClause = '';
60
+ var isValidStart = reg1.test(start);
61
+ var isValidLimit = reg2.test(limit);
62
+ if (isValidStart && isValidLimit) {
63
+ limitClause = "LIMIT ".concat(start, ", ").concat(limit, ";");
64
+ }
65
+ return "".concat(sql, " ").concat(filterClause, " ").concat(sortSqlClause, " ").concat(limitClause);
66
+ };
67
+ var generateSearchColumnsString = function generateSearchColumnsString(columns) {
68
+ var columnsNames = columns ? columns.map(function (column) {
69
+ return "`".concat(column.name, "`");
70
+ }) : [];
71
+ columnsNames.push('`_id`', '`_archived`', '`_locked`');
72
+ return columnsNames.join(', ');
73
+ };
74
+ var generateViewSearchColumnsString = function generateViewSearchColumnsString(table, view) {
75
+ var visibleColumns = table ? getViewShownColumns(view, table.columns) : [];
76
+ return generateSearchColumnsString(visibleColumns);
77
+ };
78
+ var sort2SqlCondition = function sort2SqlCondition(table, view) {
79
+ var columns = table.columns;
80
+ var sorts = getValidSorts(view.sorts, columns);
81
+ if (!sorts || sorts.length === 0) {
82
+ return '';
83
+ }
84
+ var orderHeader = 'ORDER BY ';
85
+ var clauses = sorts.map(function (sort) {
86
+ var column_key = sort.column_key,
87
+ sort_type = sort.sort_type;
88
+ var column = columns.find(function (item) {
89
+ return item.key === column_key;
90
+ });
91
+ if (!column) return '';
92
+ var type = sort_type === 'up' ? 'ASC' : 'DESC';
93
+ return "`".concat(column.name, "` ").concat(type);
94
+ });
95
+ clauses = clauses.filter(function (item) {
96
+ return item && item !== '';
97
+ });
98
+ if (clauses.length === 0) return '';
99
+ return orderHeader + clauses.join(', ');
100
+ };
101
+ var customSort2SqlCondition = function customSort2SqlCondition(table, sort_conditions) {
102
+ var columns = table.columns;
103
+ var condition_sorts = sort_conditions && sort_conditions.sorts || [];
104
+ if (!condition_sorts || condition_sorts.length === 0) {
105
+ return '';
106
+ }
107
+ var orderHeader = 'ORDER BY ';
108
+ var clauses = condition_sorts.map(function (sort) {
109
+ var column_key = sort.column_key,
110
+ sort_type = sort.sort_type;
111
+ var column = columns.find(function (item) {
112
+ return item.key === column_key;
113
+ });
114
+ var type = sort_type === 'up' ? 'ASC' : 'DESC';
115
+ if (!column) {
116
+ if (['_ctime', '_mtime'].indexOf(column_key) !== -1) {
117
+ return "`".concat(column_key, "` ").concat(type);
118
+ }
119
+ return '';
120
+ }
121
+ return "`".concat(column.name, "` ").concat(type);
122
+ });
123
+ clauses = clauses.filter(function (item) {
124
+ return item && item !== '';
125
+ });
126
+ if (clauses.length === 0) return '';
127
+ return orderHeader + clauses.join(', ');
128
+ };
129
+ var customFilter2SqlCondition = function customFilter2SqlCondition(table, filter_conditions) {
130
+ var columns = table.columns;
131
+ var filter_groups = filter_conditions.filter_groups,
132
+ group_conjunction = filter_conditions.group_conjunction;
133
+ if (!filter_groups || filter_groups.length === 0) {
134
+ return '';
135
+ }
136
+ var filterHeader = 'WHERE ';
137
+ var groupStringList = [];
138
+
139
+ // eslint-disable-next-line no-restricted-syntax
140
+ var _iterator = _createForOfIteratorHelper(filter_groups),
141
+ _step;
142
+ try {
143
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
144
+ var filterGroup = _step.value;
145
+ var filters = filterGroup.filters,
146
+ filter_conjunction = filterGroup.filter_conjunction;
147
+ var stringList = filters.map(function (filterItem) {
148
+ var _ValidateFilter$valid = ValidateFilter.validate(filterItem, columns),
149
+ error_message = _ValidateFilter$valid.error_message;
150
+ if (error_message) {
151
+ if (error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
152
+ return '';
153
+ }
154
+ throw new Error(error_message);
155
+ }
156
+ var column_key = filterItem.column_key;
157
+ var column = columns.find(function (item) {
158
+ return item.key === column_key;
159
+ });
160
+ return getSqlConditionByFilter(column, filterItem);
161
+ });
162
+ stringList = stringList.filter(function (item) {
163
+ return item && item.length > 0;
164
+ });
165
+ if (stringList.length !== 0) {
166
+ var filterContent = stringList[0];
167
+ if (stringList.length > 1) {
168
+ for (var i = 1; i < stringList.length; i++) {
169
+ filterContent += " ".concat(filter_conjunction, " (").concat(stringList[i], ")");
170
+ }
171
+ }
172
+ // eslint-disable-next-line prefer-template
173
+ filterContent = '(' + filterContent + ')';
174
+ groupStringList.push(filterContent);
175
+ }
176
+ }
177
+ } catch (err) {
178
+ _iterator.e(err);
179
+ } finally {
180
+ _iterator.f();
181
+ }
182
+ return filterHeader + groupStringList.join(" ".concat(group_conjunction, " "));
183
+ };
184
+
185
+ export { customFilter2SqlCondition, customSort2SqlCondition, generateSearchColumnsString, generateViewSearchColumnsString, generatorCustomSearchSQL, generatorSearchSQL, sort2SqlCondition };
@@ -0,0 +1,121 @@
1
+ import { CellType } from '../../constants/cell-type.js';
2
+ import { NOT_SUPPORT_EDIT_COLUMN_TYPE, NUMERIC_COLUMNS_TYPES } from '../../constants/column.js';
3
+ import '../../constants/filter/filter-column-options.js';
4
+ import '../../constants/filter/filter-modifier.js';
5
+ import '../../constants/filter/filter-predicate.js';
6
+ import '../../constants/filter/filter-is-within.js';
7
+ import '../../constants/formula.js';
8
+ import '../../constants/sort.js';
9
+ import '../../constants/group.js';
10
+ import 'dayjs';
11
+ import { isNumber } from '../../number.js';
12
+ import { getOptionName } from '../../cell-value-get/option.js';
13
+ import '../../cell-value-get/cell-value.js';
14
+
15
+ /**
16
+ * What: get converted value to update row.
17
+ * Where: big data view
18
+ * @param {Object} column
19
+ * @param {Object} { [column.key]: 'xxx' }
20
+ * @returns converted value
21
+ */
22
+ var getConvertedUpdatedValue = function getConvertedUpdatedValue(column, updated) {
23
+ if (!column || NOT_SUPPORT_EDIT_COLUMN_TYPE.includes(column.type)) {
24
+ return null;
25
+ }
26
+ var columnType = column.type,
27
+ data = column.data;
28
+ var columnValue = Object.values(updated)[0];
29
+ if (NUMERIC_COLUMNS_TYPES.includes(columnType)) {
30
+ return isNumber(columnValue) ? columnValue : null;
31
+ }
32
+ switch (columnType) {
33
+ case CellType.TEXT:
34
+ case CellType.URL:
35
+ case CellType.EMAIL:
36
+ {
37
+ if (!columnValue) {
38
+ return null;
39
+ }
40
+ var text = columnValue.trim();
41
+ return text || null;
42
+ }
43
+ case CellType.CHECKBOX:
44
+ {
45
+ if (typeof columnValue !== 'boolean') {
46
+ return null;
47
+ }
48
+ return columnValue;
49
+ }
50
+ case CellType.DATE:
51
+ {
52
+ if (!columnValue) {
53
+ return null;
54
+ }
55
+ // compatible with underlying storage
56
+ var format = data && data.format;
57
+ var isHasMinute = format && format.indexOf('HH:mm') > -1;
58
+ // eslint-disable-next-line prefer-template
59
+ return isHasMinute ? columnValue + ':00' : columnValue;
60
+ }
61
+ case CellType.LONG_TEXT:
62
+ {
63
+ if (!columnValue || !Object.prototype.hasOwnProperty.call(columnValue, 'text')) {
64
+ return null;
65
+ }
66
+ return columnValue.text || null;
67
+ }
68
+ case CellType.SINGLE_SELECT:
69
+ {
70
+ var options = data && data.options;
71
+ return getOptionName(options, columnValue) || null;
72
+ }
73
+ case CellType.MULTIPLE_SELECT:
74
+ {
75
+ var _options = data && data.options;
76
+ if (!Array.isArray(columnValue) || columnValue.length === 0 || !Array.isArray(_options) || _options.length === 0) {
77
+ return null;
78
+ }
79
+ var optionNames = columnValue.map(function (optionId) {
80
+ return getOptionName(_options, optionId);
81
+ }).filter(Boolean);
82
+ if (optionNames.length === 0) {
83
+ return null;
84
+ }
85
+ return optionNames;
86
+ }
87
+ case CellType.COLLABORATOR:
88
+ {
89
+ if (!Array.isArray(columnValue) || columnValue.length === 0) {
90
+ return null;
91
+ }
92
+ return columnValue.map(function (item) {
93
+ return item;
94
+ });
95
+ }
96
+ case CellType.FILE:
97
+ {
98
+ return Array.isArray(columnValue) ? columnValue : [];
99
+ }
100
+ default:
101
+ {
102
+ return columnValue || null;
103
+ }
104
+ }
105
+ };
106
+ var generatorUpdateSql = function generatorUpdateSql(table, columns, updated, rowId) {
107
+ var columnKey = Object.keys(updated)[0];
108
+ var column = columns.find(function (item) {
109
+ return item.key === columnKey;
110
+ });
111
+ var columnName = column.name;
112
+ var sql = "update `".concat(table.name, "` set `").concat(columnName, "` = ? where `_id` = ?;");
113
+ var updateValue = getConvertedUpdatedValue(column, updated);
114
+ var parameters = [updateValue, rowId];
115
+ return {
116
+ sql: sql,
117
+ parameters: parameters
118
+ };
119
+ };
120
+
121
+ export { generatorUpdateSql, getConvertedUpdatedValue };
@@ -8,6 +8,7 @@ import { FILTER_ERR_MSG } from '../../constants/filter/index.js';
8
8
  import { CellType } from '../../constants/cell-type.js';
9
9
  import { DEPARTMENT_SELECT_RANGE_MAP } from '../../constants/column.js';
10
10
  import { FORMULA_RESULT_TYPE } from '../../constants/formula.js';
11
+ import PatchUtils from '../../helper/patch-utils.js';
11
12
  import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
12
13
  import { FILTER_TERM_MODIFIER_TYPE } from '../../constants/filter/filter-modifier.js';
13
14
 
@@ -308,6 +309,7 @@ var getSpecificDepartmentIds = function getSpecificDepartmentIds(filter_term, cu
308
309
 
309
310
  // DEPARTMENT-SINGLE-SELECT
310
311
  var departmentSingleSelectSqlCondition = function departmentSingleSelectSqlCondition(column, filterItem, userDepartmentIdsMap) {
312
+ var patchedUserDepartmentIdsMap = PatchUtils.getUserDepartmentIdsMap(userDepartmentIdsMap);
311
313
  var filter_predicate = filterItem.filter_predicate,
312
314
  filter_term = filterItem.filter_term;
313
315
  var name = column.name;
@@ -322,8 +324,8 @@ var departmentSingleSelectSqlCondition = function departmentSingleSelectSqlCondi
322
324
  if (!filter_term || filter_term === 0) {
323
325
  return '';
324
326
  }
325
- var currentUserDepartmentIds = userDepartmentIdsMap && userDepartmentIdsMap.current_user_department_ids;
326
- var currentUserDepartmentAndSubIds = userDepartmentIdsMap && userDepartmentIdsMap.current_user_department_and_sub_ids;
327
+ var currentUserDepartmentIds = patchedUserDepartmentIdsMap && patchedUserDepartmentIdsMap.current_user_department_ids;
328
+ var currentUserDepartmentAndSubIds = patchedUserDepartmentIdsMap && patchedUserDepartmentIdsMap.current_user_department_and_sub_ids;
327
329
  var isValidCurrentUserDepartmentIds = Array.isArray(currentUserDepartmentIds);
328
330
  var isValidCurrentUserDepartmentAndSubIds = Array.isArray(currentUserDepartmentAndSubIds);
329
331
  if (filter_predicate === FILTER_PREDICATE_TYPE.IS) {
@@ -595,9 +597,12 @@ var formulaSqlCondition = function formulaSqlCondition(column, filterItem) {
595
597
  return '';
596
598
  };
597
599
  var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterItem, username, userId, userDepartmentIdsMap) {
600
+ var patchedUsername = PatchUtils.getUsername(username);
601
+ var patchedUserId = PatchUtils.getUserId(userId);
602
+ var patchedUserDepartmentIdsMap = PatchUtils.getUserDepartmentIdsMap(userDepartmentIdsMap);
598
603
  var type = column.type;
599
604
  if (type === CellType.TEXT || type === CellType.AUTO_NUMBER || type === CellType.EMAIL || type === CellType.GEOLOCATION || type === CellType.URL) {
600
- return textSqlCondition(column, filterItem, userId);
605
+ return textSqlCondition(column, filterItem, patchedUserId);
601
606
  }
602
607
  if (type === CellType.DURATION || type === CellType.NUMBER || type === CellType.RATE) {
603
608
  return numberSqlCondition(column, filterItem);
@@ -615,16 +620,16 @@ var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterIte
615
620
  return singleSelectSqlCondition(column, filterItem);
616
621
  }
617
622
  if (type === CellType.DEPARTMENT_SINGLE_SELECT) {
618
- return departmentSingleSelectSqlCondition(column, filterItem, userDepartmentIdsMap);
623
+ return departmentSingleSelectSqlCondition(column, filterItem, patchedUserDepartmentIdsMap);
619
624
  }
620
625
  if (type === CellType.MULTIPLE_SELECT) {
621
626
  return multipleSelectSqlCondition(column, filterItem);
622
627
  }
623
628
  if (type === CellType.LAST_MODIFIER || type === CellType.CREATOR) {
624
- return creatorSqlCondition(column, filterItem, username);
629
+ return creatorSqlCondition(column, filterItem, patchedUsername);
625
630
  }
626
631
  if (type === CellType.COLLABORATOR) {
627
- return collaboratorSqlCondition(column, filterItem, username);
632
+ return collaboratorSqlCondition(column, filterItem, patchedUsername);
628
633
  }
629
634
  if (type === CellType.IMAGE || type === CellType.FILE || type === CellType.DIGITAL_SIGN) {
630
635
  return fileSqlCondition(column, filterItem);
@@ -641,6 +646,9 @@ var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterIte
641
646
  return '';
642
647
  };
643
648
  var filter2SqlCondition = function filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap) {
649
+ var patchedUsername = PatchUtils.getUsername(username);
650
+ var patchedUserId = PatchUtils.getUserId(userId);
651
+ var patchedUserDepartmentIdsMap = PatchUtils.getUserDepartmentIdsMap(userDepartmentIdsMap);
644
652
  var columns = table.columns;
645
653
  var filter_conjunction = view.filter_conjunction,
646
654
  filters = view.filters;
@@ -661,7 +669,7 @@ var filter2SqlCondition = function filter2SqlCondition(table, view, username, us
661
669
  }
662
670
  var column_key = filterItem.column_key;
663
671
  var column = getTableColumnByKey(table, column_key);
664
- return getSqlConditionByFilter(column, filterItem, username, userId, userDepartmentIdsMap);
672
+ return getSqlConditionByFilter(column, filterItem, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap);
665
673
  });
666
674
 
667
675
  // 2. filtered '' sql clause
@@ -0,0 +1,17 @@
1
+ var getFormattedAutoNumber = function getFormattedAutoNumber(autoNumber, digits, prefix) {
2
+ // eslint-disable-next-line prefer-template
3
+ var formattedAutoNumber = autoNumber + '';
4
+ if (!digits) {
5
+ return formattedAutoNumber;
6
+ }
7
+ var prefixZeroLength = digits - formattedAutoNumber.length;
8
+ if (digits > 1 && prefixZeroLength > 0) {
9
+ formattedAutoNumber = Array(prefixZeroLength + 1).join(0) + formattedAutoNumber;
10
+ }
11
+ if (prefix) {
12
+ return "".concat(prefix, "-").concat(formattedAutoNumber);
13
+ }
14
+ return formattedAutoNumber;
15
+ };
16
+
17
+ export { getFormattedAutoNumber };
@@ -42,5 +42,18 @@ var getCollaboratorsName = function getCollaboratorsName(collaborators, emails)
42
42
  if (!Array.isArray(collaboratorsNames) || collaboratorsNames.length === 0) return '';
43
43
  return collaboratorsNames.join(', ');
44
44
  };
45
+ var getCollaboratorEmailsByNames = function getCollaboratorEmailsByNames(names, collaborators) {
46
+ if (!Array.isArray(names) || !Array.isArray(collaborators)) return [];
47
+ var emails = [];
48
+ names.forEach(function (name) {
49
+ var collaborator = collaborators.find(function (collaboratorItem) {
50
+ return collaboratorItem.name === name;
51
+ });
52
+ if (collaborator) {
53
+ emails.push(collaborator.email);
54
+ }
55
+ });
56
+ return emails;
57
+ };
45
58
 
46
- export { getCollaborator, getCollaboratorsName, getCollaboratorsNames };
59
+ export { getCollaborator, getCollaboratorEmailsByNames, getCollaboratorsName, getCollaboratorsNames };
@@ -0,0 +1,85 @@
1
+ import dayjs from 'dayjs';
2
+ import { isNumber } from '../number.js';
3
+ import '../constants/column.js';
4
+ import '../constants/formula.js';
5
+ import '../constants/group.js';
6
+ import '../cell-value-get/cell-value.js';
7
+ import { getFormattedAutoNumber } from '../cell-value-get/auto-number.js';
8
+ import { DateUtils } from '../date.js';
9
+ import '../constants/filter/filter-column-options.js';
10
+ import '../constants/filter/filter-modifier.js';
11
+ import '../constants/filter/filter-predicate.js';
12
+ import '../constants/filter/filter-is-within.js';
13
+ import '../constants/sort.js';
14
+ import { AUTO_NUMBER_DATE_FORMAT } from '../constants/auto-number.js';
15
+
16
+ var formatRateMaxNumberToNumber = function formatRateMaxNumberToNumber(oldCellValue, data) {
17
+ if (oldCellValue === 0) return 0;
18
+ if (!oldCellValue) return '';
19
+ var _ref = data || {},
20
+ rate_max_number = _ref.rate_max_number;
21
+ return oldCellValue > rate_max_number ? rate_max_number : oldCellValue;
22
+ };
23
+ var formatTextToAutoNumber = function formatTextToAutoNumber(text, autoNumberData) {
24
+ if (!text || !autoNumberData) return null;
25
+ var textPrefix = null;
26
+ var number = isNumber(text) ? text : 0;
27
+ if (typeof text === 'string') {
28
+ number = Number(text);
29
+ if (!isNumber(number)) {
30
+ var textParts = text.split('-');
31
+ var textPartsLength = textParts.length;
32
+ var textNumber = null;
33
+ if (textPartsLength === 1) {
34
+ textNumber = textParts[0];
35
+ } else {
36
+ textPrefix = textParts[0];
37
+ textNumber = textParts[1];
38
+ }
39
+ number = textNumber && Number(textNumber);
40
+ if (!isNumber(number)) {
41
+ return null;
42
+ }
43
+ }
44
+ }
45
+ if (number < 1) {
46
+ return null;
47
+ }
48
+ var prefix_type = autoNumberData.prefix_type,
49
+ prefix = autoNumberData.prefix,
50
+ digits = autoNumberData.digits;
51
+ number = parseInt(number);
52
+
53
+ // 1. use the prefix supplied by autoNumberData if the text can only contains number.
54
+ // 2. only number will be kept if has no prefix_type in the autoNumberData.
55
+ if (!textPrefix || !prefix_type) {
56
+ var newPrefix = prefix_type === 'date' ? dayjs().format(AUTO_NUMBER_DATE_FORMAT) : prefix;
57
+ return getFormattedAutoNumber(number, digits, newPrefix);
58
+ }
59
+
60
+ // 3. string prefix: the 'textPrefix' must be same to autoNumberData's prefix.
61
+ if (prefix_type === 'string') {
62
+ if (textPrefix !== prefix) {
63
+ return null;
64
+ }
65
+ return getFormattedAutoNumber(number, digits, prefix);
66
+ }
67
+
68
+ // 4. date prefix: the format of 'textPrefix' must be consistent with 'YYYYMMDD'.
69
+ if (prefix_type === 'date') {
70
+ var matched = textPrefix && textPrefix.length === 8 && /(\d{4})(\d{2})(\d{2})$/.test(textPrefix);
71
+ if (!matched) {
72
+ return null;
73
+ }
74
+ var year = textPrefix.substring(0, 4);
75
+ var month = textPrefix.substring(4, 6);
76
+ var day = textPrefix.substring(6, 8);
77
+ if (!DateUtils.getValidDate("".concat(year, "-").concat(month, "-").concat(day))) {
78
+ return null;
79
+ }
80
+ return getFormattedAutoNumber(number, digits, textPrefix);
81
+ }
82
+ return null;
83
+ };
84
+
85
+ export { formatRateMaxNumberToNumber, formatTextToAutoNumber };
@@ -0,0 +1,5 @@
1
+ var formatTextToCheckbox = function formatTextToCheckbox(value) {
2
+ return value === 'true' || value === true;
3
+ };
4
+
5
+ export { formatTextToCheckbox };
@@ -0,0 +1,56 @@
1
+ import { DURATION_FORMATS_MAP, DURATION_FORMATS } from '../constants/column.js';
2
+ import '../constants/filter/filter-column-options.js';
3
+ import '../constants/filter/filter-modifier.js';
4
+ import '../constants/filter/filter-predicate.js';
5
+ import '../constants/filter/filter-is-within.js';
6
+ import '../constants/formula.js';
7
+ import '../constants/sort.js';
8
+ import '../constants/group.js';
9
+ import { isNumber } from '../number.js';
10
+
11
+ var formatTextToDuration = function formatTextToDuration(value, data) {
12
+ var _ref = data || {},
13
+ duration_format = _ref.duration_format;
14
+ duration_format = duration_format || DURATION_FORMATS_MAP.H_MM;
15
+ if (DURATION_FORMATS.findIndex(function (format) {
16
+ return format.type === duration_format;
17
+ }) < 0) {
18
+ return null;
19
+ }
20
+ if (value === 0) return 0;
21
+ if (!value) return null;
22
+
23
+ // value is number or string number
24
+ var numericDuration = value - 0;
25
+ if (isNumber(numericDuration)) return numericDuration;
26
+
27
+ // value is string
28
+ var stringifyDuration = value + '';
29
+ var isNegative = stringifyDuration[0] === '-';
30
+ if (isNegative) {
31
+ stringifyDuration = stringifyDuration.substring(1);
32
+ }
33
+ var timeParts = stringifyDuration.split(/[::]/); // support ':' and ':'.
34
+ var timePartsLen = timeParts.length;
35
+ if (timePartsLen === 0) return '';
36
+ var hoursIndex, minutesIndex, secondsIndex;
37
+ if (duration_format === DURATION_FORMATS_MAP.H_MM) {
38
+ hoursIndex = timePartsLen - 2;
39
+ minutesIndex = timePartsLen - 1;
40
+ } else {
41
+ hoursIndex = timePartsLen - 3;
42
+ minutesIndex = timePartsLen - 2;
43
+ secondsIndex = timePartsLen - 1;
44
+ }
45
+ var hours = timeParts[hoursIndex] - 0;
46
+ var minutes = timeParts[minutesIndex] - 0;
47
+ var seconds = timeParts[secondsIndex] - 0;
48
+ if (!isNumber(hours) && !isNumber(minutes) && !isNumber(seconds)) return null;
49
+ hours = isNumber(hours) ? hours : 0;
50
+ minutes = isNumber(minutes) ? minutes : 0;
51
+ seconds = isNumber(seconds) ? seconds : 0;
52
+ var result = hours * 3600 + minutes * 60 + seconds;
53
+ return isNegative ? -result : result;
54
+ };
55
+
56
+ export { formatTextToDuration };
@@ -0,0 +1,68 @@
1
+ var provinceReg = /.+省|.+自治区|.+特别行政区|北京市|天津市|上海市|重庆市|安徽|福建|甘肃|广东|广西|贵州|海南|河北|河南|黑龙江|湖北|湖南|吉林|江苏|江西|辽宁|内蒙古|宁夏|青海|山东|山西|陕西|四川|西藏|新疆|云南|浙江|北京|上海|天津|重庆/;
2
+ var cityReg = /.+自治州|[^市]+市|.+盟|.+地区|.+区划/;
3
+ var districtReg = /(.+市|.+县|.+旗|.+区)/;
4
+ var formatTextToGeolocation = function formatTextToGeolocation(value, columnData) {
5
+ // compatible with the old version, the old version data may be null or undefined
6
+ var _ref = columnData || {},
7
+ _ref$geo_format = _ref.geo_format,
8
+ geo_format = _ref$geo_format === void 0 ? 'geolocation' : _ref$geo_format;
9
+ var cellValue = value || '';
10
+ if (cellValue.length < 3) {
11
+ return {};
12
+ }
13
+ if (geo_format === 'lng_lat') {
14
+ // match floating point numbers
15
+ // ^[1-9]\d*\.\d+$ --> floating point type that does not start with 0
16
+ // ^0\.\d+$ --> floating point type starting with 0
17
+ // ^[1-9]\d*$ --> non-zero integer
18
+ // 0
19
+ var reg = /^-?([1-9]\d*\.\d+|0\.\d+|[1-9]\d*|0)$/;
20
+ if (cellValue.indexOf(',') < 0) return {};
21
+ var lng_lat = cellValue.split(',');
22
+ if (lng_lat.length !== 2) {
23
+ return {};
24
+ }
25
+ var lng = lng_lat[0].trim();
26
+ var lat = lng_lat[1].trim();
27
+ if (!lng || !lat) {
28
+ return {};
29
+ }
30
+ if (!lng.match(reg) || !lat.match(reg)) {
31
+ return {};
32
+ }
33
+ return {
34
+ lng: lng,
35
+ lat: lat
36
+ };
37
+ }
38
+ var matchedProvince = cellValue.match(provinceReg);
39
+ var province = '',
40
+ city = '',
41
+ district = '',
42
+ detail = '';
43
+ if (matchedProvince) {
44
+ province = matchedProvince[0];
45
+ cellValue = cellValue.slice(matchedProvince.index + province.length);
46
+ }
47
+ var matchedCity = cellValue.match(cityReg);
48
+ if (matchedCity) {
49
+ city = matchedCity[0];
50
+ cellValue = cellValue.slice(matchedCity.index + city.length);
51
+ } else if (province.includes('北京') || province.includes('天津') || province.includes('重庆') || province.includes('上海')) {
52
+ city = province;
53
+ }
54
+ var matchedDistrict = cellValue.match(districtReg);
55
+ if (matchedDistrict) {
56
+ district = matchedDistrict[0];
57
+ cellValue = cellValue.slice(matchedDistrict.index + district.length);
58
+ }
59
+ detail = cellValue;
60
+ return {
61
+ province: province,
62
+ city: city,
63
+ district: district,
64
+ detail: detail
65
+ };
66
+ };
67
+
68
+ export { formatTextToGeolocation };
@@ -0,0 +1,20 @@
1
+ var formatTextToImage = function formatTextToImage(value) {
2
+ if (!value || !value.trim()) {
3
+ return null;
4
+ }
5
+ var imageUrl = value.trim();
6
+ var imageUrls = imageUrl.split(' ');
7
+ imageUrls = imageUrls.filter(function (imageUrl) {
8
+ var strUrl = imageUrl.match(/http:\/\/.+/);
9
+ if (!strUrl) {
10
+ return false;
11
+ }
12
+ if (!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(imageUrl)) {
13
+ return false;
14
+ }
15
+ return true;
16
+ });
17
+ return imageUrls.length > 0 ? imageUrls : null;
18
+ };
19
+
20
+ export { formatTextToImage };