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
|
@@ -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(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; }
|
|
17
|
+
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(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; }
|
|
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/color/column-color.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import deepCopy from 'deep-copy';
|
|
3
3
|
import { deleteInvalidFilter, getFormattedFilters } from '../filter/core.js';
|
|
4
|
-
import { filterRows, filterRow } from '../filter/filter-row.js';
|
|
4
|
+
import { filterRows, filterRow as _filterRow } from '../filter/filter-row.js';
|
|
5
5
|
import { ValidateFilter } from '../validate/filter.js';
|
|
6
6
|
import { isNumberColumn } from '../column/number.js';
|
|
7
7
|
import { getRowsByIds } from '../table/row.js';
|
|
@@ -327,7 +327,7 @@ var getColumnColors = function getColumnColors(rows, view, table, value) {
|
|
|
327
327
|
var filter_conjunction = colorRule.filter_conjunction,
|
|
328
328
|
filters = colorRule.filters,
|
|
329
329
|
color = colorRule.color;
|
|
330
|
-
if (
|
|
330
|
+
if (_filterRow(row, filter_conjunction, filters, {
|
|
331
331
|
formulaRow: formulaRow,
|
|
332
332
|
username: username,
|
|
333
333
|
userId: userId,
|
package/es/color/row-color.js
CHANGED
|
@@ -6,7 +6,7 @@ import { getColumnOptions } from '../column/option.js';
|
|
|
6
6
|
import { getGeolocationDisplayString } from '../cell-value-get/geolocation.js';
|
|
7
7
|
import { ValidateFilter } from '../validate/filter.js';
|
|
8
8
|
import { deleteInvalidFilter, getFormattedFilters } from '../filter/core.js';
|
|
9
|
-
import { filterRow } from '../filter/filter-row.js';
|
|
9
|
+
import { filterRow as _filterRow } from '../filter/filter-row.js';
|
|
10
10
|
import { ROW_COLOR_TYPE, ROW_COLOR_FOR_DUPLICATE_VALUES, SUPPORT_CHECKING_DUPLICATE_COLUMNS_TYPES } from '../constants/row-color.js';
|
|
11
11
|
import { CellType } from '../constants/cell-type.js';
|
|
12
12
|
|
|
@@ -177,7 +177,7 @@ var getRowsColorByRules = function getRowsColorByRules(rows, view, table) {
|
|
|
177
177
|
var color = colorRule.color,
|
|
178
178
|
filter_conjunction = colorRule.filter_conjunction,
|
|
179
179
|
filters = colorRule.filters;
|
|
180
|
-
if (
|
|
180
|
+
if (_filterRow(row, filter_conjunction, filters, {
|
|
181
181
|
formulaRow: formulaRow,
|
|
182
182
|
username: username,
|
|
183
183
|
userId: userId,
|
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/constants/column.js
CHANGED
|
@@ -2,7 +2,7 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
|
2
2
|
import { CellType } from './cell-type.js';
|
|
3
3
|
|
|
4
4
|
var _COLUMNS_ICON_CONFIG, _SINGLE_CELL_VALUE_CO;
|
|
5
|
-
var COLUMNS_ICON_CONFIG = (_COLUMNS_ICON_CONFIG = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_COLUMNS_ICON_CONFIG, CellType.DEFAULT, 'dtable-font dtable-icon-single-line-text'), CellType.TEXT, 'dtable-font dtable-icon-single-line-text'), CellType.NUMBER, 'dtable-font dtable-icon-number'), CellType.CHECKBOX, 'dtable-font dtable-icon-check-square-solid'), CellType.DATE, 'dtable-font dtable-icon-calendar-alt-solid'), CellType.SINGLE_SELECT, 'dtable-font dtable-icon-single-election'), CellType.LONG_TEXT, 'dtable-font dtable-icon-long-text'), CellType.IMAGE, 'dtable-font dtable-icon-picture'), CellType.FILE, 'dtable-font dtable-icon-file-alt-solid'),
|
|
5
|
+
var COLUMNS_ICON_CONFIG = (_COLUMNS_ICON_CONFIG = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_COLUMNS_ICON_CONFIG, CellType.DEFAULT, 'dtable-font dtable-icon-single-line-text'), CellType.TEXT, 'dtable-font dtable-icon-single-line-text'), CellType.STRING, 'dtable-font dtable-icon-single-line-text'), CellType.NUMBER, 'dtable-font dtable-icon-number'), CellType.CHECKBOX, 'dtable-font dtable-icon-check-square-solid'), CellType.DATE, 'dtable-font dtable-icon-calendar-alt-solid'), CellType.SINGLE_SELECT, 'dtable-font dtable-icon-single-election'), CellType.LONG_TEXT, 'dtable-font dtable-icon-long-text'), CellType.IMAGE, 'dtable-font dtable-icon-picture'), CellType.FILE, 'dtable-font dtable-icon-file-alt-solid'), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_COLUMNS_ICON_CONFIG, CellType.MULTIPLE_SELECT, 'dtable-font dtable-icon-multiple-selection'), CellType.COLLABORATOR, 'dtable-font dtable-icon-collaborator'), CellType.LINK, 'dtable-font dtable-icon-link-other-record'), CellType.FORMULA, 'dtable-font dtable-icon-formula'), CellType.LINK_FORMULA, 'dtable-font dtable-icon-link-formulas'), CellType.CREATOR, 'dtable-font dtable-icon-creator'), CellType.CTIME, 'dtable-font dtable-icon-creation-time'), CellType.LAST_MODIFIER, 'dtable-font dtable-icon-creator'), CellType.MTIME, 'dtable-font dtable-icon-creation-time'), CellType.GEOLOCATION, 'dtable-font dtable-icon-location'), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_COLUMNS_ICON_CONFIG, CellType.AUTO_NUMBER, 'dtable-font dtable-icon-autonumber'), CellType.URL, 'dtable-font dtable-icon-url'), CellType.EMAIL, 'dtable-font dtable-icon-email'), CellType.DURATION, 'dtable-font dtable-icon-duration'), CellType.BUTTON, 'dtable-font dtable-icon-button'), CellType.RATE, 'dtable-font dtable-icon-rate'), CellType.DIGITAL_SIGN, 'dtable-font dtable-icon-handwritten-signature'), CellType.DEPARTMENT_SINGLE_SELECT, 'dtable-font dtable-icon-department-single-selection'));
|
|
6
6
|
var COLUMN_OPTIONS = [{
|
|
7
7
|
iconName: 'Basic',
|
|
8
8
|
iconClass: '',
|
package/es/filter/core.js
CHANGED
|
@@ -3,12 +3,52 @@ import { ValidateFilter } from '../validate/filter.js';
|
|
|
3
3
|
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
|
-
import { FORMULA_RESULT_TYPE } from '../constants/formula.js';
|
|
6
|
+
import { FORMULA_RESULT_TYPE, FORMULA_COLUMN_TYPES_MAP } 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(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; }
|
|
10
11
|
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(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; }
|
|
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
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Check if is formula/link filter
|
|
25
|
+
* @param {object} filter
|
|
26
|
+
* @returns bool
|
|
27
|
+
*/
|
|
28
|
+
var checkIsFormulaFilter = function checkIsFormulaFilter(filter) {
|
|
29
|
+
var column = filter.column;
|
|
30
|
+
return FORMULA_COLUMN_TYPES_MAP[column.type] || column.type === CellType.LINK;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Check has contains formula filter
|
|
35
|
+
* @param {array} filters e.g. [{ column_key, column, ...}]
|
|
36
|
+
* @returns bool
|
|
37
|
+
*/
|
|
38
|
+
var checkHasFormulaFilter = function checkHasFormulaFilter(filters) {
|
|
39
|
+
return filters.some(function (filter) {
|
|
40
|
+
if (checkIsFilterGroup(filter)) {
|
|
41
|
+
var subFilters = filter.filters;
|
|
42
|
+
if (!Array.isArray(subFilters) || subFilters.length === 0) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return subFilters.some(function (subFilter) {
|
|
46
|
+
return checkIsFormulaFilter(subFilter);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return checkIsFormulaFilter(filter);
|
|
50
|
+
});
|
|
51
|
+
};
|
|
12
52
|
var isCurrentUserDepartment = function isCurrentUserDepartment(departmentId, userDepartmentIdsMap) {
|
|
13
53
|
var _ref = userDepartmentIdsMap || {},
|
|
14
54
|
current_user_department_ids = _ref.current_user_department_ids;
|
|
@@ -24,9 +64,24 @@ var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTer
|
|
|
24
64
|
return filterTerm.includes(departmentId);
|
|
25
65
|
};
|
|
26
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Check if the filter is available to display
|
|
69
|
+
* @param {object} filter
|
|
70
|
+
* @param {array} columns
|
|
71
|
+
* @returns bool
|
|
72
|
+
*/
|
|
73
|
+
var checkIsAvailableFilter = function checkIsAvailableFilter(filter, columns) {
|
|
74
|
+
var _ValidateFilter$valid = ValidateFilter.validate(filter, columns),
|
|
75
|
+
error_message = _ValidateFilter$valid.error_message;
|
|
76
|
+
if (error_message && error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
};
|
|
81
|
+
|
|
27
82
|
/**
|
|
28
83
|
* Get filters which excludes incomplete
|
|
29
|
-
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
|
|
84
|
+
* @param {array} filters e.g. [{ column_key, filter_predicate, ... }, { filters: [...]}]
|
|
30
85
|
* @param {array} columns
|
|
31
86
|
* @returns valid filters, array
|
|
32
87
|
*/
|
|
@@ -34,11 +89,28 @@ var getValidFilters = function getValidFilters(filters, columns) {
|
|
|
34
89
|
if (!Array.isArray(filters) || !Array.isArray(columns)) {
|
|
35
90
|
return [];
|
|
36
91
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
92
|
+
var availableFilters = [];
|
|
93
|
+
filters.forEach(function (filter) {
|
|
94
|
+
if (checkIsFilterGroup(filter)) {
|
|
95
|
+
var subFilters = filter.filters;
|
|
96
|
+
var availableSubFilters = [];
|
|
97
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
98
|
+
availableSubFilters = subFilters.filter(function (subFilter) {
|
|
99
|
+
return checkIsAvailableFilter(subFilter, columns);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// just keep the filter group which has valid sub-filters
|
|
104
|
+
if (availableSubFilters.length > 0) {
|
|
105
|
+
availableFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
106
|
+
filters: availableSubFilters
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
} else if (checkIsAvailableFilter(filter, columns)) {
|
|
110
|
+
availableFilters.push(filter);
|
|
111
|
+
}
|
|
41
112
|
});
|
|
113
|
+
return availableFilters;
|
|
42
114
|
};
|
|
43
115
|
|
|
44
116
|
/**
|
|
@@ -300,9 +372,37 @@ var _getFormattedFilter = function getFormattedFilter(filter, column) {
|
|
|
300
372
|
*/
|
|
301
373
|
var getFormattedFilters = function getFormattedFilters(filters) {
|
|
302
374
|
return filters.map(function (filter) {
|
|
375
|
+
if (checkIsFilterGroup(filter)) {
|
|
376
|
+
var subFilters = filter.filters;
|
|
377
|
+
var formattedSubFilters = [];
|
|
378
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
379
|
+
formattedSubFilters = subFilters.map(function (subFilter) {
|
|
380
|
+
return _getFormattedFilter(subFilter, subFilter.column);
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
return _objectSpread(_objectSpread({}, filter), {}, {
|
|
384
|
+
filters: formattedSubFilters
|
|
385
|
+
});
|
|
386
|
+
}
|
|
303
387
|
return _getFormattedFilter(filter, filter.column);
|
|
304
388
|
});
|
|
305
389
|
};
|
|
390
|
+
var checkFilter = function checkFilter(filter, columns) {
|
|
391
|
+
var _ValidateFilter$valid2 = ValidateFilter.validate(filter, columns),
|
|
392
|
+
error_message = _ValidateFilter$valid2.error_message;
|
|
393
|
+
if (error_message) {
|
|
394
|
+
if (error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
throw new Error(error_message);
|
|
398
|
+
}
|
|
399
|
+
var newFilter = _objectSpread({}, filter);
|
|
400
|
+
var column_key = filter.column_key;
|
|
401
|
+
newFilter.column = columns.find(function (column) {
|
|
402
|
+
return column.key === column_key;
|
|
403
|
+
});
|
|
404
|
+
return newFilter;
|
|
405
|
+
};
|
|
306
406
|
|
|
307
407
|
/**
|
|
308
408
|
* Get filters without error messages and formatted with filter column
|
|
@@ -316,24 +416,99 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
|
|
|
316
416
|
}
|
|
317
417
|
var cleanFilters = [];
|
|
318
418
|
filters.forEach(function (filter) {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
419
|
+
if (checkIsFilterGroup(filter)) {
|
|
420
|
+
var subFilters = filter.filters;
|
|
421
|
+
if (Array.isArray(subFilters) && subFilters.length > 0) {
|
|
422
|
+
var cleanSubFilters = [];
|
|
423
|
+
subFilters.forEach(function (subFilter) {
|
|
424
|
+
var newSubFilter = checkFilter(subFilter, columns);
|
|
425
|
+
if (newSubFilter) {
|
|
426
|
+
cleanSubFilters.push(newSubFilter);
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
// just keep the filter group which has valid sub-filters
|
|
431
|
+
if (cleanSubFilters.length > 0) {
|
|
432
|
+
cleanFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
|
|
433
|
+
filters: cleanSubFilters
|
|
434
|
+
}));
|
|
435
|
+
}
|
|
325
436
|
}
|
|
326
437
|
} else {
|
|
327
|
-
var
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
column: filterColumn
|
|
332
|
-
});
|
|
333
|
-
cleanFilters.push(newFilter);
|
|
438
|
+
var newFilter = checkFilter(filter, columns);
|
|
439
|
+
if (newFilter) {
|
|
440
|
+
cleanFilters.push(newFilter);
|
|
441
|
+
}
|
|
334
442
|
}
|
|
335
443
|
});
|
|
336
444
|
return cleanFilters;
|
|
337
445
|
};
|
|
338
446
|
|
|
339
|
-
|
|
447
|
+
/**
|
|
448
|
+
* Categorize filters
|
|
449
|
+
* @param {array} filters
|
|
450
|
+
* @returns {object} { generalFilters, formulaFilters, filterGroups }
|
|
451
|
+
*/
|
|
452
|
+
var getClassifiedFilters = function getClassifiedFilters(filters) {
|
|
453
|
+
var generalFilters = [];
|
|
454
|
+
var formulaFilters = [];
|
|
455
|
+
var filterGroups = [];
|
|
456
|
+
filters.forEach(function (filter) {
|
|
457
|
+
if (checkIsFilterGroup(filter)) {
|
|
458
|
+
filterGroups.push(filter);
|
|
459
|
+
} else if (checkIsFormulaFilter(filter)) {
|
|
460
|
+
formulaFilters.push(filter);
|
|
461
|
+
} else {
|
|
462
|
+
generalFilters.push(filter);
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
return {
|
|
466
|
+
generalFilters: generalFilters,
|
|
467
|
+
formulaFilters: formulaFilters,
|
|
468
|
+
filterGroups: filterGroups
|
|
469
|
+
};
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Check if is related filter of given columns
|
|
474
|
+
* @param {object} filter
|
|
475
|
+
* @param {object} updatedColumnKeyMap e.g. { [column.key]: true }
|
|
476
|
+
* @returns bool
|
|
477
|
+
*/
|
|
478
|
+
var checkIsRelatedFilter = function checkIsRelatedFilter(filter, columnKeyMap) {
|
|
479
|
+
var column_key = filter.column_key;
|
|
480
|
+
if (!column_key) {
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
return !!columnKeyMap[column_key];
|
|
484
|
+
};
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Check if is related filter group of given columns
|
|
488
|
+
* @param {object} filterGroup
|
|
489
|
+
* @param {object} columnKeyMap
|
|
490
|
+
* @returns bool
|
|
491
|
+
*/
|
|
492
|
+
var checkIsRelatedFilterGroup = function checkIsRelatedFilterGroup(filterGroup, columnKeyMap) {
|
|
493
|
+
var filters = filterGroup.filters;
|
|
494
|
+
if (!Array.isArray(filters) || filters.length === 0) {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
return filters.some(function (filter) {
|
|
498
|
+
return checkIsRelatedFilter(filter, columnKeyMap);
|
|
499
|
+
});
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Check if has related filters of given columns
|
|
504
|
+
* @param {array} filters
|
|
505
|
+
* @param {object} updatedColumnKeyMap e.g. { [column.key]: true }
|
|
506
|
+
* @returns bool
|
|
507
|
+
*/
|
|
508
|
+
var hasRelatedFilters = function hasRelatedFilters(filters, columnKeyMap) {
|
|
509
|
+
return filters.some(function (filter) {
|
|
510
|
+
return checkIsFilterGroup(filter) ? checkIsRelatedFilterGroup(filter, columnKeyMap) : checkIsRelatedFilter(filter, columnKeyMap);
|
|
511
|
+
});
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
export { checkHasFormulaFilter, checkIsAvailableFilter, checkIsFilterGroup, checkIsFormulaFilter, checkIsRelatedFilter, checkIsRelatedFilterGroup, deleteInvalidFilter, getClassifiedFilters, _getFormattedFilter as getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, hasRelatedFilters, 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';
|
|
@@ -137,7 +137,7 @@ var getFilterResult = function getFilterResult(row, filter, _ref) {
|
|
|
137
137
|
* @param {object} userDepartmentIdsMap e.g. { current_user_department_ids: [8, 10], current_user_department_and_sub_ids: [8, 10, 12, 34] }
|
|
138
138
|
* @returns filter result, bool
|
|
139
139
|
*/
|
|
140
|
-
var
|
|
140
|
+
var _filterRow = function filterRow(row, filterConjunction, filters) {
|
|
141
141
|
var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
|
|
142
142
|
formulaRow = _ref2.formulaRow,
|
|
143
143
|
_ref2$username = _ref2.username,
|
|
@@ -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,
|
|
@@ -189,7 +205,7 @@ var filterRows = function filterRows(filterConjunction, filters, rows, _ref3) {
|
|
|
189
205
|
rows.forEach(function (row) {
|
|
190
206
|
var rowId = row._id;
|
|
191
207
|
var formulaRow = formulaRows ? formulaRows[rowId] : null;
|
|
192
|
-
if (
|
|
208
|
+
if (_filterRow(row, filterConjunction, formattedFilters, {
|
|
193
209
|
formulaRow: formulaRow,
|
|
194
210
|
username: username,
|
|
195
211
|
userId: userId,
|
|
@@ -253,4 +269,4 @@ var getFilteredRowsWithoutFormulaCalculation = function getFilteredRowsWithoutFo
|
|
|
253
269
|
};
|
|
254
270
|
};
|
|
255
271
|
|
|
256
|
-
export { filterRow, filterRows, getFilteredRowsWithoutFormulaCalculation };
|
|
272
|
+
export { _filterRow as filterRow, filterRows, getFilteredRowsWithoutFormulaCalculation };
|
package/es/index.js
CHANGED
|
@@ -57,7 +57,7 @@ export { searchCollaborators } from './search.js';
|
|
|
57
57
|
export { ValidateFilter } from './validate/filter.js';
|
|
58
58
|
export { isValidEmail } from './validate/email.js';
|
|
59
59
|
export { isValidPosition } from './validate/geolocation.js';
|
|
60
|
-
export { deleteInvalidFilter, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, otherDate } from './filter/core.js';
|
|
60
|
+
export { checkHasFormulaFilter, checkIsFilterGroup, checkIsRelatedFilter, deleteInvalidFilter, getClassifiedFilters, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, hasRelatedFilters, otherDate } from './filter/core.js';
|
|
61
61
|
export { checkboxFilter } from './filter/filter-column/checkbox.js';
|
|
62
62
|
export { collaboratorFilter } from './filter/filter-column/collaborator.js';
|
|
63
63
|
export { creatorFilter } from './filter/filter-column/creator.js';
|
package/es/link/core.js
CHANGED
|
@@ -61,23 +61,30 @@ var getLinkedTableID = function getLinkedTableID(currentTableID, tableID, otherT
|
|
|
61
61
|
/**
|
|
62
62
|
* Get linked rows ids by the given row id
|
|
63
63
|
* @param {array} links e.g. [ { _id, table1_id, table2_id, table1_table2_map, table2_table1_map, ... }, ... ]
|
|
64
|
-
* @param {string}
|
|
65
|
-
* @param {string}
|
|
66
|
-
* @param {string}
|
|
67
|
-
* @param {string}
|
|
64
|
+
* @param {string} link_id
|
|
65
|
+
* @param {string} table1_id
|
|
66
|
+
* @param {string} table2_id
|
|
67
|
+
* @param {string} row_id
|
|
68
|
+
* @param {boolean} is_linked_back, determine the self-link column which use 'table1_table2_map'
|
|
68
69
|
* @returns linked rows ids, array
|
|
69
70
|
*/
|
|
70
|
-
var getLinkCellValue = function getLinkCellValue(
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
var getLinkCellValue = function getLinkCellValue(_ref) {
|
|
72
|
+
var links = _ref.links,
|
|
73
|
+
link_id = _ref.link_id,
|
|
74
|
+
table1_id = _ref.table1_id,
|
|
75
|
+
table2_id = _ref.table2_id,
|
|
76
|
+
row_id = _ref.row_id,
|
|
77
|
+
is_linked_back = _ref.is_linked_back;
|
|
78
|
+
if (!Array.isArray(links) || links.length === 0 || !table1_id || !table2_id || !row_id) return [];
|
|
79
|
+
var linkBetween2Tables = getLinkById(links, link_id);
|
|
73
80
|
if (!linkBetween2Tables) return [];
|
|
74
81
|
var linkMap = {};
|
|
75
|
-
if (
|
|
76
|
-
linkMap = linkBetween2Tables.table2_table1_map;
|
|
82
|
+
if (table1_id === table2_id) {
|
|
83
|
+
linkMap = is_linked_back ? linkBetween2Tables.table1_table2_map : linkBetween2Tables.table2_table1_map;
|
|
77
84
|
} else {
|
|
78
|
-
linkMap = linkBetween2Tables.table1_id ===
|
|
85
|
+
linkMap = linkBetween2Tables.table1_id === table1_id ? linkBetween2Tables.table1_table2_map : linkBetween2Tables.table2_table1_map;
|
|
79
86
|
}
|
|
80
|
-
var linkedRowIds = linkMap[
|
|
87
|
+
var linkedRowIds = linkMap[row_id];
|
|
81
88
|
if (!linkedRowIds) {
|
|
82
89
|
return [];
|
|
83
90
|
}
|
|
@@ -94,21 +101,29 @@ var getTableLinkRows = function getTableLinkRows(operateRows, table, value) {
|
|
|
94
101
|
linkColumns.forEach(function (column) {
|
|
95
102
|
var key = column.key,
|
|
96
103
|
data = column.data;
|
|
97
|
-
var
|
|
98
|
-
link_id =
|
|
99
|
-
table_id =
|
|
100
|
-
other_table_id =
|
|
104
|
+
var _ref2 = data || {},
|
|
105
|
+
link_id = _ref2.link_id,
|
|
106
|
+
table_id = _ref2.table_id,
|
|
107
|
+
other_table_id = _ref2.other_table_id,
|
|
108
|
+
is_linked_back = _ref2.is_linked_back;
|
|
101
109
|
var linkedTableId = currentTableId === table_id ? other_table_id : table_id;
|
|
102
110
|
var linkedTable = getTableById(tables, linkedTableId);
|
|
103
111
|
rows.forEach(function (row) {
|
|
104
|
-
var
|
|
105
|
-
var linkedRowIds = linkedTable && getLinkCellValue(
|
|
112
|
+
var row_id = row._id;
|
|
113
|
+
var linkedRowIds = linkedTable && getLinkCellValue({
|
|
114
|
+
links: links,
|
|
115
|
+
link_id: link_id,
|
|
116
|
+
table1_id: currentTableId,
|
|
117
|
+
table2_id: linkedTableId,
|
|
118
|
+
row_id: row_id,
|
|
119
|
+
is_linked_back: is_linked_back
|
|
120
|
+
}) || [];
|
|
106
121
|
|
|
107
122
|
// Handle the linked row has been deleted, but link still exists
|
|
108
123
|
linkedRowIds = linkedRowIds.filter(function (linkedRowId) {
|
|
109
124
|
return linkedTable.id_row_map[linkedRowId];
|
|
110
125
|
});
|
|
111
|
-
linkRows[
|
|
126
|
+
linkRows[row_id] = _objectSpread(_objectSpread({}, linkRows[row_id]), {}, _defineProperty({}, key, linkedRowIds));
|
|
112
127
|
});
|
|
113
128
|
});
|
|
114
129
|
return linkRows;
|