dtable-utils 5.0.3 → 5.0.5-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/sql-generator/filter-condition.js +98 -19
- package/es/column/long-text.js +2 -6
- package/es/common.js +4 -1
- package/es/filter/core.js +93 -19
- package/es/filter/filter-row.js +17 -1
- package/es/row/convert.js +8 -1
- package/lib/archive/sql-generator/filter-condition.js +100 -17
- package/lib/column/long-text.js +2 -6
- package/lib/common.js +4 -0
- package/lib/filter/core.js +95 -19
- package/lib/filter/filter-row.js +16 -0
- package/lib/row/convert.js +8 -1
- package/package.json +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
1
2
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
3
|
import dayjs from 'dayjs';
|
|
3
4
|
import utc from 'dayjs/plugin/utc';
|
|
4
5
|
import { ValidateFilter } from '../../validate/filter.js';
|
|
5
|
-
import { otherDate } from '../../filter/core.js';
|
|
6
|
+
import { otherDate, checkIsFilterGroup } from '../../filter/core.js';
|
|
6
7
|
import { getTableColumnByKey } from '../../table/column.js';
|
|
7
8
|
import { FILTER_ERR_MSG } from '../../constants/filter/index.js';
|
|
8
9
|
import { CellType } from '../../constants/cell-type.js';
|
|
@@ -12,6 +13,8 @@ import PatchUtils from '../../helper/patch-utils.js';
|
|
|
12
13
|
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
13
14
|
import { FILTER_TERM_MODIFIER_TYPE } from '../../constants/filter/filter-modifier.js';
|
|
14
15
|
|
|
16
|
+
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; }
|
|
17
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
18
|
dayjs.extend(utc);
|
|
16
19
|
|
|
17
20
|
// TEXT | GEOLOCATION | EMAIL | AUTO_NUMBER
|
|
@@ -114,7 +117,7 @@ var dateSqlCondition = function dateSqlCondition(column, filterItem) {
|
|
|
114
117
|
filter_term = filterItem.filter_term,
|
|
115
118
|
filter_term_modifier = filterItem.filter_term_modifier;
|
|
116
119
|
var filterLabel = [FILTER_PREDICATE_TYPE.EMPTY, FILTER_PREDICATE_TYPE.NOT_EMPTY];
|
|
117
|
-
if (filter_term.length === 0 && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
120
|
+
if ((!filter_term || filter_term.length === 0) && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
118
121
|
return '';
|
|
119
122
|
}
|
|
120
123
|
if (filter_predicate === FILTER_PREDICATE_TYPE.IS) {
|
|
@@ -173,7 +176,7 @@ var ctimeSqlCondition = function ctimeSqlCondition(column, filterItem) {
|
|
|
173
176
|
filter_term = filterItem.filter_term,
|
|
174
177
|
filter_term_modifier = filterItem.filter_term_modifier;
|
|
175
178
|
var filterLabel = [FILTER_PREDICATE_TYPE.EMPTY, FILTER_PREDICATE_TYPE.NOT_EMPTY];
|
|
176
|
-
if (filter_term.length === 0 && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
179
|
+
if ((!filter_term || filter_term.length === 0) && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
177
180
|
return '';
|
|
178
181
|
}
|
|
179
182
|
|
|
@@ -692,32 +695,103 @@ var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterIte
|
|
|
692
695
|
}
|
|
693
696
|
return '';
|
|
694
697
|
};
|
|
695
|
-
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* FilterGroup: {"filter_conjunction": "And", filters: [Filter, ...]}
|
|
701
|
+
* Filter: {"column_key": "xxx", filter_predicate: "xxx", ...}
|
|
702
|
+
* @param {array} filters
|
|
703
|
+
* @param {object} table
|
|
704
|
+
* @param {string} username
|
|
705
|
+
* @param {string} userId
|
|
706
|
+
* @param {object} userDepartmentIdsMap
|
|
707
|
+
* @returns string
|
|
708
|
+
*/
|
|
709
|
+
var getSqlConditionsByFilters = function getSqlConditionsByFilters(filters, table, username, userId, userDepartmentIdsMap) {
|
|
710
|
+
var columns = table.columns;
|
|
696
711
|
var patchedUsername = PatchUtils.getUsername(username);
|
|
697
712
|
var patchedUserId = PatchUtils.getUserId(userId);
|
|
698
713
|
var patchedUserDepartmentIdsMap = PatchUtils.getUserDepartmentIdsMap(userDepartmentIdsMap);
|
|
714
|
+
var sqlConditions = [];
|
|
715
|
+
filters.forEach(function (filter) {
|
|
716
|
+
if (checkIsFilterGroup(filter)) {
|
|
717
|
+
var subFilters = filter.filters,
|
|
718
|
+
sub_filter_conjunction = filter.filter_conjunction;
|
|
719
|
+
var subSqlConditions = subFilters.map(function (subFilter) {
|
|
720
|
+
var filterColumn = getTableColumnByKey(table, subFilter.column_key);
|
|
721
|
+
return getSqlConditionByFilter(filterColumn, subFilter, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap);
|
|
722
|
+
});
|
|
723
|
+
var subSqlConditionsLength = subSqlConditions.length;
|
|
724
|
+
if (subSqlConditionsLength > 0) {
|
|
725
|
+
var subSqlConditionsString = subSqlConditions.length === 1 ? subSqlConditions + '' : "(".concat(subSqlConditions.join(' ' + sub_filter_conjunction + ' '), ")");
|
|
726
|
+
sqlConditions.push(subSqlConditionsString);
|
|
727
|
+
}
|
|
728
|
+
} else {
|
|
729
|
+
var column_key = filter.column_key;
|
|
730
|
+
var filterColumn = columns.find(function (column) {
|
|
731
|
+
return column.key === column_key;
|
|
732
|
+
});
|
|
733
|
+
sqlConditions.push(getSqlConditionByFilter(filterColumn, filter, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap));
|
|
734
|
+
}
|
|
735
|
+
});
|
|
736
|
+
return sqlConditions;
|
|
737
|
+
};
|
|
738
|
+
var checkFilter = function checkFilter(filter, columns) {
|
|
739
|
+
var _ValidateFilter$valid = ValidateFilter.validate(filter, columns),
|
|
740
|
+
error_message = _ValidateFilter$valid.error_message;
|
|
741
|
+
if (error_message) {
|
|
742
|
+
if (error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
743
|
+
return false;
|
|
744
|
+
}
|
|
745
|
+
throw new Error(error_message);
|
|
746
|
+
}
|
|
747
|
+
return true;
|
|
748
|
+
};
|
|
749
|
+
var validateFilters = function validateFilters(filters, columns) {
|
|
750
|
+
var validFilters = [];
|
|
751
|
+
filters.forEach(function (filter) {
|
|
752
|
+
if (checkIsFilterGroup(filter)) {
|
|
753
|
+
var subFilters = filter.filters;
|
|
754
|
+
if (!Array.isArray(subFilters) || subFilters.length === 0) {
|
|
755
|
+
return;
|
|
756
|
+
}
|
|
757
|
+
var validSubFilters = subFilters.filter(function (subFilter) {
|
|
758
|
+
return checkFilter(subFilter, columns);
|
|
759
|
+
});
|
|
760
|
+
if (validSubFilters.length === 0) {
|
|
761
|
+
return;
|
|
762
|
+
}
|
|
763
|
+
validFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
764
|
+
filters: validSubFilters
|
|
765
|
+
}));
|
|
766
|
+
} else {
|
|
767
|
+
if (!checkFilter(filter, columns)) {
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
validFilters.push(filter);
|
|
771
|
+
}
|
|
772
|
+
});
|
|
773
|
+
return validFilters;
|
|
774
|
+
};
|
|
775
|
+
var filter2SqlCondition = function filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap) {
|
|
699
776
|
var columns = table.columns;
|
|
700
777
|
var filter_conjunction = view.filter_conjunction,
|
|
701
778
|
filters = view.filters;
|
|
702
779
|
if (typeof filter_conjunction !== 'string' || !Array.isArray(filters) || filters.length === 0) {
|
|
703
780
|
return '';
|
|
704
781
|
}
|
|
782
|
+
var validFilters = [];
|
|
783
|
+
try {
|
|
784
|
+
validFilters = validateFilters(filters, columns);
|
|
785
|
+
} catch (err) {
|
|
786
|
+
throw new Error(err.message);
|
|
787
|
+
}
|
|
788
|
+
if (validFilters.length === 0) {
|
|
789
|
+
return '';
|
|
790
|
+
}
|
|
705
791
|
|
|
706
792
|
// 1. add WHERE condition
|
|
707
793
|
var filterHeader = 'WHERE ';
|
|
708
|
-
var stringList =
|
|
709
|
-
var _ValidateFilter$valid = ValidateFilter.validate(filterItem, columns),
|
|
710
|
-
error_message = _ValidateFilter$valid.error_message;
|
|
711
|
-
if (error_message) {
|
|
712
|
-
if (error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
713
|
-
return '';
|
|
714
|
-
}
|
|
715
|
-
throw new Error(error_message);
|
|
716
|
-
}
|
|
717
|
-
var column_key = filterItem.column_key;
|
|
718
|
-
var column = getTableColumnByKey(table, column_key);
|
|
719
|
-
return getSqlConditionByFilter(column, filterItem, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap);
|
|
720
|
-
});
|
|
794
|
+
var stringList = getSqlConditionsByFilters(validFilters, table, username, userId, userDepartmentIdsMap);
|
|
721
795
|
|
|
722
796
|
// 2. filtered '' sql clause
|
|
723
797
|
stringList = stringList.filter(function (item) {
|
|
@@ -729,9 +803,14 @@ var filter2SqlCondition = function filter2SqlCondition(table, view, username, us
|
|
|
729
803
|
// const filterContent = stringList.join(' ' + filter_conjunction + ' ');
|
|
730
804
|
var filterContent = stringList[0];
|
|
731
805
|
for (var i = 1; i < stringList.length; i++) {
|
|
732
|
-
|
|
806
|
+
var currStr = stringList[i];
|
|
807
|
+
if (currStr.startsWith('(') && currStr.endsWith(')')) {
|
|
808
|
+
filterContent += " ".concat(filter_conjunction, " ").concat(stringList[i]);
|
|
809
|
+
} else {
|
|
810
|
+
filterContent += " ".concat(filter_conjunction, " (").concat(stringList[i], ")");
|
|
811
|
+
}
|
|
733
812
|
}
|
|
734
813
|
return filterHeader + filterContent;
|
|
735
814
|
};
|
|
736
815
|
|
|
737
|
-
export { checkboxSqlCondition, collaboratorSqlCondition, creatorSqlCondition, ctimeSqlCondition, dateSqlCondition, departmentSingleSelectSqlCondition, fileSqlCondition, filter2SqlCondition, formulaSqlCondition, getSqlConditionByFilter, linkSqlCondition, longtextSqlCondition, multipleSelectSqlCondition, numberSqlCondition, singleSelectSqlCondition, textSqlCondition };
|
|
816
|
+
export { arrayColumnCondition, checkboxSqlCondition, collaboratorSqlCondition, creatorSqlCondition, ctimeSqlCondition, dateSqlCondition, departmentMultipleSelectSqlCondition, departmentSingleSelectSqlCondition, fileSqlCondition, filter2SqlCondition, formulaSqlCondition, getSqlConditionByFilter, getSqlConditionsByFilters, linkSqlCondition, longtextSqlCondition, multipleSelectSqlCondition, numberSqlCondition, singleSelectSqlCondition, textSqlCondition };
|
package/es/column/long-text.js
CHANGED
|
@@ -3,6 +3,7 @@ var imageReg1 = /^<img src="(\S+)" .+\/>/;
|
|
|
3
3
|
var imageReg2 = /^!\[\]\((\S+)\)/;
|
|
4
4
|
var linkReg1 = /^\[.+\]\(\S+\)/;
|
|
5
5
|
var linkReg2 = /^<(\S+)>$/;
|
|
6
|
+
var skipCharacterTypes = ['#', '`', '*', '[', ']', '-'];
|
|
6
7
|
function getLinks(hrefs) {
|
|
7
8
|
var hrefObj = {
|
|
8
9
|
links: [],
|
|
@@ -31,14 +32,10 @@ function getPreviewContent(markdownContent) {
|
|
|
31
32
|
var newMarkdownLength = newMarkdownContent.length;
|
|
32
33
|
for (var index = 0; index < newMarkdownLength; index++) {
|
|
33
34
|
var letter = newMarkdownContent[index];
|
|
34
|
-
if (letter
|
|
35
|
+
if (skipCharacterTypes.includes(letter)) {
|
|
35
36
|
continue;
|
|
36
37
|
} else if (letter === '\n') {
|
|
37
38
|
preview += ' ';
|
|
38
|
-
} else if (letter === '`') {
|
|
39
|
-
continue;
|
|
40
|
-
} else if (letter === '*') {
|
|
41
|
-
continue;
|
|
42
39
|
} else {
|
|
43
40
|
preview += newMarkdownContent[index];
|
|
44
41
|
}
|
|
@@ -46,7 +43,6 @@ function getPreviewContent(markdownContent) {
|
|
|
46
43
|
break;
|
|
47
44
|
}
|
|
48
45
|
}
|
|
49
|
-
preview = preview.length === newMarkdownLength ? preview : "".concat(preview, "...");
|
|
50
46
|
var hrefs = markdownContent.match(hrefReg);
|
|
51
47
|
if (hrefs) {
|
|
52
48
|
var _getLinks = getLinks(hrefs),
|
package/es/common.js
CHANGED
|
@@ -42,5 +42,8 @@ var isEmptyObject = function isEmptyObject(obj) {
|
|
|
42
42
|
}
|
|
43
43
|
return true;
|
|
44
44
|
};
|
|
45
|
+
var hasOwnProperty = function hasOwnProperty(obj, key) {
|
|
46
|
+
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
47
|
+
};
|
|
45
48
|
|
|
46
|
-
export { generatorBase64Code, isEmpty, isEmptyObject };
|
|
49
|
+
export { generatorBase64Code, hasOwnProperty, isEmpty, isEmptyObject };
|
package/es/filter/core.js
CHANGED
|
@@ -4,11 +4,21 @@ import { DateUtils } from '../date.js';
|
|
|
4
4
|
import { FILTER_ERR_MSG } from '../constants/filter/index.js';
|
|
5
5
|
import { CellType } from '../constants/cell-type.js';
|
|
6
6
|
import { FORMULA_RESULT_TYPE } from '../constants/formula.js';
|
|
7
|
+
import { hasOwnProperty } from '../common.js';
|
|
7
8
|
import { FILTER_TERM_MODIFIER_TYPE } from '../constants/filter/filter-modifier.js';
|
|
8
9
|
|
|
9
10
|
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
11
|
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
12
|
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];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Check if is filter group
|
|
16
|
+
* @param {object} filter
|
|
17
|
+
* @returns bool
|
|
18
|
+
*/
|
|
19
|
+
var checkIsFilterGroup = function checkIsFilterGroup(filter) {
|
|
20
|
+
return hasOwnProperty(filter, 'filters');
|
|
21
|
+
};
|
|
12
22
|
var isCurrentUserDepartment = function isCurrentUserDepartment(departmentId, userDepartmentIdsMap) {
|
|
13
23
|
var _ref = userDepartmentIdsMap || {},
|
|
14
24
|
current_user_department_ids = _ref.current_user_department_ids;
|
|
@@ -24,9 +34,24 @@ var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTer
|
|
|
24
34
|
return filterTerm.includes(departmentId);
|
|
25
35
|
};
|
|
26
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Check if the filter is available to display
|
|
39
|
+
* @param {object} filter
|
|
40
|
+
* @param {array} columns
|
|
41
|
+
* @returns bool
|
|
42
|
+
*/
|
|
43
|
+
var checkIsAvailableFilter = function checkIsAvailableFilter(filter, columns) {
|
|
44
|
+
var _ValidateFilter$valid = ValidateFilter.validate(filter, columns),
|
|
45
|
+
error_message = _ValidateFilter$valid.error_message;
|
|
46
|
+
if (error_message && error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
};
|
|
51
|
+
|
|
27
52
|
/**
|
|
28
53
|
* Get filters which excludes incomplete
|
|
29
|
-
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
|
|
54
|
+
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }, { filters: [...]}]
|
|
30
55
|
* @param {array} columns
|
|
31
56
|
* @returns valid filters, array
|
|
32
57
|
*/
|
|
@@ -34,11 +59,24 @@ var getValidFilters = function getValidFilters(filters, columns) {
|
|
|
34
59
|
if (!Array.isArray(filters) || !Array.isArray(columns)) {
|
|
35
60
|
return [];
|
|
36
61
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
62
|
+
var availableFilters = [];
|
|
63
|
+
filters.forEach(function (filter) {
|
|
64
|
+
if (checkIsFilterGroup(filter)) {
|
|
65
|
+
var subFilters = filter.filters;
|
|
66
|
+
var availableSubFilters = [];
|
|
67
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
68
|
+
availableSubFilters = subFilters.filter(function (subFilter) {
|
|
69
|
+
return checkIsAvailableFilter(subFilter, columns);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
availableFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
73
|
+
filters: availableSubFilters
|
|
74
|
+
}));
|
|
75
|
+
} else if (checkIsAvailableFilter(filter, columns)) {
|
|
76
|
+
availableFilters.push(filter);
|
|
77
|
+
}
|
|
41
78
|
});
|
|
79
|
+
return availableFilters;
|
|
42
80
|
};
|
|
43
81
|
|
|
44
82
|
/**
|
|
@@ -300,9 +338,37 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
|
|
|
300
338
|
*/
|
|
301
339
|
var getFormattedFilters = function getFormattedFilters(filters) {
|
|
302
340
|
return filters.map(function (filter) {
|
|
341
|
+
if (checkIsFilterGroup(filter)) {
|
|
342
|
+
var subFilters = filter.filters;
|
|
343
|
+
var formattedSubFilters = [];
|
|
344
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
345
|
+
formattedSubFilters = subFilters.map(function (subFilter) {
|
|
346
|
+
return getFormattedFilter(subFilter, subFilter.column);
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return _objectSpread(_objectSpread({}, filter), {}, {
|
|
350
|
+
filters: formattedSubFilters
|
|
351
|
+
});
|
|
352
|
+
}
|
|
303
353
|
return getFormattedFilter(filter, filter.column);
|
|
304
354
|
});
|
|
305
355
|
};
|
|
356
|
+
var checkFilter = function checkFilter(filter, columns) {
|
|
357
|
+
var _ValidateFilter$valid2 = ValidateFilter.validate(filter, columns),
|
|
358
|
+
error_message = _ValidateFilter$valid2.error_message;
|
|
359
|
+
if (error_message) {
|
|
360
|
+
if (error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
363
|
+
throw new Error(error_message);
|
|
364
|
+
}
|
|
365
|
+
var newFilter = _objectSpread({}, filter);
|
|
366
|
+
var column_key = filter.column_key;
|
|
367
|
+
newFilter.column = columns.find(function (column) {
|
|
368
|
+
return column.key === column_key;
|
|
369
|
+
});
|
|
370
|
+
return newFilter;
|
|
371
|
+
};
|
|
306
372
|
|
|
307
373
|
/**
|
|
308
374
|
* Get filters without error messages and formatted with filter column
|
|
@@ -316,24 +382,32 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
|
|
|
316
382
|
}
|
|
317
383
|
var cleanFilters = [];
|
|
318
384
|
filters.forEach(function (filter) {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
385
|
+
if (checkIsFilterGroup(filter)) {
|
|
386
|
+
var subFilters = filter.filters;
|
|
387
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
388
|
+
var cleanSubFilters = [];
|
|
389
|
+
subFilters.forEach(function (subFilter) {
|
|
390
|
+
var newSubFilter = checkFilter(subFilter, columns);
|
|
391
|
+
if (newSubFilter) {
|
|
392
|
+
cleanSubFilters.push(newSubFilter);
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
// just keep the filter group which has valid sub-filters
|
|
397
|
+
if (cleanSubFilters.length > 0) {
|
|
398
|
+
cleanFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
399
|
+
filters: cleanSubFilters
|
|
400
|
+
}));
|
|
401
|
+
}
|
|
325
402
|
}
|
|
326
403
|
} else {
|
|
327
|
-
var
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
column: filterColumn
|
|
332
|
-
});
|
|
333
|
-
cleanFilters.push(newFilter);
|
|
404
|
+
var newFilter = checkFilter(filter, columns);
|
|
405
|
+
if (newFilter) {
|
|
406
|
+
cleanFilters.push(newFilter);
|
|
407
|
+
}
|
|
334
408
|
}
|
|
335
409
|
});
|
|
336
410
|
return cleanFilters;
|
|
337
411
|
};
|
|
338
412
|
|
|
339
|
-
export { deleteInvalidFilter, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, isCurrentUserDepartment, isCurrentUserDepartmentAndSub, isSpecificDepartment, otherDate };
|
|
413
|
+
export { checkIsAvailableFilter, checkIsFilterGroup, deleteInvalidFilter, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, isCurrentUserDepartment, isCurrentUserDepartmentAndSub, isSpecificDepartment, otherDate };
|
package/es/filter/filter-row.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getFormattedFilters, deleteInvalidFilter } from './core.js';
|
|
1
|
+
import { checkIsFilterGroup, getFormattedFilters, deleteInvalidFilter } from './core.js';
|
|
2
2
|
import { checkboxFilter } from './filter-column/checkbox.js';
|
|
3
3
|
import { collaboratorFilter } from './filter-column/collaborator.js';
|
|
4
4
|
import { creatorFilter } from './filter-column/creator.js';
|
|
@@ -147,6 +147,14 @@ var filterRow = function filterRow(row, filterConjunction, filters) {
|
|
|
147
147
|
userDepartmentIdsMap = _ref2$userDepartmentI === void 0 ? {} : _ref2$userDepartmentI;
|
|
148
148
|
if (filterConjunction === FILTER_CONJUNCTION_TYPE.AND) {
|
|
149
149
|
return filters.every(function (filter) {
|
|
150
|
+
if (checkIsFilterGroup(filter)) {
|
|
151
|
+
return filterRow(row, filter.filter_conjunction, filter.filters, {
|
|
152
|
+
formulaRow: formulaRow,
|
|
153
|
+
username: username,
|
|
154
|
+
userId: userId,
|
|
155
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
156
|
+
});
|
|
157
|
+
}
|
|
150
158
|
return getFilterResult(row, filter, {
|
|
151
159
|
formulaRow: formulaRow,
|
|
152
160
|
username: username,
|
|
@@ -157,6 +165,14 @@ var filterRow = function filterRow(row, filterConjunction, filters) {
|
|
|
157
165
|
}
|
|
158
166
|
if (filterConjunction === FILTER_CONJUNCTION_TYPE.OR) {
|
|
159
167
|
return filters.some(function (filter) {
|
|
168
|
+
if (checkIsFilterGroup(filter)) {
|
|
169
|
+
return filterRow(row, filter.filter_conjunction, filter.filters, {
|
|
170
|
+
formulaRow: formulaRow,
|
|
171
|
+
username: username,
|
|
172
|
+
userId: userId,
|
|
173
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
174
|
+
});
|
|
175
|
+
}
|
|
160
176
|
return getFilterResult(row, filter, {
|
|
161
177
|
formulaRow: formulaRow,
|
|
162
178
|
username: username,
|
package/es/row/convert.js
CHANGED
|
@@ -104,6 +104,13 @@ var convertRow = function convertRow(row, value, table, view, formulaResults, co
|
|
|
104
104
|
result[columnName] = optionNames;
|
|
105
105
|
break;
|
|
106
106
|
}
|
|
107
|
+
case CellType.DATE:
|
|
108
|
+
{
|
|
109
|
+
var timeTextWithoutTimezone = cellValue.replace(/([+-]\d{2}:?\d{2})|Z$/g, '');
|
|
110
|
+
var format = column.data && column.data.format;
|
|
111
|
+
result[columnName] = formatTextToDate(timeTextWithoutTimezone, format);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
107
114
|
case CellType.LONG_TEXT:
|
|
108
115
|
{
|
|
109
116
|
result[columnName] = cellValue ? cellValue.text : '';
|
|
@@ -173,7 +180,7 @@ var convertRow = function convertRow(row, value, table, view, formulaResults, co
|
|
|
173
180
|
// file/image/button/
|
|
174
181
|
// translate in dtable-events
|
|
175
182
|
// number/
|
|
176
|
-
//
|
|
183
|
+
// ctime/mtime/
|
|
177
184
|
// geolocation/
|
|
178
185
|
// collaborator/creator/last-modifier/
|
|
179
186
|
result[columnName] = cellValue;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
5
6
|
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
6
7
|
var dayjs = require('dayjs');
|
|
7
8
|
var utc = require('dayjs/plugin/utc');
|
|
@@ -18,10 +19,13 @@ var filterModifier = require('../../constants/filter/filter-modifier.js');
|
|
|
18
19
|
|
|
19
20
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
20
21
|
|
|
22
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
21
23
|
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
22
24
|
var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
|
|
23
25
|
var utc__default = /*#__PURE__*/_interopDefaultLegacy(utc);
|
|
24
26
|
|
|
27
|
+
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; }
|
|
28
|
+
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__default["default"](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; }
|
|
25
29
|
dayjs__default["default"].extend(utc__default["default"]);
|
|
26
30
|
|
|
27
31
|
// TEXT | GEOLOCATION | EMAIL | AUTO_NUMBER
|
|
@@ -124,7 +128,7 @@ var dateSqlCondition = function dateSqlCondition(column, filterItem) {
|
|
|
124
128
|
filter_term = filterItem.filter_term,
|
|
125
129
|
filter_term_modifier = filterItem.filter_term_modifier;
|
|
126
130
|
var filterLabel = [filterPredicate.FILTER_PREDICATE_TYPE.EMPTY, filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY];
|
|
127
|
-
if (filter_term.length === 0 && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
131
|
+
if ((!filter_term || filter_term.length === 0) && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
128
132
|
return '';
|
|
129
133
|
}
|
|
130
134
|
if (filter_predicate === filterPredicate.FILTER_PREDICATE_TYPE.IS) {
|
|
@@ -183,7 +187,7 @@ var ctimeSqlCondition = function ctimeSqlCondition(column, filterItem) {
|
|
|
183
187
|
filter_term = filterItem.filter_term,
|
|
184
188
|
filter_term_modifier = filterItem.filter_term_modifier;
|
|
185
189
|
var filterLabel = [filterPredicate.FILTER_PREDICATE_TYPE.EMPTY, filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY];
|
|
186
|
-
if (filter_term.length === 0 && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
190
|
+
if ((!filter_term || filter_term.length === 0) && filterLabel.indexOf(filter_predicate) < 0 && filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE) {
|
|
187
191
|
return '';
|
|
188
192
|
}
|
|
189
193
|
|
|
@@ -702,32 +706,103 @@ var getSqlConditionByFilter = function getSqlConditionByFilter(column, filterIte
|
|
|
702
706
|
}
|
|
703
707
|
return '';
|
|
704
708
|
};
|
|
705
|
-
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* FilterGroup: {"filter_conjunction": "And", filters: [Filter, ...]}
|
|
712
|
+
* Filter: {"column_key": "xxx", filter_predicate: "xxx", ...}
|
|
713
|
+
* @param {array} filters
|
|
714
|
+
* @param {object} table
|
|
715
|
+
* @param {string} username
|
|
716
|
+
* @param {string} userId
|
|
717
|
+
* @param {object} userDepartmentIdsMap
|
|
718
|
+
* @returns string
|
|
719
|
+
*/
|
|
720
|
+
var getSqlConditionsByFilters = function getSqlConditionsByFilters(filters, table, username, userId, userDepartmentIdsMap) {
|
|
721
|
+
var columns = table.columns;
|
|
706
722
|
var patchedUsername = patchUtils["default"].getUsername(username);
|
|
707
723
|
var patchedUserId = patchUtils["default"].getUserId(userId);
|
|
708
724
|
var patchedUserDepartmentIdsMap = patchUtils["default"].getUserDepartmentIdsMap(userDepartmentIdsMap);
|
|
725
|
+
var sqlConditions = [];
|
|
726
|
+
filters.forEach(function (filter) {
|
|
727
|
+
if (core.checkIsFilterGroup(filter)) {
|
|
728
|
+
var subFilters = filter.filters,
|
|
729
|
+
sub_filter_conjunction = filter.filter_conjunction;
|
|
730
|
+
var subSqlConditions = subFilters.map(function (subFilter) {
|
|
731
|
+
var filterColumn = column$1.getTableColumnByKey(table, subFilter.column_key);
|
|
732
|
+
return getSqlConditionByFilter(filterColumn, subFilter, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap);
|
|
733
|
+
});
|
|
734
|
+
var subSqlConditionsLength = subSqlConditions.length;
|
|
735
|
+
if (subSqlConditionsLength > 0) {
|
|
736
|
+
var subSqlConditionsString = subSqlConditions.length === 1 ? subSqlConditions + '' : "(".concat(subSqlConditions.join(' ' + sub_filter_conjunction + ' '), ")");
|
|
737
|
+
sqlConditions.push(subSqlConditionsString);
|
|
738
|
+
}
|
|
739
|
+
} else {
|
|
740
|
+
var column_key = filter.column_key;
|
|
741
|
+
var filterColumn = columns.find(function (column) {
|
|
742
|
+
return column.key === column_key;
|
|
743
|
+
});
|
|
744
|
+
sqlConditions.push(getSqlConditionByFilter(filterColumn, filter, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap));
|
|
745
|
+
}
|
|
746
|
+
});
|
|
747
|
+
return sqlConditions;
|
|
748
|
+
};
|
|
749
|
+
var checkFilter = function checkFilter(filter$1, columns) {
|
|
750
|
+
var _ValidateFilter$valid = filter.ValidateFilter.validate(filter$1, columns),
|
|
751
|
+
error_message = _ValidateFilter$valid.error_message;
|
|
752
|
+
if (error_message) {
|
|
753
|
+
if (error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
754
|
+
return false;
|
|
755
|
+
}
|
|
756
|
+
throw new Error(error_message);
|
|
757
|
+
}
|
|
758
|
+
return true;
|
|
759
|
+
};
|
|
760
|
+
var validateFilters = function validateFilters(filters, columns) {
|
|
761
|
+
var validFilters = [];
|
|
762
|
+
filters.forEach(function (filter) {
|
|
763
|
+
if (core.checkIsFilterGroup(filter)) {
|
|
764
|
+
var subFilters = filter.filters;
|
|
765
|
+
if (!Array.isArray(subFilters) || subFilters.length === 0) {
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
var validSubFilters = subFilters.filter(function (subFilter) {
|
|
769
|
+
return checkFilter(subFilter, columns);
|
|
770
|
+
});
|
|
771
|
+
if (validSubFilters.length === 0) {
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
validFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
775
|
+
filters: validSubFilters
|
|
776
|
+
}));
|
|
777
|
+
} else {
|
|
778
|
+
if (!checkFilter(filter, columns)) {
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
validFilters.push(filter);
|
|
782
|
+
}
|
|
783
|
+
});
|
|
784
|
+
return validFilters;
|
|
785
|
+
};
|
|
786
|
+
var filter2SqlCondition = function filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap) {
|
|
709
787
|
var columns = table.columns;
|
|
710
788
|
var filter_conjunction = view.filter_conjunction,
|
|
711
789
|
filters = view.filters;
|
|
712
790
|
if (typeof filter_conjunction !== 'string' || !Array.isArray(filters) || filters.length === 0) {
|
|
713
791
|
return '';
|
|
714
792
|
}
|
|
793
|
+
var validFilters = [];
|
|
794
|
+
try {
|
|
795
|
+
validFilters = validateFilters(filters, columns);
|
|
796
|
+
} catch (err) {
|
|
797
|
+
throw new Error(err.message);
|
|
798
|
+
}
|
|
799
|
+
if (validFilters.length === 0) {
|
|
800
|
+
return '';
|
|
801
|
+
}
|
|
715
802
|
|
|
716
803
|
// 1. add WHERE condition
|
|
717
804
|
var filterHeader = 'WHERE ';
|
|
718
|
-
var stringList =
|
|
719
|
-
var _ValidateFilter$valid = filter.ValidateFilter.validate(filterItem, columns),
|
|
720
|
-
error_message = _ValidateFilter$valid.error_message;
|
|
721
|
-
if (error_message) {
|
|
722
|
-
if (error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
723
|
-
return '';
|
|
724
|
-
}
|
|
725
|
-
throw new Error(error_message);
|
|
726
|
-
}
|
|
727
|
-
var column_key = filterItem.column_key;
|
|
728
|
-
var column = column$1.getTableColumnByKey(table, column_key);
|
|
729
|
-
return getSqlConditionByFilter(column, filterItem, patchedUsername, patchedUserId, patchedUserDepartmentIdsMap);
|
|
730
|
-
});
|
|
805
|
+
var stringList = getSqlConditionsByFilters(validFilters, table, username, userId, userDepartmentIdsMap);
|
|
731
806
|
|
|
732
807
|
// 2. filtered '' sql clause
|
|
733
808
|
stringList = stringList.filter(function (item) {
|
|
@@ -739,21 +814,29 @@ var filter2SqlCondition = function filter2SqlCondition(table, view, username, us
|
|
|
739
814
|
// const filterContent = stringList.join(' ' + filter_conjunction + ' ');
|
|
740
815
|
var filterContent = stringList[0];
|
|
741
816
|
for (var i = 1; i < stringList.length; i++) {
|
|
742
|
-
|
|
817
|
+
var currStr = stringList[i];
|
|
818
|
+
if (currStr.startsWith('(') && currStr.endsWith(')')) {
|
|
819
|
+
filterContent += " ".concat(filter_conjunction, " ").concat(stringList[i]);
|
|
820
|
+
} else {
|
|
821
|
+
filterContent += " ".concat(filter_conjunction, " (").concat(stringList[i], ")");
|
|
822
|
+
}
|
|
743
823
|
}
|
|
744
824
|
return filterHeader + filterContent;
|
|
745
825
|
};
|
|
746
826
|
|
|
827
|
+
exports.arrayColumnCondition = arrayColumnCondition;
|
|
747
828
|
exports.checkboxSqlCondition = checkboxSqlCondition;
|
|
748
829
|
exports.collaboratorSqlCondition = collaboratorSqlCondition;
|
|
749
830
|
exports.creatorSqlCondition = creatorSqlCondition;
|
|
750
831
|
exports.ctimeSqlCondition = ctimeSqlCondition;
|
|
751
832
|
exports.dateSqlCondition = dateSqlCondition;
|
|
833
|
+
exports.departmentMultipleSelectSqlCondition = departmentMultipleSelectSqlCondition;
|
|
752
834
|
exports.departmentSingleSelectSqlCondition = departmentSingleSelectSqlCondition;
|
|
753
835
|
exports.fileSqlCondition = fileSqlCondition;
|
|
754
836
|
exports.filter2SqlCondition = filter2SqlCondition;
|
|
755
837
|
exports.formulaSqlCondition = formulaSqlCondition;
|
|
756
838
|
exports.getSqlConditionByFilter = getSqlConditionByFilter;
|
|
839
|
+
exports.getSqlConditionsByFilters = getSqlConditionsByFilters;
|
|
757
840
|
exports.linkSqlCondition = linkSqlCondition;
|
|
758
841
|
exports.longtextSqlCondition = longtextSqlCondition;
|
|
759
842
|
exports.multipleSelectSqlCondition = multipleSelectSqlCondition;
|
package/lib/column/long-text.js
CHANGED
|
@@ -7,6 +7,7 @@ var imageReg1 = /^<img src="(\S+)" .+\/>/;
|
|
|
7
7
|
var imageReg2 = /^!\[\]\((\S+)\)/;
|
|
8
8
|
var linkReg1 = /^\[.+\]\(\S+\)/;
|
|
9
9
|
var linkReg2 = /^<(\S+)>$/;
|
|
10
|
+
var skipCharacterTypes = ['#', '`', '*', '[', ']', '-'];
|
|
10
11
|
function getLinks(hrefs) {
|
|
11
12
|
var hrefObj = {
|
|
12
13
|
links: [],
|
|
@@ -35,14 +36,10 @@ function getPreviewContent(markdownContent) {
|
|
|
35
36
|
var newMarkdownLength = newMarkdownContent.length;
|
|
36
37
|
for (var index = 0; index < newMarkdownLength; index++) {
|
|
37
38
|
var letter = newMarkdownContent[index];
|
|
38
|
-
if (letter
|
|
39
|
+
if (skipCharacterTypes.includes(letter)) {
|
|
39
40
|
continue;
|
|
40
41
|
} else if (letter === '\n') {
|
|
41
42
|
preview += ' ';
|
|
42
|
-
} else if (letter === '`') {
|
|
43
|
-
continue;
|
|
44
|
-
} else if (letter === '*') {
|
|
45
|
-
continue;
|
|
46
43
|
} else {
|
|
47
44
|
preview += newMarkdownContent[index];
|
|
48
45
|
}
|
|
@@ -50,7 +47,6 @@ function getPreviewContent(markdownContent) {
|
|
|
50
47
|
break;
|
|
51
48
|
}
|
|
52
49
|
}
|
|
53
|
-
preview = preview.length === newMarkdownLength ? preview : "".concat(preview, "...");
|
|
54
50
|
var hrefs = markdownContent.match(hrefReg);
|
|
55
51
|
if (hrefs) {
|
|
56
52
|
var _getLinks = getLinks(hrefs),
|
package/lib/common.js
CHANGED
|
@@ -50,7 +50,11 @@ var isEmptyObject = function isEmptyObject(obj) {
|
|
|
50
50
|
}
|
|
51
51
|
return true;
|
|
52
52
|
};
|
|
53
|
+
var hasOwnProperty = function hasOwnProperty(obj, key) {
|
|
54
|
+
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
55
|
+
};
|
|
53
56
|
|
|
54
57
|
exports.generatorBase64Code = generatorBase64Code;
|
|
58
|
+
exports.hasOwnProperty = hasOwnProperty;
|
|
55
59
|
exports.isEmpty = isEmpty;
|
|
56
60
|
exports.isEmptyObject = isEmptyObject;
|