dtable-utils 4.4.3 → 4.4.4-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/es/archive/clause-module/search.js +1 -1
- package/es/archive/sql-generator/filter-condition.js +52 -5
- package/es/cell-value-set/duration.js +3 -1
- package/es/cell-value-set/geolocation.js +4 -4
- package/es/cell-value-set/image.js +3 -3
- package/es/cell-value-set/multiple-select.js +6 -6
- package/es/cell-value-set/single-select.js +2 -2
- package/es/filter/core.js +18 -4
- package/es/filter/filter-column/array.js +14 -5
- package/es/filter/filter-column/department-multiple-select.js +117 -0
- package/es/filter/filter-column/department-single-select.js +1 -15
- package/es/filter/filter-column/formula.js +4 -2
- package/es/filter/filter-column/link.js +4 -2
- package/es/filter/filter-row.js +7 -3
- package/es/index.js +2 -1
- package/es/row/core.js +132 -1
- package/es/validate/filter.js +4 -1
- package/lib/archive/clause-module/search.js +1 -1
- package/lib/archive/sql-generator/filter-condition.js +52 -5
- package/lib/cell-value-set/duration.js +3 -1
- package/lib/cell-value-set/geolocation.js +4 -4
- package/lib/cell-value-set/image.js +3 -3
- package/lib/cell-value-set/multiple-select.js +6 -6
- package/lib/cell-value-set/single-select.js +2 -2
- package/lib/filter/core.js +20 -3
- package/lib/filter/filter-column/array.js +14 -5
- package/lib/filter/filter-column/department-multiple-select.js +125 -0
- package/lib/filter/filter-column/department-single-select.js +11 -25
- package/lib/filter/filter-column/formula.js +4 -2
- package/lib/filter/filter-column/link.js +4 -2
- package/lib/filter/filter-row.js +7 -3
- package/lib/index.js +3 -0
- package/lib/row/core.js +133 -0
- package/lib/validate/filter.js +4 -1
- package/package.json +2 -1
|
@@ -11,9 +11,9 @@ import '../../cell-value-get/cell-value.js';
|
|
|
11
11
|
import { ValidateFilter } from '../../validate/filter.js';
|
|
12
12
|
import { getViewShownColumns } from '../../view/core.js';
|
|
13
13
|
import '@babel/runtime/helpers/typeof';
|
|
14
|
+
import '../../date.js';
|
|
14
15
|
import '@babel/runtime/helpers/defineProperty';
|
|
15
16
|
import '@babel/runtime/helpers/toConsumableArray';
|
|
16
|
-
import '../../date.js';
|
|
17
17
|
|
|
18
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
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); }
|
|
@@ -378,6 +378,50 @@ var departmentSingleSelectSqlCondition = function departmentSingleSelectSqlCondi
|
|
|
378
378
|
}
|
|
379
379
|
return '';
|
|
380
380
|
};
|
|
381
|
+
var departmentMultipleSelectSqlCondition = function departmentMultipleSelectSqlCondition(column, filterItem) {
|
|
382
|
+
var _ref2;
|
|
383
|
+
var patchedUserDepartmentIdsMap = PatchUtils.getUserDepartmentIdsMap(userDepartmentIdsMap);
|
|
384
|
+
var filterPredicate = filterItem.filter_predicate,
|
|
385
|
+
filterTerm = filterItem.filter_term;
|
|
386
|
+
var name = column.name;
|
|
387
|
+
if (filterPredicate === FILTER_PREDICATE_TYPE.NOT_EMPTY) {
|
|
388
|
+
return "`".concat(name, "` is not null");
|
|
389
|
+
}
|
|
390
|
+
if (filterPredicate === FILTER_PREDICATE_TYPE.EMPTY) {
|
|
391
|
+
return "`".concat(name, "` is null");
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// filter_term is invalid
|
|
395
|
+
if (!Array.isArray(filterTerm) || filterTerm.length === 0) {
|
|
396
|
+
return '';
|
|
397
|
+
}
|
|
398
|
+
var _ref = patchedUserDepartmentIdsMap || {},
|
|
399
|
+
current_user_department_ids = _ref.current_user_department_ids,
|
|
400
|
+
current_user_department_and_sub_ids = _ref.current_user_department_and_sub_ids;
|
|
401
|
+
var normalizedFilterTerm = filterTerm;
|
|
402
|
+
normalizedFilterTerm = (_ref2 = []).concat.apply(_ref2, _toConsumableArray(filterTerm.map(function (value) {
|
|
403
|
+
if (value === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT && Array.isArray(current_user_department_ids)) {
|
|
404
|
+
return current_user_department_ids;
|
|
405
|
+
}
|
|
406
|
+
if (value === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB && Array.isArray(current_user_department_and_sub_ids)) {
|
|
407
|
+
return current_user_department_and_sub_ids;
|
|
408
|
+
}
|
|
409
|
+
return value;
|
|
410
|
+
})));
|
|
411
|
+
if (filterPredicate === FILTER_PREDICATE_TYPE.HAS_ANY_OF) {
|
|
412
|
+
return "`".concat(name, "` in (").concat(normalizedFilterTerm.join(', '), ")");
|
|
413
|
+
}
|
|
414
|
+
if (filterPredicate === FILTER_PREDICATE_TYPE.HAS_ALL_OF) {
|
|
415
|
+
return "`".concat(name, "` has all of (").concat(normalizedFilterTerm.join(', '), ")");
|
|
416
|
+
}
|
|
417
|
+
if (filterPredicate === FILTER_PREDICATE_TYPE.HAS_NONE_OF) {
|
|
418
|
+
return "`".concat(name, "` has none of (").concat(normalizedFilterTerm.join(', '), ")");
|
|
419
|
+
}
|
|
420
|
+
if (filterPredicate === FILTER_PREDICATE_TYPE.IS_EXACTLY) {
|
|
421
|
+
return "`".concat(name, "` is exactly (").concat(normalizedFilterTerm.join(', '), ")");
|
|
422
|
+
}
|
|
423
|
+
return '';
|
|
424
|
+
};
|
|
381
425
|
|
|
382
426
|
// MULTIPLE_SELECT
|
|
383
427
|
var multipleSelectSqlCondition = function multipleSelectSqlCondition(column, filterItem) {
|
|
@@ -523,9 +567,9 @@ var arrayColumnCondition = function arrayColumnCondition(column, filterItem) {
|
|
|
523
567
|
if (filter_predicate === FILTER_PREDICATE_TYPE.NOT_EMPTY) {
|
|
524
568
|
return "`".concat(name, "` is not null");
|
|
525
569
|
}
|
|
526
|
-
var
|
|
527
|
-
array_type =
|
|
528
|
-
array_data =
|
|
570
|
+
var _ref3 = column.data || {},
|
|
571
|
+
array_type = _ref3.array_type,
|
|
572
|
+
array_data = _ref3.array_data;
|
|
529
573
|
if (!array_type) return '';
|
|
530
574
|
|
|
531
575
|
// encapsulate a new column according to the calculation result
|
|
@@ -557,6 +601,9 @@ var arrayColumnCondition = function arrayColumnCondition(column, filterItem) {
|
|
|
557
601
|
if (array_type === CellType.SINGLE_SELECT) {
|
|
558
602
|
return multipleSelectSqlCondition(linkedColumn, filterItem);
|
|
559
603
|
}
|
|
604
|
+
if (array_type === CellType.DEPARTMENT_SINGLE_SELECT) {
|
|
605
|
+
return departmentMultipleSelectSqlCondition(linkedColumn, filterItem);
|
|
606
|
+
}
|
|
560
607
|
if ([CellType.CREATOR, CellType.LAST_MODIFIER].includes(array_type)) {
|
|
561
608
|
return collaboratorSqlCondition(linkedColumn, filterItem);
|
|
562
609
|
}
|
|
@@ -572,8 +619,8 @@ var linkSqlCondition = function linkSqlCondition(column, filterItem) {
|
|
|
572
619
|
|
|
573
620
|
// FORMULA | LINK-FORMULA
|
|
574
621
|
var formulaSqlCondition = function formulaSqlCondition(column, filterItem) {
|
|
575
|
-
var
|
|
576
|
-
result_type =
|
|
622
|
+
var _ref4 = column.data || {},
|
|
623
|
+
result_type = _ref4.result_type;
|
|
577
624
|
if (result_type === FORMULA_RESULT_TYPE.STRING) {
|
|
578
625
|
// need to change the type of column to text
|
|
579
626
|
var newColumn = {
|
|
@@ -33,7 +33,9 @@ var formatTextToDuration = function formatTextToDuration(value, data) {
|
|
|
33
33
|
var timeParts = stringifyDuration.split(/[::]/); // support ':' and ':'.
|
|
34
34
|
var timePartsLen = timeParts.length;
|
|
35
35
|
if (timePartsLen === 0) return '';
|
|
36
|
-
var hoursIndex
|
|
36
|
+
var hoursIndex;
|
|
37
|
+
var minutesIndex;
|
|
38
|
+
var secondsIndex;
|
|
37
39
|
if (duration_format === DURATION_FORMATS_MAP.H_MM) {
|
|
38
40
|
hoursIndex = timePartsLen - 2;
|
|
39
41
|
minutesIndex = timePartsLen - 1;
|
|
@@ -36,10 +36,10 @@ var formatTextToGeolocation = function formatTextToGeolocation(value, columnData
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
var matchedProvince = cellValue.match(provinceReg);
|
|
39
|
-
var province = ''
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
var province = '';
|
|
40
|
+
var city = '';
|
|
41
|
+
var district = '';
|
|
42
|
+
var detail = '';
|
|
43
43
|
if (matchedProvince) {
|
|
44
44
|
province = matchedProvince[0];
|
|
45
45
|
cellValue = cellValue.slice(matchedProvince.index + province.length);
|
|
@@ -4,12 +4,12 @@ var formatTextToImage = function formatTextToImage(value) {
|
|
|
4
4
|
}
|
|
5
5
|
var imageUrl = value.trim();
|
|
6
6
|
var imageUrls = imageUrl.split(' ');
|
|
7
|
-
imageUrls = imageUrls.filter(function (
|
|
8
|
-
var strUrl =
|
|
7
|
+
imageUrls = imageUrls.filter(function (item) {
|
|
8
|
+
var strUrl = item.match(/http:\/\/.+/);
|
|
9
9
|
if (!strUrl) {
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
|
-
if (!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(
|
|
12
|
+
if (!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(item)) {
|
|
13
13
|
return false;
|
|
14
14
|
}
|
|
15
15
|
return true;
|
|
@@ -28,8 +28,8 @@ var formatTextToMultipleOption = function formatTextToMultipleOption(value, colu
|
|
|
28
28
|
options = [];
|
|
29
29
|
}
|
|
30
30
|
// is exist
|
|
31
|
-
var option = options.find(function (
|
|
32
|
-
return
|
|
31
|
+
var option = options.find(function (item) {
|
|
32
|
+
return item.name === optionName;
|
|
33
33
|
});
|
|
34
34
|
if (option) {
|
|
35
35
|
return [option.id];
|
|
@@ -37,8 +37,8 @@ var formatTextToMultipleOption = function formatTextToMultipleOption(value, colu
|
|
|
37
37
|
|
|
38
38
|
// not exist
|
|
39
39
|
var optionNames = optionName.split(' ');
|
|
40
|
-
var optionIds = optionNames.map(function (
|
|
41
|
-
return formatTextToSingleOption(
|
|
40
|
+
var optionIds = optionNames.map(function (item) {
|
|
41
|
+
return formatTextToSingleOption(item, column);
|
|
42
42
|
});
|
|
43
43
|
return optionIds;
|
|
44
44
|
};
|
|
@@ -57,8 +57,8 @@ var formatValueToMultipleOption = function formatValueToMultipleOption(value, co
|
|
|
57
57
|
options = [];
|
|
58
58
|
}
|
|
59
59
|
var selectOptions = value.map(function (optionName) {
|
|
60
|
-
var option = options.find(function (
|
|
61
|
-
return
|
|
60
|
+
var option = options.find(function (item) {
|
|
61
|
+
return item.name === optionName;
|
|
62
62
|
});
|
|
63
63
|
if (option) return option;
|
|
64
64
|
var random = Math.floor(Math.random() * (SELECT_OPTION_COLORS.length - 1));
|
|
@@ -26,8 +26,8 @@ var formatTextToSingleOption = function formatTextToSingleOption(value, column)
|
|
|
26
26
|
column.data.options = [];
|
|
27
27
|
options = [];
|
|
28
28
|
}
|
|
29
|
-
var option = options.find(function (
|
|
30
|
-
return
|
|
29
|
+
var option = options.find(function (item) {
|
|
30
|
+
return item.name === optionName;
|
|
31
31
|
});
|
|
32
32
|
if (option) {
|
|
33
33
|
return option.id;
|
package/es/filter/core.js
CHANGED
|
@@ -9,6 +9,20 @@ import { FILTER_TERM_MODIFIER_TYPE } from '../constants/filter/filter-modifier.j
|
|
|
9
9
|
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; }
|
|
10
10
|
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; }
|
|
11
11
|
var EXACT_DATE_TERM_MODIFIER_TYPES = [FILTER_TERM_MODIFIER_TYPE.TODAY, FILTER_TERM_MODIFIER_TYPE.TOMORROW, FILTER_TERM_MODIFIER_TYPE.YESTERDAY, FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_AGO, FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_FROM_NOW, FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_AGO, FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_FROM_NOW, FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_AGO, FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_FROM_NOW, FILTER_TERM_MODIFIER_TYPE.EXACT_DATE];
|
|
12
|
+
var isCurrentUserDepartment = function isCurrentUserDepartment(departmentId, userDepartmentIdsMap) {
|
|
13
|
+
var _ref = userDepartmentIdsMap || {},
|
|
14
|
+
current_user_department_ids = _ref.current_user_department_ids;
|
|
15
|
+
return Array.isArray(current_user_department_ids) && current_user_department_ids.includes(departmentId);
|
|
16
|
+
};
|
|
17
|
+
var isCurrentUserDepartmentAndSub = function isCurrentUserDepartmentAndSub(departmentId, userDepartmentIdsMap) {
|
|
18
|
+
var _ref2 = userDepartmentIdsMap || {},
|
|
19
|
+
current_user_department_and_sub_ids = _ref2.current_user_department_and_sub_ids;
|
|
20
|
+
return Array.isArray(current_user_department_and_sub_ids) && current_user_department_and_sub_ids.includes(departmentId);
|
|
21
|
+
};
|
|
22
|
+
var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTerm) {
|
|
23
|
+
if (typeof departmentId !== 'number') return false;
|
|
24
|
+
return filterTerm.includes(departmentId);
|
|
25
|
+
};
|
|
12
26
|
|
|
13
27
|
/**
|
|
14
28
|
* Get filters which excludes incomplete
|
|
@@ -257,9 +271,9 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
|
|
|
257
271
|
}
|
|
258
272
|
case CellType.LINK:
|
|
259
273
|
{
|
|
260
|
-
var
|
|
261
|
-
_array_type =
|
|
262
|
-
_array_data =
|
|
274
|
+
var _ref3 = columnData || {},
|
|
275
|
+
_array_type = _ref3.array_type,
|
|
276
|
+
_array_data = _ref3.array_data;
|
|
263
277
|
var _linkedColumn = {
|
|
264
278
|
type: _array_type,
|
|
265
279
|
data: _array_data
|
|
@@ -322,4 +336,4 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
|
|
|
322
336
|
return cleanFilters;
|
|
323
337
|
};
|
|
324
338
|
|
|
325
|
-
export { deleteInvalidFilter, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, otherDate };
|
|
339
|
+
export { deleteInvalidFilter, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, isCurrentUserDepartment, isCurrentUserDepartmentAndSub, isSpecificDepartment, otherDate };
|
|
@@ -5,6 +5,7 @@ import { collaboratorFilter } from './collaborator.js';
|
|
|
5
5
|
import { dateFilter } from './date.js';
|
|
6
6
|
import { textFilter } from './text.js';
|
|
7
7
|
import { multipleSelectFilter } from './multiple-select.js';
|
|
8
|
+
import { departmentMultipleSelectFilter } from './department-multiple-select.js';
|
|
8
9
|
import { numberFilter } from './number.js';
|
|
9
10
|
import { CellType } from '../../constants/cell-type.js';
|
|
10
11
|
import { DATE_COLUMN_OPTIONS, COLLABORATOR_COLUMN_TYPES } from '../../constants/column.js';
|
|
@@ -22,7 +23,8 @@ var TRUE_VALUE = [true, 'true'];
|
|
|
22
23
|
*/
|
|
23
24
|
var filterByArrayType = function filterByArrayType(array, filter, _ref) {
|
|
24
25
|
var username = _ref.username,
|
|
25
|
-
userId = _ref.userId
|
|
26
|
+
userId = _ref.userId,
|
|
27
|
+
userDepartmentIdsMap = _ref.userDepartmentIdsMap;
|
|
26
28
|
var column = filter.column,
|
|
27
29
|
linked_column = filter.linked_column;
|
|
28
30
|
var filter_predicate = filter.filter_predicate;
|
|
@@ -56,19 +58,26 @@ var filterByArrayType = function filterByArrayType(array, filter, _ref) {
|
|
|
56
58
|
if (linkedColumnType === CellType.MULTIPLE_SELECT) {
|
|
57
59
|
return multipleSelectFilter(array, filter);
|
|
58
60
|
}
|
|
61
|
+
if (linkedColumnType === CellType.DEPARTMENT_SINGLE_SELECT) {
|
|
62
|
+
var _normalizedArray2 = array;
|
|
63
|
+
if (array && !Array.isArray(array)) {
|
|
64
|
+
_normalizedArray2 = [array];
|
|
65
|
+
}
|
|
66
|
+
return departmentMultipleSelectFilter(_normalizedArray2, filter, userDepartmentIdsMap);
|
|
67
|
+
}
|
|
59
68
|
if (isNumericColumn({
|
|
60
69
|
type: linkedColumnType
|
|
61
70
|
})) {
|
|
62
|
-
var
|
|
71
|
+
var _normalizedArray3 = array;
|
|
63
72
|
if (Array.isArray(array)) {
|
|
64
73
|
var cellValueLength = array.length;
|
|
65
74
|
if (cellValueLength === 0) {
|
|
66
|
-
|
|
75
|
+
_normalizedArray3 = '';
|
|
67
76
|
} else if (cellValueLength === 1) {
|
|
68
|
-
|
|
77
|
+
_normalizedArray3 = array[0];
|
|
69
78
|
}
|
|
70
79
|
}
|
|
71
|
-
return numberFilter(
|
|
80
|
+
return numberFilter(_normalizedArray3, filter);
|
|
72
81
|
}
|
|
73
82
|
if (DATE_COLUMN_OPTIONS.includes(linkedColumnType)) {
|
|
74
83
|
var newCellValue = array;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
|
+
import { DEPARTMENT_SELECT_RANGE_MAP } from '../../constants/column.js';
|
|
3
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
4
|
+
import { isCurrentUserDepartmentAndSub, isSpecificDepartment, isCurrentUserDepartment } from '../core.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Filter multiple-select
|
|
8
|
+
* @param {array} departmentIds e.g. [ 14, ... ]
|
|
9
|
+
* @param {string} filter_predicate
|
|
10
|
+
* @param {array} filter_term department ids
|
|
11
|
+
* @param {object} userDepartmentIdsMap
|
|
12
|
+
* @returns bool
|
|
13
|
+
*/
|
|
14
|
+
var departmentMultipleSelectFilter = function departmentMultipleSelectFilter(departmentIds, _ref, userDepartmentIdsMap) {
|
|
15
|
+
var filter_predicate = _ref.filter_predicate,
|
|
16
|
+
filter_term = _ref.filter_term;
|
|
17
|
+
switch (filter_predicate) {
|
|
18
|
+
case FILTER_PREDICATE_TYPE.HAS_ANY_OF:
|
|
19
|
+
{
|
|
20
|
+
if (filter_term.length === 0) return true;
|
|
21
|
+
if (!Array.isArray(departmentIds)) return false;
|
|
22
|
+
// CURRENT_USER_DEPARTMENT is a subset of CURRENT_USER_DEPARTMENT_AND_SUB, so it is necessary to first determine CURRENT_USER_DEPARTMENT_AND_SUB.
|
|
23
|
+
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
|
|
24
|
+
return departmentIds.some(function (id) {
|
|
25
|
+
return isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) || isSpecificDepartment(id, filter_term);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
|
|
29
|
+
return departmentIds.some(function (id) {
|
|
30
|
+
return isCurrentUserDepartment(id, userDepartmentIdsMap) || isSpecificDepartment(id, filter_term);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return departmentIds.some(function (id) {
|
|
34
|
+
return isSpecificDepartment(id, filter_term);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
case FILTER_PREDICATE_TYPE.HAS_ALL_OF:
|
|
38
|
+
{
|
|
39
|
+
if (filter_term.length === 0) return true;
|
|
40
|
+
if (!Array.isArray(departmentIds)) return false;
|
|
41
|
+
var _ref2 = userDepartmentIdsMap || {},
|
|
42
|
+
current_user_department_and_sub_ids = _ref2.current_user_department_and_sub_ids,
|
|
43
|
+
current_user_department_ids = _ref2.current_user_department_ids;
|
|
44
|
+
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
|
|
45
|
+
if (Array.isArray(current_user_department_and_sub_ids) && !current_user_department_and_sub_ids.every(function (id) {
|
|
46
|
+
return departmentIds.includes(id);
|
|
47
|
+
})) return false;
|
|
48
|
+
} else if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
|
|
49
|
+
if (Array.isArray(current_user_department_ids) && !current_user_department_ids.every(function (id) {
|
|
50
|
+
return departmentIds.includes(id);
|
|
51
|
+
})) return false;
|
|
52
|
+
}
|
|
53
|
+
return filter_term.every(function (id) {
|
|
54
|
+
return id === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT || id === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB || isSpecificDepartment(id, departmentIds);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
case FILTER_PREDICATE_TYPE.HAS_NONE_OF:
|
|
58
|
+
{
|
|
59
|
+
if (filter_term.length === 0 || !Array.isArray(departmentIds) || departmentIds.length === 0) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
|
|
63
|
+
return departmentIds.every(function (id) {
|
|
64
|
+
return !isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) && !isSpecificDepartment(id, filter_term);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
|
|
68
|
+
return departmentIds.every(function (id) {
|
|
69
|
+
return !isCurrentUserDepartment(id, userDepartmentIdsMap) && !isSpecificDepartment(id, filter_term);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return filter_term.every(function (departmentId) {
|
|
73
|
+
return !isSpecificDepartment(departmentId, departmentIds);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
case FILTER_PREDICATE_TYPE.IS_EXACTLY:
|
|
77
|
+
{
|
|
78
|
+
if (filter_term.length === 0) return true;
|
|
79
|
+
if (!Array.isArray(departmentIds)) return false;
|
|
80
|
+
var normalizedFilterTerm = filter_term.slice(0);
|
|
81
|
+
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
|
|
82
|
+
var index = normalizedFilterTerm.indexOf(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB);
|
|
83
|
+
var _ref3 = userDepartmentIdsMap || {},
|
|
84
|
+
_current_user_department_and_sub_ids = _ref3.current_user_department_and_sub_ids;
|
|
85
|
+
if (Array.isArray(_current_user_department_and_sub_ids)) {
|
|
86
|
+
normalizedFilterTerm.splice.apply(normalizedFilterTerm, [index, 1].concat(_toConsumableArray(_current_user_department_and_sub_ids)));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
|
|
90
|
+
var _index = normalizedFilterTerm.indexOf(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT);
|
|
91
|
+
var _ref4 = userDepartmentIdsMap || {},
|
|
92
|
+
_current_user_department_ids = _ref4.current_user_department_ids;
|
|
93
|
+
if (Array.isArray(_current_user_department_ids)) {
|
|
94
|
+
normalizedFilterTerm.splice.apply(normalizedFilterTerm, [_index, 1].concat(_toConsumableArray(_current_user_department_ids)));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
var uniqueArr = function uniqueArr(arr) {
|
|
98
|
+
return _toConsumableArray(new Set(arr)).sort();
|
|
99
|
+
};
|
|
100
|
+
return uniqueArr(departmentIds).toString() === uniqueArr(normalizedFilterTerm).toString();
|
|
101
|
+
}
|
|
102
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
103
|
+
{
|
|
104
|
+
return !Array.isArray(departmentIds) || departmentIds.length === 0;
|
|
105
|
+
}
|
|
106
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
107
|
+
{
|
|
108
|
+
return Array.isArray(departmentIds) && departmentIds.length > 0;
|
|
109
|
+
}
|
|
110
|
+
default:
|
|
111
|
+
{
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export { departmentMultipleSelectFilter };
|
|
@@ -1,20 +1,6 @@
|
|
|
1
1
|
import { DEPARTMENT_SELECT_RANGE_MAP } from '../../constants/column.js';
|
|
2
2
|
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
3
|
-
|
|
4
|
-
var isCurrentUserDepartment = function isCurrentUserDepartment(id, userDepartmentIdsMap) {
|
|
5
|
-
var currentUserDepartmentIds = userDepartmentIdsMap && userDepartmentIdsMap.current_user_department_ids;
|
|
6
|
-
if (!Array.isArray(currentUserDepartmentIds)) return false;
|
|
7
|
-
return currentUserDepartmentIds.includes(id);
|
|
8
|
-
};
|
|
9
|
-
var isCurrentUserDepartmentAndSub = function isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) {
|
|
10
|
-
var currentUserDepartmentAndSubIds = userDepartmentIdsMap && userDepartmentIdsMap.current_user_department_and_sub_ids;
|
|
11
|
-
if (!Array.isArray(currentUserDepartmentAndSubIds)) return false;
|
|
12
|
-
return currentUserDepartmentAndSubIds.includes(id);
|
|
13
|
-
};
|
|
14
|
-
var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTerm) {
|
|
15
|
-
if (typeof departmentId !== 'number') return false;
|
|
16
|
-
return filterTerm.includes(departmentId);
|
|
17
|
-
};
|
|
3
|
+
import { isCurrentUserDepartmentAndSub, isSpecificDepartment, isCurrentUserDepartment } from '../core.js';
|
|
18
4
|
|
|
19
5
|
/**
|
|
20
6
|
* Filter department-single-select
|
|
@@ -16,7 +16,8 @@ import { FORMULA_RESULT_TYPE } from '../../constants/formula.js';
|
|
|
16
16
|
*/
|
|
17
17
|
var formulaFilter = function formulaFilter(computedValue, filter, _ref) {
|
|
18
18
|
var username = _ref.username,
|
|
19
|
-
userId = _ref.userId
|
|
19
|
+
userId = _ref.userId,
|
|
20
|
+
userDepartmentIdsMap = _ref.userDepartmentIdsMap;
|
|
20
21
|
var data = filter.column.data;
|
|
21
22
|
var _ref2 = data || {},
|
|
22
23
|
result_type = _ref2.result_type;
|
|
@@ -43,7 +44,8 @@ var formulaFilter = function formulaFilter(computedValue, filter, _ref) {
|
|
|
43
44
|
{
|
|
44
45
|
return filterByArrayType(computedValue, filter, {
|
|
45
46
|
username: username,
|
|
46
|
-
userId: userId
|
|
47
|
+
userId: userId,
|
|
48
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
51
|
default:
|
|
@@ -10,10 +10,12 @@ import { filterByArrayType } from './array.js';
|
|
|
10
10
|
*/
|
|
11
11
|
var linkFilter = function linkFilter(linkedCellValues, filter, _ref) {
|
|
12
12
|
var username = _ref.username,
|
|
13
|
-
userId = _ref.userId
|
|
13
|
+
userId = _ref.userId,
|
|
14
|
+
userDepartmentIdsMap = _ref.userDepartmentIdsMap;
|
|
14
15
|
return filterByArrayType(linkedCellValues, filter, {
|
|
15
16
|
username: username,
|
|
16
|
-
userId: userId
|
|
17
|
+
userId: userId,
|
|
18
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
17
19
|
});
|
|
18
20
|
};
|
|
19
21
|
|
package/es/filter/filter-row.js
CHANGED
|
@@ -14,10 +14,12 @@ import { numberFilter } from './filter-column/number.js';
|
|
|
14
14
|
import { singleSelectFilter } from './filter-column/single-select.js';
|
|
15
15
|
import { linkFilter } from './filter-column/link.js';
|
|
16
16
|
import { departmentSingleSelectFilter } from './filter-column/department-single-select.js';
|
|
17
|
+
import '@babel/runtime/helpers/toConsumableArray';
|
|
18
|
+
import { DATE_FORMAT_MAP } from '../constants/column.js';
|
|
19
|
+
import '../constants/filter/filter-predicate.js';
|
|
17
20
|
import { FILTER_CONJUNCTION_TYPE } from '../constants/filter/index.js';
|
|
18
21
|
import { DateUtils } from '../date.js';
|
|
19
22
|
import { CellType } from '../constants/cell-type.js';
|
|
20
|
-
import { DATE_FORMAT_MAP } from '../constants/column.js';
|
|
21
23
|
|
|
22
24
|
var getFilterResult = function getFilterResult(row, filter, _ref) {
|
|
23
25
|
var formulaRow = _ref.formulaRow,
|
|
@@ -95,7 +97,8 @@ var getFilterResult = function getFilterResult(row, filter, _ref) {
|
|
|
95
97
|
cellValue = formulaRow[column_key];
|
|
96
98
|
return formulaFilter(cellValue, filter, {
|
|
97
99
|
username: username,
|
|
98
|
-
userId: userId
|
|
100
|
+
userId: userId,
|
|
101
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
99
102
|
});
|
|
100
103
|
}
|
|
101
104
|
case CellType.LINK:
|
|
@@ -106,7 +109,8 @@ var getFilterResult = function getFilterResult(row, filter, _ref) {
|
|
|
106
109
|
}) : null;
|
|
107
110
|
return linkFilter(cellValue, filter, {
|
|
108
111
|
username: username,
|
|
109
|
-
userId: userId
|
|
112
|
+
userId: userId,
|
|
113
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
110
114
|
});
|
|
111
115
|
}
|
|
112
116
|
case CellType.DIGITAL_SIGN:
|
package/es/index.js
CHANGED
|
@@ -16,7 +16,7 @@ export { generatorBase64Code, isEmpty, isEmptyObject } from './common.js';
|
|
|
16
16
|
export { getTableById, getTableByIndex, getTableByName } from './table/core.js';
|
|
17
17
|
export { getTableColumnByKey, getTableColumnByName } from './table/column.js';
|
|
18
18
|
export { getRowById, getRowsByIds } from './table/row.js';
|
|
19
|
-
export { isTableRows } from './row/core.js';
|
|
19
|
+
export { getRowDefaultData, isTableRows, updateTableRowsWithRowsData } from './row/core.js';
|
|
20
20
|
export { convertRow, convertRowBack } from './row/convert.js';
|
|
21
21
|
export { getLinkColumnsUsedInFilters, getNonArchiveViews, getNonPrivateViews, getViewById, getViewByName, getViewShownColumns, isArchiveView, isDefaultView, isFilterView, isGroupView, isHiddenColumnsView, isSortView } from './view/core.js';
|
|
22
22
|
export { getSummaries, getSummariesWithSubgroups, updateGroupSummaries } from './view/summaries.js';
|
|
@@ -73,6 +73,7 @@ export { numberFilter } from './filter/filter-column/number.js';
|
|
|
73
73
|
export { singleSelectFilter } from './filter/filter-column/single-select.js';
|
|
74
74
|
export { linkFilter } from './filter/filter-column/link.js';
|
|
75
75
|
export { FILTER_PREDICATE_SHOW, FILTER_PREDICATE_TYPE } from './constants/filter/filter-predicate.js';
|
|
76
|
+
import '@babel/runtime/helpers/toConsumableArray';
|
|
76
77
|
export { filterRow, filterRows, getFilteredRowsWithoutFormulaCalculation } from './filter/filter-row.js';
|
|
77
78
|
export { deleteInvalidSort, getMultipleIndexesOrderbyOptions, getValidSorts, isValidSort } from './sort/core.js';
|
|
78
79
|
export { sortCheckbox } from './sort/sort-column/checkbox.js';
|
package/es/row/core.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import _typeof from '@babel/runtime/helpers/typeof';
|
|
2
|
+
import { getTableById } from '../table/core.js';
|
|
3
|
+
import { CellType } from '../constants/cell-type.js';
|
|
4
|
+
import { FILL_DEFAULT_VALUE_COLUMNS_TYPE, DATE_DEFAULT_TYPES } from '../constants/column.js';
|
|
5
|
+
import '../constants/filter/filter-column-options.js';
|
|
6
|
+
import '../constants/filter/filter-modifier.js';
|
|
7
|
+
import '../constants/filter/filter-predicate.js';
|
|
8
|
+
import '../constants/filter/filter-is-within.js';
|
|
9
|
+
import '../constants/formula.js';
|
|
10
|
+
import '../constants/sort.js';
|
|
11
|
+
import '../constants/group.js';
|
|
12
|
+
import { DateUtils } from '../date.js';
|
|
2
13
|
|
|
3
14
|
/**
|
|
4
15
|
* Check is table rows
|
|
@@ -8,5 +19,125 @@ import _typeof from '@babel/runtime/helpers/typeof';
|
|
|
8
19
|
var isTableRows = function isTableRows(rows) {
|
|
9
20
|
return Array.isArray(rows) && _typeof(rows[0]) === 'object';
|
|
10
21
|
};
|
|
22
|
+
var updateTableRowsWithRowsData = function updateTableRowsWithRowsData(tables, tableId) {
|
|
23
|
+
var rowsData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
24
|
+
var table = getTableById(tables, tableId);
|
|
25
|
+
var idRowDataMap = {};
|
|
26
|
+
rowsData.forEach(function (rowData) {
|
|
27
|
+
return idRowDataMap[rowData._id] = rowData;
|
|
28
|
+
});
|
|
29
|
+
table.rows.forEach(function (row, index) {
|
|
30
|
+
var rowId = row._id;
|
|
31
|
+
var newRowData = idRowDataMap[rowId];
|
|
32
|
+
if (!newRowData) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
var newRow = Object.assign({}, row, newRowData);
|
|
36
|
+
table.rows[index] = newRow;
|
|
37
|
+
table.id_row_map[rowId] = newRow;
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
var getRowDefaultData = function getRowDefaultData(table, collaborators, _ref) {
|
|
41
|
+
var username = _ref.username,
|
|
42
|
+
userId = _ref.userId,
|
|
43
|
+
userDepartmentIdsMap = _ref.userDepartmentIdsMap;
|
|
44
|
+
var columns = table.columns;
|
|
45
|
+
var defaultValueData = {};
|
|
46
|
+
columns.forEach(function (column) {
|
|
47
|
+
var columnType = column.type,
|
|
48
|
+
columnData = column.data;
|
|
49
|
+
if (!FILL_DEFAULT_VALUE_COLUMNS_TYPE.includes(columnType)) return;
|
|
50
|
+
var enable_fill_default_value = columnData && columnData.enable_fill_default_value;
|
|
51
|
+
if (!enable_fill_default_value) return;
|
|
52
|
+
var defaultValue = columnData.default_value;
|
|
53
|
+
if (columnType === CellType.DATE) {
|
|
54
|
+
var defaultValueType = columnData.default_date_type,
|
|
55
|
+
dateFormat = columnData.format;
|
|
56
|
+
var showHourAndMinute = dateFormat.indexOf('HH:mm');
|
|
57
|
+
var normalFormat = showHourAndMinute > -1 ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';
|
|
58
|
+
switch (defaultValueType) {
|
|
59
|
+
case DATE_DEFAULT_TYPES.SPECIFIC_DATE:
|
|
60
|
+
{
|
|
61
|
+
var validDate = DateUtils.getValidDate(defaultValue);
|
|
62
|
+
if (!validDate) break;
|
|
63
|
+
defaultValueData[column.key] = DateUtils.format(defaultValue, normalFormat);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case DATE_DEFAULT_TYPES.CURRENT_DATE:
|
|
67
|
+
{
|
|
68
|
+
var date = new Date();
|
|
69
|
+
var today = DateUtils.format(date, normalFormat);
|
|
70
|
+
defaultValueData[column.key] = today;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case DATE_DEFAULT_TYPES.DAYS_BEFORE:
|
|
74
|
+
case DATE_DEFAULT_TYPES.DAYS_AFTER:
|
|
75
|
+
{
|
|
76
|
+
var num = Number(defaultValue);
|
|
77
|
+
if (!Number.isInteger(num)) {
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
var _date = new Date();
|
|
81
|
+
var year = _date.getFullYear();
|
|
82
|
+
var month = _date.getMonth();
|
|
83
|
+
var day = _date.getDate();
|
|
84
|
+
var hours = _date.getHours();
|
|
85
|
+
var minutes = _date.getMinutes();
|
|
86
|
+
var numberOfDaysFromNow;
|
|
87
|
+
if (defaultValueType === DATE_DEFAULT_TYPES.DAYS_AFTER) {
|
|
88
|
+
numberOfDaysFromNow = new Date(year, month, day + num, hours, minutes);
|
|
89
|
+
} else if (defaultValueType === DATE_DEFAULT_TYPES.DAYS_BEFORE) {
|
|
90
|
+
numberOfDaysFromNow = new Date(year, month, day - num, hours, minutes);
|
|
91
|
+
}
|
|
92
|
+
var _validDate = DateUtils.format(numberOfDaysFromNow, normalFormat);
|
|
93
|
+
defaultValueData[column.key] = _validDate;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
} else if (columnType === CellType.COLLABORATOR) {
|
|
98
|
+
var default_collaborator_type = columnData.default_collaborator_type;
|
|
99
|
+
if (default_collaborator_type === 'current_user') {
|
|
100
|
+
defaultValueData[column.key] = [username];
|
|
101
|
+
} else {
|
|
102
|
+
defaultValueData[column.key] = defaultValue;
|
|
103
|
+
}
|
|
104
|
+
} else if (columnType === CellType.DEPARTMENT_SINGLE_SELECT) {
|
|
105
|
+
if (defaultValue === 'current_user_department') {
|
|
106
|
+
var currentUserDepartmentIds = userDepartmentIdsMap && userDepartmentIdsMap.current_user_department_ids;
|
|
107
|
+
if (!Array.isArray(currentUserDepartmentIds) || currentUserDepartmentIds.length === 0) {
|
|
108
|
+
defaultValueData[column.key] = null;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
var currentUserDepartmentId = currentUserDepartmentIds[0];
|
|
112
|
+
if (typeof currentUserDepartmentId !== 'number') {
|
|
113
|
+
defaultValueData[column.key] = null;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
defaultValueData[column.key] = currentUserDepartmentId;
|
|
117
|
+
}
|
|
118
|
+
} else if (defaultValue || defaultValue === 0) {
|
|
119
|
+
if (columnType === CellType.TEXT) {
|
|
120
|
+
defaultValueData[column.key] = defaultValue.replace(/\{[^\}]+\}/ig, function (specialVariable) {
|
|
121
|
+
var collaborator = collaborators.find(function (item) {
|
|
122
|
+
return item.email === username;
|
|
123
|
+
});
|
|
124
|
+
if (specialVariable.toLocaleLowerCase() === '{creator.name}') {
|
|
125
|
+
if (collaborator) {
|
|
126
|
+
return collaborator.name;
|
|
127
|
+
}
|
|
128
|
+
} else if (specialVariable.toLocaleLowerCase() === '{creator.id}') {
|
|
129
|
+
if (userId) {
|
|
130
|
+
return userId;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return '';
|
|
134
|
+
});
|
|
135
|
+
} else {
|
|
136
|
+
defaultValueData[column.key] = defaultValue;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
return defaultValueData;
|
|
141
|
+
};
|
|
11
142
|
|
|
12
|
-
export { isTableRows };
|
|
143
|
+
export { getRowDefaultData, isTableRows, updateTableRowsWithRowsData };
|