dtable-utils 4.3.5 → 4.3.7
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/dist/index.js +1 -1
- package/es/archive/clause-module/search.js +185 -0
- package/es/archive/clause-module/update.js +121 -0
- package/es/archive/sql-generator/filter-condition.js +15 -7
- package/es/cell-value-get/auto-number.js +17 -0
- package/es/cell-value-get/collaborator.js +14 -1
- package/es/cell-value-set/auto-number.js +85 -0
- package/es/cell-value-set/checkbox.js +5 -0
- package/es/cell-value-set/duration.js +56 -0
- package/es/cell-value-set/geolocation.js +68 -0
- package/es/cell-value-set/image.js +20 -0
- package/es/cell-value-set/long-text.js +27 -0
- package/es/cell-value-set/multiple-select.js +81 -0
- package/es/cell-value-set/number.js +16 -1
- package/es/cell-value-set/single-select.js +47 -0
- package/es/column/file.js +13 -0
- package/es/column/long-text.js +68 -0
- package/es/constants/auto-number.js +7 -0
- package/es/constants/column.js +2 -1
- package/es/constants/formula.js +2 -1
- package/es/constants/limit.js +7 -1
- package/es/constants/permission.js +7 -0
- package/es/filter/filter-column/long-text.js +6 -1
- package/es/helper/patch-utils.js +38 -0
- package/es/index.js +19 -4
- package/es/row/convert.js +201 -2
- package/es/view/summaries.js +11 -2
- package/lib/archive/clause-module/search.js +200 -0
- package/lib/archive/clause-module/update.js +126 -0
- package/lib/archive/sql-generator/filter-condition.js +15 -7
- package/lib/cell-value-get/auto-number.js +21 -0
- package/lib/cell-value-get/collaborator.js +14 -0
- package/lib/cell-value-set/auto-number.js +94 -0
- package/lib/cell-value-set/checkbox.js +9 -0
- package/lib/cell-value-set/duration.js +60 -0
- package/lib/cell-value-set/geolocation.js +72 -0
- package/lib/cell-value-set/image.js +24 -0
- package/lib/cell-value-set/long-text.js +31 -0
- package/lib/cell-value-set/multiple-select.js +86 -0
- package/lib/cell-value-set/number.js +16 -0
- package/lib/cell-value-set/single-select.js +51 -0
- package/lib/column/file.js +21 -0
- package/lib/column/long-text.js +72 -0
- package/lib/constants/auto-number.js +12 -0
- package/lib/constants/column.js +2 -0
- package/lib/constants/formula.js +2 -0
- package/lib/constants/limit.js +8 -0
- package/lib/constants/permission.js +11 -0
- package/lib/filter/filter-column/long-text.js +6 -1
- package/lib/helper/patch-utils.js +47 -0
- package/lib/index.js +64 -20
- package/lib/row/convert.js +204 -0
- package/lib/view/summaries.js +11 -2
- package/package.json +1 -1
package/es/view/summaries.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { getRowsByIds } from '../table/row.js';
|
|
2
2
|
import { isTableRows } from '../row/core.js';
|
|
3
|
+
import '@babel/runtime/helpers/typeof';
|
|
3
4
|
import '../cell-value-get/cell-value.js';
|
|
4
5
|
import '@babel/runtime/helpers/defineProperty';
|
|
5
6
|
import '@babel/runtime/helpers/toConsumableArray';
|
|
6
7
|
import { FORMULA_COLUMN_TYPES_MAP } from '../constants/formula.js';
|
|
7
|
-
import '@babel/runtime/helpers/typeof';
|
|
8
|
-
import { isNumericColumn } from '../column/number.js';
|
|
9
8
|
import { isNumber } from '../number.js';
|
|
9
|
+
import '../constants/column.js';
|
|
10
|
+
import '../date.js';
|
|
11
|
+
import '../constants/filter/filter-column-options.js';
|
|
12
|
+
import '../constants/filter/filter-modifier.js';
|
|
13
|
+
import '../constants/filter/filter-predicate.js';
|
|
14
|
+
import '../constants/filter/filter-is-within.js';
|
|
15
|
+
import '../constants/sort.js';
|
|
16
|
+
import '../constants/group.js';
|
|
17
|
+
import { isNumericColumn } from '../column/number.js';
|
|
18
|
+
import 'dayjs';
|
|
10
19
|
|
|
11
20
|
/**
|
|
12
21
|
* Calculate summaries of table numeric columns
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var dayjs = require('dayjs');
|
|
6
|
+
var utc = require('dayjs/plugin/utc');
|
|
7
|
+
require('../../constants/column.js');
|
|
8
|
+
var index = require('../../constants/filter/index.js');
|
|
9
|
+
require('../../constants/formula.js');
|
|
10
|
+
require('../../constants/sort.js');
|
|
11
|
+
require('../../constants/group.js');
|
|
12
|
+
var filterCondition = require('../sql-generator/filter-condition.js');
|
|
13
|
+
var core$1 = require('../../sort/core.js');
|
|
14
|
+
require('../../cell-value-get/cell-value.js');
|
|
15
|
+
var filter = require('../../validate/filter.js');
|
|
16
|
+
var core = require('../../view/core.js');
|
|
17
|
+
require('@babel/runtime/helpers/typeof');
|
|
18
|
+
require('@babel/runtime/helpers/defineProperty');
|
|
19
|
+
require('@babel/runtime/helpers/toConsumableArray');
|
|
20
|
+
require('../../date.js');
|
|
21
|
+
|
|
22
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
|
+
|
|
24
|
+
var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
|
|
25
|
+
var utc__default = /*#__PURE__*/_interopDefaultLegacy(utc);
|
|
26
|
+
|
|
27
|
+
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; } } }; }
|
|
28
|
+
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); }
|
|
29
|
+
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; }
|
|
30
|
+
dayjs__default["default"].extend(utc__default["default"]);
|
|
31
|
+
var generatorSearchSQL = function generatorSearchSQL(table, view, start, limit, username, userId, userDepartmentIdsMap) {
|
|
32
|
+
// MAIN
|
|
33
|
+
var table_name = table.name;
|
|
34
|
+
var searchingColumnsString = generateViewSearchColumnsString(table, view);
|
|
35
|
+
var sql = "SELECT ".concat(searchingColumnsString, " FROM `").concat(table_name, "`");
|
|
36
|
+
|
|
37
|
+
// WHERE CLAUSE
|
|
38
|
+
var filterClause = filterCondition.filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap);
|
|
39
|
+
|
|
40
|
+
// ORDER BY CLAUSE
|
|
41
|
+
var sortSqlClause = sort2SqlCondition(table, view);
|
|
42
|
+
|
|
43
|
+
// LIMIT CLAUSE
|
|
44
|
+
var reg1 = /^[1-9]d*|0$/; // non-negative integer
|
|
45
|
+
var reg2 = /^[1-9]\d*$/; // positive integer
|
|
46
|
+
var limitClause = '';
|
|
47
|
+
var isValidStart = reg1.test(start);
|
|
48
|
+
var isValidLimit = reg2.test(limit);
|
|
49
|
+
if (isValidStart && isValidLimit) {
|
|
50
|
+
limitClause = "LIMIT ".concat(start, ", ").concat(limit, ";");
|
|
51
|
+
}
|
|
52
|
+
return "".concat(sql, " ").concat(filterClause, " ").concat(sortSqlClause, " ").concat(limitClause);
|
|
53
|
+
};
|
|
54
|
+
var generatorCustomSearchSQL = function generatorCustomSearchSQL(table, start, limit, conditions) {
|
|
55
|
+
// MAIN
|
|
56
|
+
var table_name = table.name;
|
|
57
|
+
var sql = "SELECT * FROM `".concat(table_name, "`");
|
|
58
|
+
|
|
59
|
+
// WHERE CLAUSE
|
|
60
|
+
var filterClause = customFilter2SqlCondition(table, conditions);
|
|
61
|
+
|
|
62
|
+
// ORDER BY CLAUSE
|
|
63
|
+
var sortSqlClause = customSort2SqlCondition(table, conditions);
|
|
64
|
+
|
|
65
|
+
// LIMIT CLAUSE
|
|
66
|
+
var reg1 = /^[1-9]d*|0$/; // non-negative integer
|
|
67
|
+
var reg2 = /^[1-9]\d*$/; // positive integer
|
|
68
|
+
var limitClause = '';
|
|
69
|
+
var isValidStart = reg1.test(start);
|
|
70
|
+
var isValidLimit = reg2.test(limit);
|
|
71
|
+
if (isValidStart && isValidLimit) {
|
|
72
|
+
limitClause = "LIMIT ".concat(start, ", ").concat(limit, ";");
|
|
73
|
+
}
|
|
74
|
+
return "".concat(sql, " ").concat(filterClause, " ").concat(sortSqlClause, " ").concat(limitClause);
|
|
75
|
+
};
|
|
76
|
+
var generateSearchColumnsString = function generateSearchColumnsString(columns) {
|
|
77
|
+
var columnsNames = columns ? columns.map(function (column) {
|
|
78
|
+
return "`".concat(column.name, "`");
|
|
79
|
+
}) : [];
|
|
80
|
+
columnsNames.push('`_id`', '`_archived`', '`_locked`');
|
|
81
|
+
return columnsNames.join(', ');
|
|
82
|
+
};
|
|
83
|
+
var generateViewSearchColumnsString = function generateViewSearchColumnsString(table, view) {
|
|
84
|
+
var visibleColumns = table ? core.getViewShownColumns(view, table.columns) : [];
|
|
85
|
+
return generateSearchColumnsString(visibleColumns);
|
|
86
|
+
};
|
|
87
|
+
var sort2SqlCondition = function sort2SqlCondition(table, view) {
|
|
88
|
+
var columns = table.columns;
|
|
89
|
+
var sorts = core$1.getValidSorts(view.sorts, columns);
|
|
90
|
+
if (!sorts || sorts.length === 0) {
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
var orderHeader = 'ORDER BY ';
|
|
94
|
+
var clauses = sorts.map(function (sort) {
|
|
95
|
+
var column_key = sort.column_key,
|
|
96
|
+
sort_type = sort.sort_type;
|
|
97
|
+
var column = columns.find(function (item) {
|
|
98
|
+
return item.key === column_key;
|
|
99
|
+
});
|
|
100
|
+
if (!column) return '';
|
|
101
|
+
var type = sort_type === 'up' ? 'ASC' : 'DESC';
|
|
102
|
+
return "`".concat(column.name, "` ").concat(type);
|
|
103
|
+
});
|
|
104
|
+
clauses = clauses.filter(function (item) {
|
|
105
|
+
return item && item !== '';
|
|
106
|
+
});
|
|
107
|
+
if (clauses.length === 0) return '';
|
|
108
|
+
return orderHeader + clauses.join(', ');
|
|
109
|
+
};
|
|
110
|
+
var customSort2SqlCondition = function customSort2SqlCondition(table, sort_conditions) {
|
|
111
|
+
var columns = table.columns;
|
|
112
|
+
var condition_sorts = sort_conditions && sort_conditions.sorts || [];
|
|
113
|
+
if (!condition_sorts || condition_sorts.length === 0) {
|
|
114
|
+
return '';
|
|
115
|
+
}
|
|
116
|
+
var orderHeader = 'ORDER BY ';
|
|
117
|
+
var clauses = condition_sorts.map(function (sort) {
|
|
118
|
+
var column_key = sort.column_key,
|
|
119
|
+
sort_type = sort.sort_type;
|
|
120
|
+
var column = columns.find(function (item) {
|
|
121
|
+
return item.key === column_key;
|
|
122
|
+
});
|
|
123
|
+
var type = sort_type === 'up' ? 'ASC' : 'DESC';
|
|
124
|
+
if (!column) {
|
|
125
|
+
if (['_ctime', '_mtime'].indexOf(column_key) !== -1) {
|
|
126
|
+
return "`".concat(column_key, "` ").concat(type);
|
|
127
|
+
}
|
|
128
|
+
return '';
|
|
129
|
+
}
|
|
130
|
+
return "`".concat(column.name, "` ").concat(type);
|
|
131
|
+
});
|
|
132
|
+
clauses = clauses.filter(function (item) {
|
|
133
|
+
return item && item !== '';
|
|
134
|
+
});
|
|
135
|
+
if (clauses.length === 0) return '';
|
|
136
|
+
return orderHeader + clauses.join(', ');
|
|
137
|
+
};
|
|
138
|
+
var customFilter2SqlCondition = function customFilter2SqlCondition(table, filter_conditions) {
|
|
139
|
+
var columns = table.columns;
|
|
140
|
+
var filter_groups = filter_conditions.filter_groups,
|
|
141
|
+
group_conjunction = filter_conditions.group_conjunction;
|
|
142
|
+
if (!filter_groups || filter_groups.length === 0) {
|
|
143
|
+
return '';
|
|
144
|
+
}
|
|
145
|
+
var filterHeader = 'WHERE ';
|
|
146
|
+
var groupStringList = [];
|
|
147
|
+
|
|
148
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
149
|
+
var _iterator = _createForOfIteratorHelper(filter_groups),
|
|
150
|
+
_step;
|
|
151
|
+
try {
|
|
152
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
153
|
+
var filterGroup = _step.value;
|
|
154
|
+
var filters = filterGroup.filters,
|
|
155
|
+
filter_conjunction = filterGroup.filter_conjunction;
|
|
156
|
+
var stringList = filters.map(function (filterItem) {
|
|
157
|
+
var _ValidateFilter$valid = filter.ValidateFilter.validate(filterItem, columns),
|
|
158
|
+
error_message = _ValidateFilter$valid.error_message;
|
|
159
|
+
if (error_message) {
|
|
160
|
+
if (error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
161
|
+
return '';
|
|
162
|
+
}
|
|
163
|
+
throw new Error(error_message);
|
|
164
|
+
}
|
|
165
|
+
var column_key = filterItem.column_key;
|
|
166
|
+
var column = columns.find(function (item) {
|
|
167
|
+
return item.key === column_key;
|
|
168
|
+
});
|
|
169
|
+
return filterCondition.getSqlConditionByFilter(column, filterItem);
|
|
170
|
+
});
|
|
171
|
+
stringList = stringList.filter(function (item) {
|
|
172
|
+
return item && item.length > 0;
|
|
173
|
+
});
|
|
174
|
+
if (stringList.length !== 0) {
|
|
175
|
+
var filterContent = stringList[0];
|
|
176
|
+
if (stringList.length > 1) {
|
|
177
|
+
for (var i = 1; i < stringList.length; i++) {
|
|
178
|
+
filterContent += " ".concat(filter_conjunction, " (").concat(stringList[i], ")");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// eslint-disable-next-line prefer-template
|
|
182
|
+
filterContent = '(' + filterContent + ')';
|
|
183
|
+
groupStringList.push(filterContent);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
} catch (err) {
|
|
187
|
+
_iterator.e(err);
|
|
188
|
+
} finally {
|
|
189
|
+
_iterator.f();
|
|
190
|
+
}
|
|
191
|
+
return filterHeader + groupStringList.join(" ".concat(group_conjunction, " "));
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
exports.customFilter2SqlCondition = customFilter2SqlCondition;
|
|
195
|
+
exports.customSort2SqlCondition = customSort2SqlCondition;
|
|
196
|
+
exports.generateSearchColumnsString = generateSearchColumnsString;
|
|
197
|
+
exports.generateViewSearchColumnsString = generateViewSearchColumnsString;
|
|
198
|
+
exports.generatorCustomSearchSQL = generatorCustomSearchSQL;
|
|
199
|
+
exports.generatorSearchSQL = generatorSearchSQL;
|
|
200
|
+
exports.sort2SqlCondition = sort2SqlCondition;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var cellType = require('../../constants/cell-type.js');
|
|
6
|
+
var column = require('../../constants/column.js');
|
|
7
|
+
require('../../constants/filter/filter-column-options.js');
|
|
8
|
+
require('../../constants/filter/filter-modifier.js');
|
|
9
|
+
require('../../constants/filter/filter-predicate.js');
|
|
10
|
+
require('../../constants/filter/filter-is-within.js');
|
|
11
|
+
require('../../constants/formula.js');
|
|
12
|
+
require('../../constants/sort.js');
|
|
13
|
+
require('../../constants/group.js');
|
|
14
|
+
require('dayjs');
|
|
15
|
+
var number = require('../../number.js');
|
|
16
|
+
var option = require('../../cell-value-get/option.js');
|
|
17
|
+
require('../../cell-value-get/cell-value.js');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* What: get converted value to update row.
|
|
21
|
+
* Where: big data view
|
|
22
|
+
* @param {Object} column
|
|
23
|
+
* @param {Object} { [column.key]: 'xxx' }
|
|
24
|
+
* @returns converted value
|
|
25
|
+
*/
|
|
26
|
+
var getConvertedUpdatedValue = function getConvertedUpdatedValue(column$1, updated) {
|
|
27
|
+
if (!column$1 || column.NOT_SUPPORT_EDIT_COLUMN_TYPE.includes(column$1.type)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
var columnType = column$1.type,
|
|
31
|
+
data = column$1.data;
|
|
32
|
+
var columnValue = Object.values(updated)[0];
|
|
33
|
+
if (column.NUMERIC_COLUMNS_TYPES.includes(columnType)) {
|
|
34
|
+
return number.isNumber(columnValue) ? columnValue : null;
|
|
35
|
+
}
|
|
36
|
+
switch (columnType) {
|
|
37
|
+
case cellType.CellType.TEXT:
|
|
38
|
+
case cellType.CellType.URL:
|
|
39
|
+
case cellType.CellType.EMAIL:
|
|
40
|
+
{
|
|
41
|
+
if (!columnValue) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
var text = columnValue.trim();
|
|
45
|
+
return text || null;
|
|
46
|
+
}
|
|
47
|
+
case cellType.CellType.CHECKBOX:
|
|
48
|
+
{
|
|
49
|
+
if (typeof columnValue !== 'boolean') {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return columnValue;
|
|
53
|
+
}
|
|
54
|
+
case cellType.CellType.DATE:
|
|
55
|
+
{
|
|
56
|
+
if (!columnValue) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// compatible with underlying storage
|
|
60
|
+
var format = data && data.format;
|
|
61
|
+
var isHasMinute = format && format.indexOf('HH:mm') > -1;
|
|
62
|
+
// eslint-disable-next-line prefer-template
|
|
63
|
+
return isHasMinute ? columnValue + ':00' : columnValue;
|
|
64
|
+
}
|
|
65
|
+
case cellType.CellType.LONG_TEXT:
|
|
66
|
+
{
|
|
67
|
+
if (!columnValue || !Object.prototype.hasOwnProperty.call(columnValue, 'text')) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return columnValue.text || null;
|
|
71
|
+
}
|
|
72
|
+
case cellType.CellType.SINGLE_SELECT:
|
|
73
|
+
{
|
|
74
|
+
var options = data && data.options;
|
|
75
|
+
return option.getOptionName(options, columnValue) || null;
|
|
76
|
+
}
|
|
77
|
+
case cellType.CellType.MULTIPLE_SELECT:
|
|
78
|
+
{
|
|
79
|
+
var _options = data && data.options;
|
|
80
|
+
if (!Array.isArray(columnValue) || columnValue.length === 0 || !Array.isArray(_options) || _options.length === 0) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
var optionNames = columnValue.map(function (optionId) {
|
|
84
|
+
return option.getOptionName(_options, optionId);
|
|
85
|
+
}).filter(Boolean);
|
|
86
|
+
if (optionNames.length === 0) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return optionNames;
|
|
90
|
+
}
|
|
91
|
+
case cellType.CellType.COLLABORATOR:
|
|
92
|
+
{
|
|
93
|
+
if (!Array.isArray(columnValue) || columnValue.length === 0) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
return columnValue.map(function (item) {
|
|
97
|
+
return item;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
case cellType.CellType.FILE:
|
|
101
|
+
{
|
|
102
|
+
return Array.isArray(columnValue) ? columnValue : [];
|
|
103
|
+
}
|
|
104
|
+
default:
|
|
105
|
+
{
|
|
106
|
+
return columnValue || null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
var generatorUpdateSql = function generatorUpdateSql(table, columns, updated, rowId) {
|
|
111
|
+
var columnKey = Object.keys(updated)[0];
|
|
112
|
+
var column = columns.find(function (item) {
|
|
113
|
+
return item.key === columnKey;
|
|
114
|
+
});
|
|
115
|
+
var columnName = column.name;
|
|
116
|
+
var sql = "update `".concat(table.name, "` set `").concat(columnName, "` = ? where `_id` = ?;");
|
|
117
|
+
var updateValue = getConvertedUpdatedValue(column, updated);
|
|
118
|
+
var parameters = [updateValue, rowId];
|
|
119
|
+
return {
|
|
120
|
+
sql: sql,
|
|
121
|
+
parameters: parameters
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
exports.generatorUpdateSql = generatorUpdateSql;
|
|
126
|
+
exports.getConvertedUpdatedValue = getConvertedUpdatedValue;
|
|
@@ -12,6 +12,7 @@ var index = require('../../constants/filter/index.js');
|
|
|
12
12
|
var cellType = require('../../constants/cell-type.js');
|
|
13
13
|
var column = require('../../constants/column.js');
|
|
14
14
|
var formula = require('../../constants/formula.js');
|
|
15
|
+
var patchUtils = require('../../helper/patch-utils.js');
|
|
15
16
|
var filterPredicate = require('../../constants/filter/filter-predicate.js');
|
|
16
17
|
var filterModifier = require('../../constants/filter/filter-modifier.js');
|
|
17
18
|
|
|
@@ -318,6 +319,7 @@ var getSpecificDepartmentIds = function getSpecificDepartmentIds(filter_term, cu
|
|
|
318
319
|
|
|
319
320
|
// DEPARTMENT-SINGLE-SELECT
|
|
320
321
|
var departmentSingleSelectSqlCondition = function departmentSingleSelectSqlCondition(column$1, filterItem, userDepartmentIdsMap) {
|
|
322
|
+
var patchedUserDepartmentIdsMap = patchUtils["default"].getUserDepartmentIdsMap(userDepartmentIdsMap);
|
|
321
323
|
var filter_predicate = filterItem.filter_predicate,
|
|
322
324
|
filter_term = filterItem.filter_term;
|
|
323
325
|
var name = column$1.name;
|
|
@@ -332,8 +334,8 @@ var departmentSingleSelectSqlCondition = function departmentSingleSelectSqlCondi
|
|
|
332
334
|
if (!filter_term || filter_term === 0) {
|
|
333
335
|
return '';
|
|
334
336
|
}
|
|
335
|
-
var currentUserDepartmentIds =
|
|
336
|
-
var currentUserDepartmentAndSubIds =
|
|
337
|
+
var currentUserDepartmentIds = patchedUserDepartmentIdsMap && patchedUserDepartmentIdsMap.current_user_department_ids;
|
|
338
|
+
var currentUserDepartmentAndSubIds = patchedUserDepartmentIdsMap && patchedUserDepartmentIdsMap.current_user_department_and_sub_ids;
|
|
337
339
|
var isValidCurrentUserDepartmentIds = Array.isArray(currentUserDepartmentIds);
|
|
338
340
|
var isValidCurrentUserDepartmentAndSubIds = Array.isArray(currentUserDepartmentAndSubIds);
|
|
339
341
|
if (filter_predicate === filterPredicate.FILTER_PREDICATE_TYPE.IS) {
|
|
@@ -605,9 +607,12 @@ var formulaSqlCondition = function formulaSqlCondition(column, filterItem) {
|
|
|
605
607
|
return '';
|
|
606
608
|
};
|
|
607
609
|
var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterItem, username, userId, userDepartmentIdsMap) {
|
|
610
|
+
var patchedUsername = patchUtils["default"].getUsername(username);
|
|
611
|
+
var patchedUserId = patchUtils["default"].getUserId(userId);
|
|
612
|
+
var patchedUserDepartmentIdsMap = patchUtils["default"].getUserDepartmentIdsMap(userDepartmentIdsMap);
|
|
608
613
|
var type = column.type;
|
|
609
614
|
if (type === cellType.CellType.TEXT || type === cellType.CellType.AUTO_NUMBER || type === cellType.CellType.EMAIL || type === cellType.CellType.GEOLOCATION || type === cellType.CellType.URL) {
|
|
610
|
-
return textSqlCondition(column, filterItem,
|
|
615
|
+
return textSqlCondition(column, filterItem, patchedUserId);
|
|
611
616
|
}
|
|
612
617
|
if (type === cellType.CellType.DURATION || type === cellType.CellType.NUMBER || type === cellType.CellType.RATE) {
|
|
613
618
|
return numberSqlCondition(column, filterItem);
|
|
@@ -625,16 +630,16 @@ var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterIte
|
|
|
625
630
|
return singleSelectSqlCondition(column, filterItem);
|
|
626
631
|
}
|
|
627
632
|
if (type === cellType.CellType.DEPARTMENT_SINGLE_SELECT) {
|
|
628
|
-
return departmentSingleSelectSqlCondition(column, filterItem,
|
|
633
|
+
return departmentSingleSelectSqlCondition(column, filterItem, patchedUserDepartmentIdsMap);
|
|
629
634
|
}
|
|
630
635
|
if (type === cellType.CellType.MULTIPLE_SELECT) {
|
|
631
636
|
return multipleSelectSqlCondition(column, filterItem);
|
|
632
637
|
}
|
|
633
638
|
if (type === cellType.CellType.LAST_MODIFIER || type === cellType.CellType.CREATOR) {
|
|
634
|
-
return creatorSqlCondition(column, filterItem,
|
|
639
|
+
return creatorSqlCondition(column, filterItem, patchedUsername);
|
|
635
640
|
}
|
|
636
641
|
if (type === cellType.CellType.COLLABORATOR) {
|
|
637
|
-
return collaboratorSqlCondition(column, filterItem,
|
|
642
|
+
return collaboratorSqlCondition(column, filterItem, patchedUsername);
|
|
638
643
|
}
|
|
639
644
|
if (type === cellType.CellType.IMAGE || type === cellType.CellType.FILE || type === cellType.CellType.DIGITAL_SIGN) {
|
|
640
645
|
return fileSqlCondition(column, filterItem);
|
|
@@ -651,6 +656,9 @@ var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterIte
|
|
|
651
656
|
return '';
|
|
652
657
|
};
|
|
653
658
|
var filter2SqlCondition = function filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap) {
|
|
659
|
+
var patchedUsername = patchUtils["default"].getUsername(username);
|
|
660
|
+
var patchedUserId = patchUtils["default"].getUserId(userId);
|
|
661
|
+
var patchedUserDepartmentIdsMap = patchUtils["default"].getUserDepartmentIdsMap(userDepartmentIdsMap);
|
|
654
662
|
var columns = table.columns;
|
|
655
663
|
var filter_conjunction = view.filter_conjunction,
|
|
656
664
|
filters = view.filters;
|
|
@@ -671,7 +679,7 @@ var filter2SqlCondition = function filter2SqlCondition(table, view, username, us
|
|
|
671
679
|
}
|
|
672
680
|
var column_key = filterItem.column_key;
|
|
673
681
|
var column = column$1.getTableColumnByKey(table, column_key);
|
|
674
|
-
return getSqlConditionByFilter(column, filterItem,
|
|
682
|
+
return getSqlConditionByFilter(column, filterItem, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap);
|
|
675
683
|
});
|
|
676
684
|
|
|
677
685
|
// 2. filtered '' sql clause
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var getFormattedAutoNumber = function getFormattedAutoNumber(autoNumber, digits, prefix) {
|
|
6
|
+
// eslint-disable-next-line prefer-template
|
|
7
|
+
var formattedAutoNumber = autoNumber + '';
|
|
8
|
+
if (!digits) {
|
|
9
|
+
return formattedAutoNumber;
|
|
10
|
+
}
|
|
11
|
+
var prefixZeroLength = digits - formattedAutoNumber.length;
|
|
12
|
+
if (digits > 1 && prefixZeroLength > 0) {
|
|
13
|
+
formattedAutoNumber = Array(prefixZeroLength + 1).join(0) + formattedAutoNumber;
|
|
14
|
+
}
|
|
15
|
+
if (prefix) {
|
|
16
|
+
return "".concat(prefix, "-").concat(formattedAutoNumber);
|
|
17
|
+
}
|
|
18
|
+
return formattedAutoNumber;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.getFormattedAutoNumber = getFormattedAutoNumber;
|
|
@@ -46,7 +46,21 @@ var getCollaboratorsName = function getCollaboratorsName(collaborators, emails)
|
|
|
46
46
|
if (!Array.isArray(collaboratorsNames) || collaboratorsNames.length === 0) return '';
|
|
47
47
|
return collaboratorsNames.join(', ');
|
|
48
48
|
};
|
|
49
|
+
var getCollaboratorEmailsByNames = function getCollaboratorEmailsByNames(names, collaborators) {
|
|
50
|
+
if (!Array.isArray(names) || !Array.isArray(collaborators)) return [];
|
|
51
|
+
var emails = [];
|
|
52
|
+
names.forEach(function (name) {
|
|
53
|
+
var collaborator = collaborators.find(function (collaboratorItem) {
|
|
54
|
+
return collaboratorItem.name === name;
|
|
55
|
+
});
|
|
56
|
+
if (collaborator) {
|
|
57
|
+
emails.push(collaborator.email);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return emails;
|
|
61
|
+
};
|
|
49
62
|
|
|
50
63
|
exports.getCollaborator = getCollaborator;
|
|
64
|
+
exports.getCollaboratorEmailsByNames = getCollaboratorEmailsByNames;
|
|
51
65
|
exports.getCollaboratorsName = getCollaboratorsName;
|
|
52
66
|
exports.getCollaboratorsNames = getCollaboratorsNames;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var dayjs = require('dayjs');
|
|
6
|
+
var number = require('../number.js');
|
|
7
|
+
require('../constants/column.js');
|
|
8
|
+
require('../constants/formula.js');
|
|
9
|
+
require('../constants/group.js');
|
|
10
|
+
require('../cell-value-get/cell-value.js');
|
|
11
|
+
var autoNumber$1 = require('../cell-value-get/auto-number.js');
|
|
12
|
+
var date = require('../date.js');
|
|
13
|
+
require('../constants/filter/filter-column-options.js');
|
|
14
|
+
require('../constants/filter/filter-modifier.js');
|
|
15
|
+
require('../constants/filter/filter-predicate.js');
|
|
16
|
+
require('../constants/filter/filter-is-within.js');
|
|
17
|
+
require('../constants/sort.js');
|
|
18
|
+
var autoNumber = require('../constants/auto-number.js');
|
|
19
|
+
|
|
20
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
21
|
+
|
|
22
|
+
var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
|
|
23
|
+
|
|
24
|
+
var formatRateMaxNumberToNumber = function formatRateMaxNumberToNumber(oldCellValue, data) {
|
|
25
|
+
if (oldCellValue === 0) return 0;
|
|
26
|
+
if (!oldCellValue) return '';
|
|
27
|
+
var _ref = data || {},
|
|
28
|
+
rate_max_number = _ref.rate_max_number;
|
|
29
|
+
return oldCellValue > rate_max_number ? rate_max_number : oldCellValue;
|
|
30
|
+
};
|
|
31
|
+
var formatTextToAutoNumber = function formatTextToAutoNumber(text, autoNumberData) {
|
|
32
|
+
if (!text || !autoNumberData) return null;
|
|
33
|
+
var textPrefix = null;
|
|
34
|
+
var number$1 = number.isNumber(text) ? text : 0;
|
|
35
|
+
if (typeof text === 'string') {
|
|
36
|
+
number$1 = Number(text);
|
|
37
|
+
if (!number.isNumber(number$1)) {
|
|
38
|
+
var textParts = text.split('-');
|
|
39
|
+
var textPartsLength = textParts.length;
|
|
40
|
+
var textNumber = null;
|
|
41
|
+
if (textPartsLength === 1) {
|
|
42
|
+
textNumber = textParts[0];
|
|
43
|
+
} else {
|
|
44
|
+
textPrefix = textParts[0];
|
|
45
|
+
textNumber = textParts[1];
|
|
46
|
+
}
|
|
47
|
+
number$1 = textNumber && Number(textNumber);
|
|
48
|
+
if (!number.isNumber(number$1)) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (number$1 < 1) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
var prefix_type = autoNumberData.prefix_type,
|
|
57
|
+
prefix = autoNumberData.prefix,
|
|
58
|
+
digits = autoNumberData.digits;
|
|
59
|
+
number$1 = parseInt(number$1);
|
|
60
|
+
|
|
61
|
+
// 1. use the prefix supplied by autoNumberData if the text can only contains number.
|
|
62
|
+
// 2. only number will be kept if has no prefix_type in the autoNumberData.
|
|
63
|
+
if (!textPrefix || !prefix_type) {
|
|
64
|
+
var newPrefix = prefix_type === 'date' ? dayjs__default["default"]().format(autoNumber.AUTO_NUMBER_DATE_FORMAT) : prefix;
|
|
65
|
+
return autoNumber$1.getFormattedAutoNumber(number$1, digits, newPrefix);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// 3. string prefix: the 'textPrefix' must be same to autoNumberData's prefix.
|
|
69
|
+
if (prefix_type === 'string') {
|
|
70
|
+
if (textPrefix !== prefix) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return autoNumber$1.getFormattedAutoNumber(number$1, digits, prefix);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// 4. date prefix: the format of 'textPrefix' must be consistent with 'YYYYMMDD'.
|
|
77
|
+
if (prefix_type === 'date') {
|
|
78
|
+
var matched = textPrefix && textPrefix.length === 8 && /(\d{4})(\d{2})(\d{2})$/.test(textPrefix);
|
|
79
|
+
if (!matched) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
var year = textPrefix.substring(0, 4);
|
|
83
|
+
var month = textPrefix.substring(4, 6);
|
|
84
|
+
var day = textPrefix.substring(6, 8);
|
|
85
|
+
if (!date.DateUtils.getValidDate("".concat(year, "-").concat(month, "-").concat(day))) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return autoNumber$1.getFormattedAutoNumber(number$1, digits, textPrefix);
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
exports.formatRateMaxNumberToNumber = formatRateMaxNumberToNumber;
|
|
94
|
+
exports.formatTextToAutoNumber = formatTextToAutoNumber;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var column = require('../constants/column.js');
|
|
6
|
+
require('../constants/filter/filter-column-options.js');
|
|
7
|
+
require('../constants/filter/filter-modifier.js');
|
|
8
|
+
require('../constants/filter/filter-predicate.js');
|
|
9
|
+
require('../constants/filter/filter-is-within.js');
|
|
10
|
+
require('../constants/formula.js');
|
|
11
|
+
require('../constants/sort.js');
|
|
12
|
+
require('../constants/group.js');
|
|
13
|
+
var number = require('../number.js');
|
|
14
|
+
|
|
15
|
+
var formatTextToDuration = function formatTextToDuration(value, data) {
|
|
16
|
+
var _ref = data || {},
|
|
17
|
+
duration_format = _ref.duration_format;
|
|
18
|
+
duration_format = duration_format || column.DURATION_FORMATS_MAP.H_MM;
|
|
19
|
+
if (column.DURATION_FORMATS.findIndex(function (format) {
|
|
20
|
+
return format.type === duration_format;
|
|
21
|
+
}) < 0) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
if (value === 0) return 0;
|
|
25
|
+
if (!value) return null;
|
|
26
|
+
|
|
27
|
+
// value is number or string number
|
|
28
|
+
var numericDuration = value - 0;
|
|
29
|
+
if (number.isNumber(numericDuration)) return numericDuration;
|
|
30
|
+
|
|
31
|
+
// value is string
|
|
32
|
+
var stringifyDuration = value + '';
|
|
33
|
+
var isNegative = stringifyDuration[0] === '-';
|
|
34
|
+
if (isNegative) {
|
|
35
|
+
stringifyDuration = stringifyDuration.substring(1);
|
|
36
|
+
}
|
|
37
|
+
var timeParts = stringifyDuration.split(/[::]/); // support ':' and ':'.
|
|
38
|
+
var timePartsLen = timeParts.length;
|
|
39
|
+
if (timePartsLen === 0) return '';
|
|
40
|
+
var hoursIndex, minutesIndex, secondsIndex;
|
|
41
|
+
if (duration_format === column.DURATION_FORMATS_MAP.H_MM) {
|
|
42
|
+
hoursIndex = timePartsLen - 2;
|
|
43
|
+
minutesIndex = timePartsLen - 1;
|
|
44
|
+
} else {
|
|
45
|
+
hoursIndex = timePartsLen - 3;
|
|
46
|
+
minutesIndex = timePartsLen - 2;
|
|
47
|
+
secondsIndex = timePartsLen - 1;
|
|
48
|
+
}
|
|
49
|
+
var hours = timeParts[hoursIndex] - 0;
|
|
50
|
+
var minutes = timeParts[minutesIndex] - 0;
|
|
51
|
+
var seconds = timeParts[secondsIndex] - 0;
|
|
52
|
+
if (!number.isNumber(hours) && !number.isNumber(minutes) && !number.isNumber(seconds)) return null;
|
|
53
|
+
hours = number.isNumber(hours) ? hours : 0;
|
|
54
|
+
minutes = number.isNumber(minutes) ? minutes : 0;
|
|
55
|
+
seconds = number.isNumber(seconds) ? seconds : 0;
|
|
56
|
+
var result = hours * 3600 + minutes * 60 + seconds;
|
|
57
|
+
return isNegative ? -result : result;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
exports.formatTextToDuration = formatTextToDuration;
|