dtable-utils 5.0.7 → 5.0.8

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.
@@ -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
- var filter2SqlCondition = function filter2SqlCondition(table, view, username, userId, userDepartmentIdsMap) {
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 = filters.map(function (filterItem) {
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
- filterContent += " ".concat(filter_conjunction, " (").concat(stringList[i], ")");
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;
@@ -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
- return filters.filter(function (filter$1) {
46
- var _ValidateFilter$valid = filter.ValidateFilter.validate(filter$1, columns),
47
- error_message = _ValidateFilter$valid.error_message;
48
- return !error_message || error_message !== index.FILTER_ERR_MSG.INCOMPLETE_FILTER;
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$1) {
327
- var column_key = filter$1.column_key;
328
- var _ValidateFilter$valid2 = filter.ValidateFilter.validate(filter$1, columns),
329
- error_message = _ValidateFilter$valid2.error_message;
330
- if (error_message) {
331
- if (error_message !== index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
332
- throw new Error(error_message);
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 filterColumn = columns.find(function (column) {
336
- return column.key === column_key;
337
- });
338
- var newFilter = _objectSpread(_objectSpread({}, filter$1), {}, {
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;
@@ -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 filterRow = function filterRow(row, filterConjunction, filters) {
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 (filterRow(row, filterConjunction, formattedFilters, {
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 = 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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dtable-utils",
3
- "version": "5.0.7",
3
+ "version": "5.0.8",
4
4
  "description": "dtable common utils",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./es/index.js",