dtable-utils 5.0.6 → 5.0.7-beta.2
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/color/column-color.js +2 -2
- package/es/color/row-color.js +2 -2
- package/es/common.js +4 -1
- package/es/constants/column.js +1 -1
- package/es/filter/core.js +195 -20
- package/es/filter/filter-row.js +20 -4
- package/es/index.js +1 -1
- package/es/link/core.js +33 -18
- package/es/row/convert.js +10 -2
- package/lib/archive/sql-generator/filter-condition.js +100 -17
- package/lib/common.js +4 -0
- package/lib/constants/column.js +1 -1
- package/lib/filter/core.js +202 -19
- package/lib/filter/filter-row.js +19 -3
- package/lib/index.js +5 -0
- package/lib/link/core.js +33 -18
- package/lib/row/convert.js +10 -2
- package/package.json +1 -1
package/es/row/convert.js
CHANGED
|
@@ -153,10 +153,18 @@ var convertRow = function convertRow(row, value, table, view, formulaResults, co
|
|
|
153
153
|
var _column$data = column.data,
|
|
154
154
|
link_id = _column$data.link_id,
|
|
155
155
|
table_id = _column$data.table_id,
|
|
156
|
-
other_table_id = _column$data.other_table_id
|
|
156
|
+
other_table_id = _column$data.other_table_id,
|
|
157
|
+
is_linked_back = _column$data.is_linked_back;
|
|
157
158
|
var otherTableID = tableID === table_id ? other_table_id : table_id;
|
|
158
159
|
var links = value.links;
|
|
159
|
-
result[columnName] = getLinkCellValue(
|
|
160
|
+
result[columnName] = getLinkCellValue({
|
|
161
|
+
links: links,
|
|
162
|
+
link_id: link_id,
|
|
163
|
+
is_linked_back: is_linked_back,
|
|
164
|
+
table1_id: tableID,
|
|
165
|
+
table2_id: otherTableID,
|
|
166
|
+
row_id: row._id
|
|
167
|
+
});
|
|
160
168
|
break;
|
|
161
169
|
}
|
|
162
170
|
case CellType.FORMULA:
|
|
@@ -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(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
28
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
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/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;
|
package/lib/constants/column.js
CHANGED
|
@@ -10,7 +10,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
10
10
|
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
11
11
|
|
|
12
12
|
var _COLUMNS_ICON_CONFIG, _SINGLE_CELL_VALUE_CO;
|
|
13
|
-
var COLUMNS_ICON_CONFIG = (_COLUMNS_ICON_CONFIG = {}, _defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_COLUMNS_ICON_CONFIG, cellType.CellType.DEFAULT, 'dtable-font dtable-icon-single-line-text'), cellType.CellType.TEXT, 'dtable-font dtable-icon-single-line-text'), cellType.CellType.NUMBER, 'dtable-font dtable-icon-number'), cellType.CellType.CHECKBOX, 'dtable-font dtable-icon-check-square-solid'), cellType.CellType.DATE, 'dtable-font dtable-icon-calendar-alt-solid'), cellType.CellType.SINGLE_SELECT, 'dtable-font dtable-icon-single-election'), cellType.CellType.LONG_TEXT, 'dtable-font dtable-icon-long-text'), cellType.CellType.IMAGE, 'dtable-font dtable-icon-picture'), cellType.CellType.FILE, 'dtable-font dtable-icon-file-alt-solid'),
|
|
13
|
+
var COLUMNS_ICON_CONFIG = (_COLUMNS_ICON_CONFIG = {}, _defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_COLUMNS_ICON_CONFIG, cellType.CellType.DEFAULT, 'dtable-font dtable-icon-single-line-text'), cellType.CellType.TEXT, 'dtable-font dtable-icon-single-line-text'), cellType.CellType.STRING, 'dtable-font dtable-icon-single-line-text'), cellType.CellType.NUMBER, 'dtable-font dtable-icon-number'), cellType.CellType.CHECKBOX, 'dtable-font dtable-icon-check-square-solid'), cellType.CellType.DATE, 'dtable-font dtable-icon-calendar-alt-solid'), cellType.CellType.SINGLE_SELECT, 'dtable-font dtable-icon-single-election'), cellType.CellType.LONG_TEXT, 'dtable-font dtable-icon-long-text'), cellType.CellType.IMAGE, 'dtable-font dtable-icon-picture'), cellType.CellType.FILE, 'dtable-font dtable-icon-file-alt-solid'), _defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_COLUMNS_ICON_CONFIG, cellType.CellType.MULTIPLE_SELECT, 'dtable-font dtable-icon-multiple-selection'), cellType.CellType.COLLABORATOR, 'dtable-font dtable-icon-collaborator'), cellType.CellType.LINK, 'dtable-font dtable-icon-link-other-record'), cellType.CellType.FORMULA, 'dtable-font dtable-icon-formula'), cellType.CellType.LINK_FORMULA, 'dtable-font dtable-icon-link-formulas'), cellType.CellType.CREATOR, 'dtable-font dtable-icon-creator'), cellType.CellType.CTIME, 'dtable-font dtable-icon-creation-time'), cellType.CellType.LAST_MODIFIER, 'dtable-font dtable-icon-creator'), cellType.CellType.MTIME, 'dtable-font dtable-icon-creation-time'), cellType.CellType.GEOLOCATION, 'dtable-font dtable-icon-location'), _defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"](_COLUMNS_ICON_CONFIG, cellType.CellType.AUTO_NUMBER, 'dtable-font dtable-icon-autonumber'), cellType.CellType.URL, 'dtable-font dtable-icon-url'), cellType.CellType.EMAIL, 'dtable-font dtable-icon-email'), cellType.CellType.DURATION, 'dtable-font dtable-icon-duration'), cellType.CellType.BUTTON, 'dtable-font dtable-icon-button'), cellType.CellType.RATE, 'dtable-font dtable-icon-rate'), cellType.CellType.DIGITAL_SIGN, 'dtable-font dtable-icon-handwritten-signature'), cellType.CellType.DEPARTMENT_SINGLE_SELECT, 'dtable-font dtable-icon-department-single-selection'));
|
|
14
14
|
var COLUMN_OPTIONS = [{
|
|
15
15
|
iconName: 'Basic',
|
|
16
16
|
iconClass: '',
|
package/lib/filter/core.js
CHANGED
|
@@ -8,6 +8,7 @@ var date = require('../date.js');
|
|
|
8
8
|
var index = require('../constants/filter/index.js');
|
|
9
9
|
var cellType = require('../constants/cell-type.js');
|
|
10
10
|
var formula = require('../constants/formula.js');
|
|
11
|
+
var common = require('../common.js');
|
|
11
12
|
var filterModifier = require('../constants/filter/filter-modifier.js');
|
|
12
13
|
|
|
13
14
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -17,6 +18,45 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
|
|
|
17
18
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
19
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
20
|
var EXACT_DATE_TERM_MODIFIER_TYPES = [filterModifier.FILTER_TERM_MODIFIER_TYPE.TODAY, filterModifier.FILTER_TERM_MODIFIER_TYPE.TOMORROW, filterModifier.FILTER_TERM_MODIFIER_TYPE.YESTERDAY, filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_AGO, filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_FROM_NOW, filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_AGO, filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_FROM_NOW, filterModifier.FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_AGO, filterModifier.FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_FROM_NOW, filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Check if is filter group
|
|
24
|
+
* @param {object} filter
|
|
25
|
+
* @returns bool
|
|
26
|
+
*/
|
|
27
|
+
var checkIsFilterGroup = function checkIsFilterGroup(filter) {
|
|
28
|
+
return common.hasOwnProperty(filter, 'filters');
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Check if is formula/link filter
|
|
33
|
+
* @param {object} filter
|
|
34
|
+
* @returns bool
|
|
35
|
+
*/
|
|
36
|
+
var checkIsFormulaFilter = function checkIsFormulaFilter(filter) {
|
|
37
|
+
var column = filter.column;
|
|
38
|
+
return formula.FORMULA_COLUMN_TYPES_MAP[column.type] || column.type === cellType.CellType.LINK;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Check has contains formula filter
|
|
43
|
+
* @param {array} filters e.g. [{ column_key, column, ...}]
|
|
44
|
+
* @returns bool
|
|
45
|
+
*/
|
|
46
|
+
var checkHasFormulaFilter = function checkHasFormulaFilter(filters) {
|
|
47
|
+
return filters.some(function (filter) {
|
|
48
|
+
if (checkIsFilterGroup(filter)) {
|
|
49
|
+
var subFilters = filter.filters;
|
|
50
|
+
if (!Array.isArray(subFilters) || subFilters.length === 0) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return subFilters.some(function (subFilter) {
|
|
54
|
+
return checkIsFormulaFilter(subFilter);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return checkIsFormulaFilter(filter);
|
|
58
|
+
});
|
|
59
|
+
};
|
|
20
60
|
var isCurrentUserDepartment = function isCurrentUserDepartment(departmentId, userDepartmentIdsMap) {
|
|
21
61
|
var _ref = userDepartmentIdsMap || {},
|
|
22
62
|
current_user_department_ids = _ref.current_user_department_ids;
|
|
@@ -32,9 +72,24 @@ var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTer
|
|
|
32
72
|
return filterTerm.includes(departmentId);
|
|
33
73
|
};
|
|
34
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Check if the filter is available to display
|
|
77
|
+
* @param {object} filter
|
|
78
|
+
* @param {array} columns
|
|
79
|
+
* @returns bool
|
|
80
|
+
*/
|
|
81
|
+
var checkIsAvailableFilter = function checkIsAvailableFilter(filter$1, columns) {
|
|
82
|
+
var _ValidateFilter$valid = filter.ValidateFilter.validate(filter$1, columns),
|
|
83
|
+
error_message = _ValidateFilter$valid.error_message;
|
|
84
|
+
if (error_message && error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
};
|
|
89
|
+
|
|
35
90
|
/**
|
|
36
91
|
* Get filters which excludes incomplete
|
|
37
|
-
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
|
|
92
|
+
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }, { filters: [...]}]
|
|
38
93
|
* @param {array} columns
|
|
39
94
|
* @returns valid filters, array
|
|
40
95
|
*/
|
|
@@ -42,11 +97,28 @@ var getValidFilters = function getValidFilters(filters, columns) {
|
|
|
42
97
|
if (!Array.isArray(filters) || !Array.isArray(columns)) {
|
|
43
98
|
return [];
|
|
44
99
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
100
|
+
var availableFilters = [];
|
|
101
|
+
filters.forEach(function (filter) {
|
|
102
|
+
if (checkIsFilterGroup(filter)) {
|
|
103
|
+
var subFilters = filter.filters;
|
|
104
|
+
var availableSubFilters = [];
|
|
105
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
106
|
+
availableSubFilters = subFilters.filter(function (subFilter) {
|
|
107
|
+
return checkIsAvailableFilter(subFilter, columns);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// just keep the filter group which has valid sub-filters
|
|
112
|
+
if (availableSubFilters.length > 0) {
|
|
113
|
+
availableFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
114
|
+
filters: availableSubFilters
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
} else if (checkIsAvailableFilter(filter, columns)) {
|
|
118
|
+
availableFilters.push(filter);
|
|
119
|
+
}
|
|
49
120
|
});
|
|
121
|
+
return availableFilters;
|
|
50
122
|
};
|
|
51
123
|
|
|
52
124
|
/**
|
|
@@ -308,9 +380,37 @@ var _getFormattedFilter = function getFormattedFilter(filter, column) {
|
|
|
308
380
|
*/
|
|
309
381
|
var getFormattedFilters = function getFormattedFilters(filters) {
|
|
310
382
|
return filters.map(function (filter) {
|
|
383
|
+
if (checkIsFilterGroup(filter)) {
|
|
384
|
+
var subFilters = filter.filters;
|
|
385
|
+
var formattedSubFilters = [];
|
|
386
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
387
|
+
formattedSubFilters = subFilters.map(function (subFilter) {
|
|
388
|
+
return _getFormattedFilter(subFilter, subFilter.column);
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
return _objectSpread(_objectSpread({}, filter), {}, {
|
|
392
|
+
filters: formattedSubFilters
|
|
393
|
+
});
|
|
394
|
+
}
|
|
311
395
|
return _getFormattedFilter(filter, filter.column);
|
|
312
396
|
});
|
|
313
397
|
};
|
|
398
|
+
var checkFilter = function checkFilter(filter$1, columns) {
|
|
399
|
+
var _ValidateFilter$valid2 = filter.ValidateFilter.validate(filter$1, columns),
|
|
400
|
+
error_message = _ValidateFilter$valid2.error_message;
|
|
401
|
+
if (error_message) {
|
|
402
|
+
if (error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
throw new Error(error_message);
|
|
406
|
+
}
|
|
407
|
+
var newFilter = _objectSpread({}, filter$1);
|
|
408
|
+
var column_key = filter$1.column_key;
|
|
409
|
+
newFilter.column = columns.find(function (column) {
|
|
410
|
+
return column.key === column_key;
|
|
411
|
+
});
|
|
412
|
+
return newFilter;
|
|
413
|
+
};
|
|
314
414
|
|
|
315
415
|
/**
|
|
316
416
|
* Get filters without error messages and formatted with filter column
|
|
@@ -323,33 +423,116 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
|
|
|
323
423
|
return [];
|
|
324
424
|
}
|
|
325
425
|
var cleanFilters = [];
|
|
326
|
-
filters.forEach(function (filter
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
426
|
+
filters.forEach(function (filter) {
|
|
427
|
+
if (checkIsFilterGroup(filter)) {
|
|
428
|
+
var subFilters = filter.filters;
|
|
429
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
430
|
+
var cleanSubFilters = [];
|
|
431
|
+
subFilters.forEach(function (subFilter) {
|
|
432
|
+
var newSubFilter = checkFilter(subFilter, columns);
|
|
433
|
+
if (newSubFilter) {
|
|
434
|
+
cleanSubFilters.push(newSubFilter);
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
// just keep the filter group which has valid sub-filters
|
|
439
|
+
if (cleanSubFilters.length > 0) {
|
|
440
|
+
cleanFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
441
|
+
filters: cleanSubFilters
|
|
442
|
+
}));
|
|
443
|
+
}
|
|
333
444
|
}
|
|
334
445
|
} else {
|
|
335
|
-
var
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
column: filterColumn
|
|
340
|
-
});
|
|
341
|
-
cleanFilters.push(newFilter);
|
|
446
|
+
var newFilter = checkFilter(filter, columns);
|
|
447
|
+
if (newFilter) {
|
|
448
|
+
cleanFilters.push(newFilter);
|
|
449
|
+
}
|
|
342
450
|
}
|
|
343
451
|
});
|
|
344
452
|
return cleanFilters;
|
|
345
453
|
};
|
|
346
454
|
|
|
455
|
+
/**
|
|
456
|
+
* Categorize filters
|
|
457
|
+
* @param {array} filters
|
|
458
|
+
* @returns {object} { generalFilters, formulaFilters, filterGroups }
|
|
459
|
+
*/
|
|
460
|
+
var getClassifiedFilters = function getClassifiedFilters(filters) {
|
|
461
|
+
var generalFilters = [];
|
|
462
|
+
var formulaFilters = [];
|
|
463
|
+
var filterGroups = [];
|
|
464
|
+
filters.forEach(function (filter) {
|
|
465
|
+
if (checkIsFilterGroup(filter)) {
|
|
466
|
+
filterGroups.push(filter);
|
|
467
|
+
} else if (checkIsFormulaFilter(filter)) {
|
|
468
|
+
formulaFilters.push(filter);
|
|
469
|
+
} else {
|
|
470
|
+
generalFilters.push(filter);
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
return {
|
|
474
|
+
generalFilters: generalFilters,
|
|
475
|
+
formulaFilters: formulaFilters,
|
|
476
|
+
filterGroups: filterGroups
|
|
477
|
+
};
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Check if is related filter of given columns
|
|
482
|
+
* @param {object} filter
|
|
483
|
+
* @param {object} updatedColumnKeyMap e.g. { [column.key]: true }
|
|
484
|
+
* @returns bool
|
|
485
|
+
*/
|
|
486
|
+
var checkIsRelatedFilter = function checkIsRelatedFilter(filter, columnKeyMap) {
|
|
487
|
+
var column_key = filter.column_key;
|
|
488
|
+
if (!column_key) {
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
return !!columnKeyMap[column_key];
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Check if is related filter group of given columns
|
|
496
|
+
* @param {object} filterGroup
|
|
497
|
+
* @param {object} columnKeyMap
|
|
498
|
+
* @returns bool
|
|
499
|
+
*/
|
|
500
|
+
var checkIsRelatedFilterGroup = function checkIsRelatedFilterGroup(filterGroup, columnKeyMap) {
|
|
501
|
+
var filters = filterGroup.filters;
|
|
502
|
+
if (!Array.isArray(filters) || filters.length === 0) {
|
|
503
|
+
return false;
|
|
504
|
+
}
|
|
505
|
+
return filters.some(function (filter) {
|
|
506
|
+
return checkIsRelatedFilter(filter, columnKeyMap);
|
|
507
|
+
});
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Check if has related filters of given columns
|
|
512
|
+
* @param {array} filters
|
|
513
|
+
* @param {object} updatedColumnKeyMap e.g. { [column.key]: true }
|
|
514
|
+
* @returns bool
|
|
515
|
+
*/
|
|
516
|
+
var hasRelatedFilters = function hasRelatedFilters(filters, columnKeyMap) {
|
|
517
|
+
return filters.some(function (filter) {
|
|
518
|
+
return checkIsFilterGroup(filter) ? checkIsRelatedFilterGroup(filter, columnKeyMap) : checkIsRelatedFilter(filter, columnKeyMap);
|
|
519
|
+
});
|
|
520
|
+
};
|
|
521
|
+
|
|
522
|
+
exports.checkHasFormulaFilter = checkHasFormulaFilter;
|
|
523
|
+
exports.checkIsAvailableFilter = checkIsAvailableFilter;
|
|
524
|
+
exports.checkIsFilterGroup = checkIsFilterGroup;
|
|
525
|
+
exports.checkIsFormulaFilter = checkIsFormulaFilter;
|
|
526
|
+
exports.checkIsRelatedFilter = checkIsRelatedFilter;
|
|
527
|
+
exports.checkIsRelatedFilterGroup = checkIsRelatedFilterGroup;
|
|
347
528
|
exports.deleteInvalidFilter = deleteInvalidFilter;
|
|
529
|
+
exports.getClassifiedFilters = getClassifiedFilters;
|
|
348
530
|
exports.getFormattedFilter = _getFormattedFilter;
|
|
349
531
|
exports.getFormattedFilterOtherDate = getFormattedFilterOtherDate;
|
|
350
532
|
exports.getFormattedFilters = getFormattedFilters;
|
|
351
533
|
exports.getValidFilters = getValidFilters;
|
|
352
534
|
exports.getValidFiltersWithoutError = getValidFiltersWithoutError;
|
|
535
|
+
exports.hasRelatedFilters = hasRelatedFilters;
|
|
353
536
|
exports.isCurrentUserDepartment = isCurrentUserDepartment;
|
|
354
537
|
exports.isCurrentUserDepartmentAndSub = isCurrentUserDepartmentAndSub;
|
|
355
538
|
exports.isSpecificDepartment = isSpecificDepartment;
|
package/lib/filter/filter-row.js
CHANGED
|
@@ -141,7 +141,7 @@ var getFilterResult = function getFilterResult(row, filter, _ref) {
|
|
|
141
141
|
* @param {object} userDepartmentIdsMap e.g. { current_user_department_ids: [8, 10], current_user_department_and_sub_ids: [8, 10, 12, 34] }
|
|
142
142
|
* @returns filter result, bool
|
|
143
143
|
*/
|
|
144
|
-
var
|
|
144
|
+
var _filterRow = function filterRow(row, filterConjunction, filters) {
|
|
145
145
|
var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
|
|
146
146
|
formulaRow = _ref2.formulaRow,
|
|
147
147
|
_ref2$username = _ref2.username,
|
|
@@ -151,6 +151,14 @@ var filterRow = function filterRow(row, filterConjunction, filters) {
|
|
|
151
151
|
userDepartmentIdsMap = _ref2$userDepartmentI === void 0 ? {} : _ref2$userDepartmentI;
|
|
152
152
|
if (filterConjunction === index.FILTER_CONJUNCTION_TYPE.AND) {
|
|
153
153
|
return filters.every(function (filter) {
|
|
154
|
+
if (core.checkIsFilterGroup(filter)) {
|
|
155
|
+
return _filterRow(row, filter.filter_conjunction, filter.filters, {
|
|
156
|
+
formulaRow: formulaRow,
|
|
157
|
+
username: username,
|
|
158
|
+
userId: userId,
|
|
159
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
160
|
+
});
|
|
161
|
+
}
|
|
154
162
|
return getFilterResult(row, filter, {
|
|
155
163
|
formulaRow: formulaRow,
|
|
156
164
|
username: username,
|
|
@@ -161,6 +169,14 @@ var filterRow = function filterRow(row, filterConjunction, filters) {
|
|
|
161
169
|
}
|
|
162
170
|
if (filterConjunction === index.FILTER_CONJUNCTION_TYPE.OR) {
|
|
163
171
|
return filters.some(function (filter) {
|
|
172
|
+
if (core.checkIsFilterGroup(filter)) {
|
|
173
|
+
return _filterRow(row, filter.filter_conjunction, filter.filters, {
|
|
174
|
+
formulaRow: formulaRow,
|
|
175
|
+
username: username,
|
|
176
|
+
userId: userId,
|
|
177
|
+
userDepartmentIdsMap: userDepartmentIdsMap
|
|
178
|
+
});
|
|
179
|
+
}
|
|
164
180
|
return getFilterResult(row, filter, {
|
|
165
181
|
formulaRow: formulaRow,
|
|
166
182
|
username: username,
|
|
@@ -193,7 +209,7 @@ var filterRows = function filterRows(filterConjunction, filters, rows, _ref3) {
|
|
|
193
209
|
rows.forEach(function (row) {
|
|
194
210
|
var rowId = row._id;
|
|
195
211
|
var formulaRow = formulaRows ? formulaRows[rowId] : null;
|
|
196
|
-
if (
|
|
212
|
+
if (_filterRow(row, filterConjunction, formattedFilters, {
|
|
197
213
|
formulaRow: formulaRow,
|
|
198
214
|
username: username,
|
|
199
215
|
userId: userId,
|
|
@@ -257,6 +273,6 @@ var getFilteredRowsWithoutFormulaCalculation = function getFilteredRowsWithoutFo
|
|
|
257
273
|
};
|
|
258
274
|
};
|
|
259
275
|
|
|
260
|
-
exports.filterRow =
|
|
276
|
+
exports.filterRow = _filterRow;
|
|
261
277
|
exports.filterRows = filterRows;
|
|
262
278
|
exports.getFilteredRowsWithoutFormulaCalculation = getFilteredRowsWithoutFormulaCalculation;
|
package/lib/index.js
CHANGED
|
@@ -253,12 +253,17 @@ exports.searchCollaborators = search.searchCollaborators;
|
|
|
253
253
|
exports.ValidateFilter = filter.ValidateFilter;
|
|
254
254
|
exports.isValidEmail = email.isValidEmail;
|
|
255
255
|
exports.isValidPosition = geolocation$2.isValidPosition;
|
|
256
|
+
exports.checkHasFormulaFilter = core$5.checkHasFormulaFilter;
|
|
257
|
+
exports.checkIsFilterGroup = core$5.checkIsFilterGroup;
|
|
258
|
+
exports.checkIsRelatedFilter = core$5.checkIsRelatedFilter;
|
|
256
259
|
exports.deleteInvalidFilter = core$5.deleteInvalidFilter;
|
|
260
|
+
exports.getClassifiedFilters = core$5.getClassifiedFilters;
|
|
257
261
|
exports.getFormattedFilter = core$5.getFormattedFilter;
|
|
258
262
|
exports.getFormattedFilterOtherDate = core$5.getFormattedFilterOtherDate;
|
|
259
263
|
exports.getFormattedFilters = core$5.getFormattedFilters;
|
|
260
264
|
exports.getValidFilters = core$5.getValidFilters;
|
|
261
265
|
exports.getValidFiltersWithoutError = core$5.getValidFiltersWithoutError;
|
|
266
|
+
exports.hasRelatedFilters = core$5.hasRelatedFilters;
|
|
262
267
|
exports.otherDate = core$5.otherDate;
|
|
263
268
|
exports.checkboxFilter = checkbox$1.checkboxFilter;
|
|
264
269
|
exports.collaboratorFilter = collaborator$1.collaboratorFilter;
|