dtable-utils 4.4.3-alpha2 → 4.4.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -378,6 +378,50 @@ var departmentSingleSelectSqlCondition = function departmentSingleSelectSqlCondi
378
378
  }
379
379
  return '';
380
380
  };
381
+ var departmentMultipleSelectSqlCondition = function departmentMultipleSelectSqlCondition(column, filterItem) {
382
+ var _ref2;
383
+ var patchedUserDepartmentIdsMap = PatchUtils.getUserDepartmentIdsMap(userDepartmentIdsMap);
384
+ var filterPredicate = filterItem.filter_predicate,
385
+ filterTerm = filterItem.filter_term;
386
+ var name = column.name;
387
+ if (filterPredicate === FILTER_PREDICATE_TYPE.NOT_EMPTY) {
388
+ return "`".concat(name, "` is not null");
389
+ }
390
+ if (filterPredicate === FILTER_PREDICATE_TYPE.EMPTY) {
391
+ return "`".concat(name, "` is null");
392
+ }
393
+
394
+ // filter_term is invalid
395
+ if (!Array.isArray(filterTerm) || filterTerm.length === 0) {
396
+ return '';
397
+ }
398
+ var _ref = patchedUserDepartmentIdsMap || {},
399
+ current_user_department_ids = _ref.current_user_department_ids,
400
+ current_user_department_and_sub_ids = _ref.current_user_department_and_sub_ids;
401
+ var normalizedFilterTerm = filterTerm;
402
+ normalizedFilterTerm = (_ref2 = []).concat.apply(_ref2, _toConsumableArray(filterTerm.map(function (value) {
403
+ if (value === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT && Array.isArray(current_user_department_ids)) {
404
+ return current_user_department_ids;
405
+ }
406
+ if (value === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB && Array.isArray(current_user_department_and_sub_ids)) {
407
+ return current_user_department_and_sub_ids;
408
+ }
409
+ return value;
410
+ })));
411
+ if (filterPredicate === FILTER_PREDICATE_TYPE.HAS_ANY_OF) {
412
+ return "`".concat(name, "` in (").concat(normalizedFilterTerm.join(', '), ")");
413
+ }
414
+ if (filterPredicate === FILTER_PREDICATE_TYPE.HAS_ALL_OF) {
415
+ return "`".concat(name, "` has all of (").concat(normalizedFilterTerm.join(', '), ")");
416
+ }
417
+ if (filterPredicate === FILTER_PREDICATE_TYPE.HAS_NONE_OF) {
418
+ return "`".concat(name, "` has none of (").concat(normalizedFilterTerm.join(', '), ")");
419
+ }
420
+ if (filterPredicate === FILTER_PREDICATE_TYPE.IS_EXACTLY) {
421
+ return "`".concat(name, "` is exactly (").concat(normalizedFilterTerm.join(', '), ")");
422
+ }
423
+ return '';
424
+ };
381
425
 
382
426
  // MULTIPLE_SELECT
383
427
  var multipleSelectSqlCondition = function multipleSelectSqlCondition(column, filterItem) {
@@ -523,9 +567,9 @@ var arrayColumnCondition = function arrayColumnCondition(column, filterItem) {
523
567
  if (filter_predicate === FILTER_PREDICATE_TYPE.NOT_EMPTY) {
524
568
  return "`".concat(name, "` is not null");
525
569
  }
526
- var _ref = column.data || {},
527
- array_type = _ref.array_type,
528
- array_data = _ref.array_data;
570
+ var _ref3 = column.data || {},
571
+ array_type = _ref3.array_type,
572
+ array_data = _ref3.array_data;
529
573
  if (!array_type) return '';
530
574
 
531
575
  // encapsulate a new column according to the calculation result
@@ -557,6 +601,9 @@ var arrayColumnCondition = function arrayColumnCondition(column, filterItem) {
557
601
  if (array_type === CellType.SINGLE_SELECT) {
558
602
  return multipleSelectSqlCondition(linkedColumn, filterItem);
559
603
  }
604
+ if (array_type === CellType.DEPARTMENT_SINGLE_SELECT) {
605
+ return departmentMultipleSelectSqlCondition(linkedColumn, filterItem);
606
+ }
560
607
  if ([CellType.CREATOR, CellType.LAST_MODIFIER].includes(array_type)) {
561
608
  return collaboratorSqlCondition(linkedColumn, filterItem);
562
609
  }
@@ -572,8 +619,8 @@ var linkSqlCondition = function linkSqlCondition(column, filterItem) {
572
619
 
573
620
  // FORMULA | LINK-FORMULA
574
621
  var formulaSqlCondition = function formulaSqlCondition(column, filterItem) {
575
- var _ref2 = column.data || {},
576
- result_type = _ref2.result_type;
622
+ var _ref4 = column.data || {},
623
+ result_type = _ref4.result_type;
577
624
  if (result_type === FORMULA_RESULT_TYPE.STRING) {
578
625
  // need to change the type of column to text
579
626
  var newColumn = {
package/es/filter/core.js CHANGED
@@ -9,6 +9,20 @@ import { FILTER_TERM_MODIFIER_TYPE } from '../constants/filter/filter-modifier.j
9
9
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
10
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
11
  var EXACT_DATE_TERM_MODIFIER_TYPES = [FILTER_TERM_MODIFIER_TYPE.TODAY, FILTER_TERM_MODIFIER_TYPE.TOMORROW, FILTER_TERM_MODIFIER_TYPE.YESTERDAY, FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_AGO, FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_FROM_NOW, FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_AGO, FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_FROM_NOW, FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_AGO, FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_FROM_NOW, FILTER_TERM_MODIFIER_TYPE.EXACT_DATE];
12
+ var isCurrentUserDepartment = function isCurrentUserDepartment(departmentId, userDepartmentIdsMap) {
13
+ var _ref = userDepartmentIdsMap || {},
14
+ current_user_department_ids = _ref.current_user_department_ids;
15
+ return Array.isArray(current_user_department_ids) && current_user_department_ids.includes(departmentId);
16
+ };
17
+ var isCurrentUserDepartmentAndSub = function isCurrentUserDepartmentAndSub(departmentId, userDepartmentIdsMap) {
18
+ var _ref2 = userDepartmentIdsMap || {},
19
+ current_user_department_and_sub_ids = _ref2.current_user_department_and_sub_ids;
20
+ return Array.isArray(current_user_department_and_sub_ids) && current_user_department_and_sub_ids.includes(departmentId);
21
+ };
22
+ var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTerm) {
23
+ if (typeof departmentId !== 'number') return false;
24
+ return filterTerm.includes(departmentId);
25
+ };
12
26
 
13
27
  /**
14
28
  * Get filters which excludes incomplete
@@ -257,9 +271,9 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
257
271
  }
258
272
  case CellType.LINK:
259
273
  {
260
- var _ref = columnData || {},
261
- _array_type = _ref.array_type,
262
- _array_data = _ref.array_data;
274
+ var _ref3 = columnData || {},
275
+ _array_type = _ref3.array_type,
276
+ _array_data = _ref3.array_data;
263
277
  var _linkedColumn = {
264
278
  type: _array_type,
265
279
  data: _array_data
@@ -322,4 +336,4 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
322
336
  return cleanFilters;
323
337
  };
324
338
 
325
- export { deleteInvalidFilter, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, otherDate };
339
+ export { deleteInvalidFilter, getFormattedFilter, getFormattedFilterOtherDate, getFormattedFilters, getValidFilters, getValidFiltersWithoutError, isCurrentUserDepartment, isCurrentUserDepartmentAndSub, isSpecificDepartment, otherDate };
@@ -5,6 +5,7 @@ import { collaboratorFilter } from './collaborator.js';
5
5
  import { dateFilter } from './date.js';
6
6
  import { textFilter } from './text.js';
7
7
  import { multipleSelectFilter } from './multiple-select.js';
8
+ import { departmentMultipleSelectFilter } from './department-multiple-select.js';
8
9
  import { numberFilter } from './number.js';
9
10
  import { CellType } from '../../constants/cell-type.js';
10
11
  import { DATE_COLUMN_OPTIONS, COLLABORATOR_COLUMN_TYPES } from '../../constants/column.js';
@@ -22,7 +23,8 @@ var TRUE_VALUE = [true, 'true'];
22
23
  */
23
24
  var filterByArrayType = function filterByArrayType(array, filter, _ref) {
24
25
  var username = _ref.username,
25
- userId = _ref.userId;
26
+ userId = _ref.userId,
27
+ userDepartmentIdsMap = _ref.userDepartmentIdsMap;
26
28
  var column = filter.column,
27
29
  linked_column = filter.linked_column;
28
30
  var filter_predicate = filter.filter_predicate;
@@ -56,19 +58,26 @@ var filterByArrayType = function filterByArrayType(array, filter, _ref) {
56
58
  if (linkedColumnType === CellType.MULTIPLE_SELECT) {
57
59
  return multipleSelectFilter(array, filter);
58
60
  }
61
+ if (linkedColumnType === CellType.DEPARTMENT_SINGLE_SELECT) {
62
+ var _normalizedArray2 = array;
63
+ if (array && !Array.isArray(array)) {
64
+ _normalizedArray2 = [array];
65
+ }
66
+ return departmentMultipleSelectFilter(_normalizedArray2, filter, userDepartmentIdsMap);
67
+ }
59
68
  if (isNumericColumn({
60
69
  type: linkedColumnType
61
70
  })) {
62
- var _normalizedArray2 = array;
71
+ var _normalizedArray3 = array;
63
72
  if (Array.isArray(array)) {
64
73
  var cellValueLength = array.length;
65
74
  if (cellValueLength === 0) {
66
- _normalizedArray2 = '';
75
+ _normalizedArray3 = '';
67
76
  } else if (cellValueLength === 1) {
68
- _normalizedArray2 = array[0];
77
+ _normalizedArray3 = array[0];
69
78
  }
70
79
  }
71
- return numberFilter(_normalizedArray2, filter);
80
+ return numberFilter(_normalizedArray3, filter);
72
81
  }
73
82
  if (DATE_COLUMN_OPTIONS.includes(linkedColumnType)) {
74
83
  var newCellValue = array;
@@ -0,0 +1,117 @@
1
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
2
+ import { DEPARTMENT_SELECT_RANGE_MAP } from '../../constants/column.js';
3
+ import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
4
+ import { isCurrentUserDepartmentAndSub, isSpecificDepartment, isCurrentUserDepartment } from '../core.js';
5
+
6
+ /**
7
+ * Filter multiple-select
8
+ * @param {array} departmentIds e.g. [ 14, ... ]
9
+ * @param {string} filter_predicate
10
+ * @param {array} filter_term department ids
11
+ * @param {object} userDepartmentIdsMap
12
+ * @returns bool
13
+ */
14
+ var departmentMultipleSelectFilter = function departmentMultipleSelectFilter(departmentIds, _ref, userDepartmentIdsMap) {
15
+ var filter_predicate = _ref.filter_predicate,
16
+ filter_term = _ref.filter_term;
17
+ switch (filter_predicate) {
18
+ case FILTER_PREDICATE_TYPE.HAS_ANY_OF:
19
+ {
20
+ if (filter_term.length === 0) return true;
21
+ if (!Array.isArray(departmentIds)) return false;
22
+ // CURRENT_USER_DEPARTMENT is a subset of CURRENT_USER_DEPARTMENT_AND_SUB, so it is necessary to first determine CURRENT_USER_DEPARTMENT_AND_SUB.
23
+ if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
24
+ return departmentIds.some(function (id) {
25
+ return isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) || isSpecificDepartment(id, filter_term);
26
+ });
27
+ }
28
+ if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
29
+ return departmentIds.some(function (id) {
30
+ return isCurrentUserDepartment(id, userDepartmentIdsMap) || isSpecificDepartment(id, filter_term);
31
+ });
32
+ }
33
+ return departmentIds.some(function (id) {
34
+ return isSpecificDepartment(id, filter_term);
35
+ });
36
+ }
37
+ case FILTER_PREDICATE_TYPE.HAS_ALL_OF:
38
+ {
39
+ if (filter_term.length === 0) return true;
40
+ if (!Array.isArray(departmentIds)) return false;
41
+ var _ref2 = userDepartmentIdsMap || {},
42
+ current_user_department_and_sub_ids = _ref2.current_user_department_and_sub_ids,
43
+ current_user_department_ids = _ref2.current_user_department_ids;
44
+ if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
45
+ if (Array.isArray(current_user_department_and_sub_ids) && !current_user_department_and_sub_ids.every(function (id) {
46
+ return departmentIds.includes(id);
47
+ })) return false;
48
+ } else if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
49
+ if (Array.isArray(current_user_department_ids) && !current_user_department_ids.every(function (id) {
50
+ return departmentIds.includes(id);
51
+ })) return false;
52
+ }
53
+ return filter_term.every(function (id) {
54
+ return id === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT || id === DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB || isSpecificDepartment(id, departmentIds);
55
+ });
56
+ }
57
+ case FILTER_PREDICATE_TYPE.HAS_NONE_OF:
58
+ {
59
+ if (filter_term.length === 0 || !Array.isArray(departmentIds) || departmentIds.length === 0) {
60
+ return true;
61
+ }
62
+ if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
63
+ return departmentIds.every(function (id) {
64
+ return !isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) && !isSpecificDepartment(id, filter_term);
65
+ });
66
+ }
67
+ if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
68
+ return departmentIds.every(function (id) {
69
+ return !isCurrentUserDepartment(id, userDepartmentIdsMap) && !isSpecificDepartment(id, filter_term);
70
+ });
71
+ }
72
+ return filter_term.every(function (departmentId) {
73
+ return !isSpecificDepartment(departmentId, departmentIds);
74
+ });
75
+ }
76
+ case FILTER_PREDICATE_TYPE.IS_EXACTLY:
77
+ {
78
+ if (filter_term.length === 0) return true;
79
+ if (!Array.isArray(departmentIds)) return false;
80
+ var normalizedFilterTerm = filter_term.slice(0);
81
+ if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB)) {
82
+ var index = normalizedFilterTerm.indexOf(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB);
83
+ var _ref3 = userDepartmentIdsMap || {},
84
+ _current_user_department_and_sub_ids = _ref3.current_user_department_and_sub_ids;
85
+ if (Array.isArray(_current_user_department_and_sub_ids)) {
86
+ normalizedFilterTerm.splice.apply(normalizedFilterTerm, [index, 1].concat(_toConsumableArray(_current_user_department_and_sub_ids)));
87
+ }
88
+ }
89
+ if (filter_term.includes(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT)) {
90
+ var _index = normalizedFilterTerm.indexOf(DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT);
91
+ var _ref4 = userDepartmentIdsMap || {},
92
+ _current_user_department_ids = _ref4.current_user_department_ids;
93
+ if (Array.isArray(_current_user_department_ids)) {
94
+ normalizedFilterTerm.splice.apply(normalizedFilterTerm, [_index, 1].concat(_toConsumableArray(_current_user_department_ids)));
95
+ }
96
+ }
97
+ var uniqueArr = function uniqueArr(arr) {
98
+ return _toConsumableArray(new Set(arr)).sort();
99
+ };
100
+ return uniqueArr(departmentIds).toString() === uniqueArr(normalizedFilterTerm).toString();
101
+ }
102
+ case FILTER_PREDICATE_TYPE.EMPTY:
103
+ {
104
+ return !Array.isArray(departmentIds) || departmentIds.length === 0;
105
+ }
106
+ case FILTER_PREDICATE_TYPE.NOT_EMPTY:
107
+ {
108
+ return Array.isArray(departmentIds) && departmentIds.length > 0;
109
+ }
110
+ default:
111
+ {
112
+ return false;
113
+ }
114
+ }
115
+ };
116
+
117
+ export { departmentMultipleSelectFilter };
@@ -1,20 +1,6 @@
1
1
  import { DEPARTMENT_SELECT_RANGE_MAP } from '../../constants/column.js';
2
2
  import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
3
-
4
- var isCurrentUserDepartment = function isCurrentUserDepartment(id, userDepartmentIdsMap) {
5
- var currentUserDepartmentIds = userDepartmentIdsMap && userDepartmentIdsMap.current_user_department_ids;
6
- if (!Array.isArray(currentUserDepartmentIds)) return false;
7
- return currentUserDepartmentIds.includes(id);
8
- };
9
- var isCurrentUserDepartmentAndSub = function isCurrentUserDepartmentAndSub(id, userDepartmentIdsMap) {
10
- var currentUserDepartmentAndSubIds = userDepartmentIdsMap && userDepartmentIdsMap.current_user_department_and_sub_ids;
11
- if (!Array.isArray(currentUserDepartmentAndSubIds)) return false;
12
- return currentUserDepartmentAndSubIds.includes(id);
13
- };
14
- var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTerm) {
15
- if (typeof departmentId !== 'number') return false;
16
- return filterTerm.includes(departmentId);
17
- };
3
+ import { isCurrentUserDepartmentAndSub, isSpecificDepartment, isCurrentUserDepartment } from '../core.js';
18
4
 
19
5
  /**
20
6
  * Filter department-single-select
@@ -16,7 +16,8 @@ import { FORMULA_RESULT_TYPE } from '../../constants/formula.js';
16
16
  */
17
17
  var formulaFilter = function formulaFilter(computedValue, filter, _ref) {
18
18
  var username = _ref.username,
19
- userId = _ref.userId;
19
+ userId = _ref.userId,
20
+ userDepartmentIdsMap = _ref.userDepartmentIdsMap;
20
21
  var data = filter.column.data;
21
22
  var _ref2 = data || {},
22
23
  result_type = _ref2.result_type;
@@ -43,7 +44,8 @@ var formulaFilter = function formulaFilter(computedValue, filter, _ref) {
43
44
  {
44
45
  return filterByArrayType(computedValue, filter, {
45
46
  username: username,
46
- userId: userId
47
+ userId: userId,
48
+ userDepartmentIdsMap: userDepartmentIdsMap
47
49
  });
48
50
  }
49
51
  default:
@@ -10,10 +10,12 @@ import { filterByArrayType } from './array.js';
10
10
  */
11
11
  var linkFilter = function linkFilter(linkedCellValues, filter, _ref) {
12
12
  var username = _ref.username,
13
- userId = _ref.userId;
13
+ userId = _ref.userId,
14
+ userDepartmentIdsMap = _ref.userDepartmentIdsMap;
14
15
  return filterByArrayType(linkedCellValues, filter, {
15
16
  username: username,
16
- userId: userId
17
+ userId: userId,
18
+ userDepartmentIdsMap: userDepartmentIdsMap
17
19
  });
18
20
  };
19
21
 
@@ -14,10 +14,12 @@ import { numberFilter } from './filter-column/number.js';
14
14
  import { singleSelectFilter } from './filter-column/single-select.js';
15
15
  import { linkFilter } from './filter-column/link.js';
16
16
  import { departmentSingleSelectFilter } from './filter-column/department-single-select.js';
17
+ import '@babel/runtime/helpers/toConsumableArray';
18
+ import { DATE_FORMAT_MAP } from '../constants/column.js';
19
+ import '../constants/filter/filter-predicate.js';
17
20
  import { FILTER_CONJUNCTION_TYPE } from '../constants/filter/index.js';
18
21
  import { DateUtils } from '../date.js';
19
22
  import { CellType } from '../constants/cell-type.js';
20
- import { DATE_FORMAT_MAP } from '../constants/column.js';
21
23
 
22
24
  var getFilterResult = function getFilterResult(row, filter, _ref) {
23
25
  var formulaRow = _ref.formulaRow,
@@ -95,7 +97,8 @@ var getFilterResult = function getFilterResult(row, filter, _ref) {
95
97
  cellValue = formulaRow[column_key];
96
98
  return formulaFilter(cellValue, filter, {
97
99
  username: username,
98
- userId: userId
100
+ userId: userId,
101
+ userDepartmentIdsMap: userDepartmentIdsMap
99
102
  });
100
103
  }
101
104
  case CellType.LINK:
@@ -106,7 +109,8 @@ var getFilterResult = function getFilterResult(row, filter, _ref) {
106
109
  }) : null;
107
110
  return linkFilter(cellValue, filter, {
108
111
  username: username,
109
- userId: userId
112
+ userId: userId,
113
+ userDepartmentIdsMap: userDepartmentIdsMap
110
114
  });
111
115
  }
112
116
  case CellType.DIGITAL_SIGN:
package/es/index.js CHANGED
@@ -73,6 +73,7 @@ export { numberFilter } from './filter/filter-column/number.js';
73
73
  export { singleSelectFilter } from './filter/filter-column/single-select.js';
74
74
  export { linkFilter } from './filter/filter-column/link.js';
75
75
  export { FILTER_PREDICATE_SHOW, FILTER_PREDICATE_TYPE } from './constants/filter/filter-predicate.js';
76
+ import '@babel/runtime/helpers/toConsumableArray';
76
77
  export { filterRow, filterRows, getFilteredRowsWithoutFormulaCalculation } from './filter/filter-row.js';
77
78
  export { deleteInvalidSort, getMultipleIndexesOrderbyOptions, getValidSorts, isValidSort } from './sort/core.js';
78
79
  export { sortCheckbox } from './sort/sort-column/checkbox.js';
@@ -176,7 +176,7 @@ var ValidateFilter = /*#__PURE__*/function () {
176
176
  if (CHECK_EMPTY_PREDICATES.includes(predicate)) {
177
177
  return true;
178
178
  }
179
- if (array_type === CellType.SINGLE_SELECT) {
179
+ if (array_type === CellType.SINGLE_SELECT || array_type === CellType.DEPARTMENT_SINGLE_SELECT) {
180
180
  return this.validatePredicate(predicate, {
181
181
  type: CellType.MULTIPLE_SELECT
182
182
  });
@@ -421,6 +421,9 @@ var ValidateFilter = /*#__PURE__*/function () {
421
421
  data: array_data
422
422
  });
423
423
  }
424
+ if (array_type === CellType.DEPARTMENT_SINGLE_SELECT) {
425
+ return this.isValidTermType(term, TERM_TYPE_MAP.ARRAY);
426
+ }
424
427
  if (COLLABORATOR_COLUMN_TYPES.includes(array_type)) {
425
428
  return this.isValidTerm(term, predicate, modifier, {
426
429
  type: CellType.COLLABORATOR
@@ -388,6 +388,50 @@ var departmentSingleSelectSqlCondition = function departmentSingleSelectSqlCondi
388
388
  }
389
389
  return '';
390
390
  };
391
+ var departmentMultipleSelectSqlCondition = function departmentMultipleSelectSqlCondition(column$1, filterItem) {
392
+ var _ref2;
393
+ var patchedUserDepartmentIdsMap = patchUtils["default"].getUserDepartmentIdsMap(userDepartmentIdsMap);
394
+ var filterPredicate$1 = filterItem.filter_predicate,
395
+ filterTerm = filterItem.filter_term;
396
+ var name = column$1.name;
397
+ if (filterPredicate$1 === filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY) {
398
+ return "`".concat(name, "` is not null");
399
+ }
400
+ if (filterPredicate$1 === filterPredicate.FILTER_PREDICATE_TYPE.EMPTY) {
401
+ return "`".concat(name, "` is null");
402
+ }
403
+
404
+ // filter_term is invalid
405
+ if (!Array.isArray(filterTerm) || filterTerm.length === 0) {
406
+ return '';
407
+ }
408
+ var _ref = patchedUserDepartmentIdsMap || {},
409
+ current_user_department_ids = _ref.current_user_department_ids,
410
+ current_user_department_and_sub_ids = _ref.current_user_department_and_sub_ids;
411
+ var normalizedFilterTerm = filterTerm;
412
+ normalizedFilterTerm = (_ref2 = []).concat.apply(_ref2, _toConsumableArray__default["default"](filterTerm.map(function (value) {
413
+ if (value === column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT && Array.isArray(current_user_department_ids)) {
414
+ return current_user_department_ids;
415
+ }
416
+ if (value === column.DEPARTMENT_SELECT_RANGE_MAP.CURRENT_USER_DEPARTMENT_AND_SUB && Array.isArray(current_user_department_and_sub_ids)) {
417
+ return current_user_department_and_sub_ids;
418
+ }
419
+ return value;
420
+ })));
421
+ if (filterPredicate$1 === filterPredicate.FILTER_PREDICATE_TYPE.HAS_ANY_OF) {
422
+ return "`".concat(name, "` in (").concat(normalizedFilterTerm.join(', '), ")");
423
+ }
424
+ if (filterPredicate$1 === filterPredicate.FILTER_PREDICATE_TYPE.HAS_ALL_OF) {
425
+ return "`".concat(name, "` has all of (").concat(normalizedFilterTerm.join(', '), ")");
426
+ }
427
+ if (filterPredicate$1 === filterPredicate.FILTER_PREDICATE_TYPE.HAS_NONE_OF) {
428
+ return "`".concat(name, "` has none of (").concat(normalizedFilterTerm.join(', '), ")");
429
+ }
430
+ if (filterPredicate$1 === filterPredicate.FILTER_PREDICATE_TYPE.IS_EXACTLY) {
431
+ return "`".concat(name, "` is exactly (").concat(normalizedFilterTerm.join(', '), ")");
432
+ }
433
+ return '';
434
+ };
391
435
 
392
436
  // MULTIPLE_SELECT
393
437
  var multipleSelectSqlCondition = function multipleSelectSqlCondition(column, filterItem) {
@@ -533,9 +577,9 @@ var arrayColumnCondition = function arrayColumnCondition(column, filterItem) {
533
577
  if (filter_predicate === filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY) {
534
578
  return "`".concat(name, "` is not null");
535
579
  }
536
- var _ref = column.data || {},
537
- array_type = _ref.array_type,
538
- array_data = _ref.array_data;
580
+ var _ref3 = column.data || {},
581
+ array_type = _ref3.array_type,
582
+ array_data = _ref3.array_data;
539
583
  if (!array_type) return '';
540
584
 
541
585
  // encapsulate a new column according to the calculation result
@@ -567,6 +611,9 @@ var arrayColumnCondition = function arrayColumnCondition(column, filterItem) {
567
611
  if (array_type === cellType.CellType.SINGLE_SELECT) {
568
612
  return multipleSelectSqlCondition(linkedColumn, filterItem);
569
613
  }
614
+ if (array_type === cellType.CellType.DEPARTMENT_SINGLE_SELECT) {
615
+ return departmentMultipleSelectSqlCondition(linkedColumn, filterItem);
616
+ }
570
617
  if ([cellType.CellType.CREATOR, cellType.CellType.LAST_MODIFIER].includes(array_type)) {
571
618
  return collaboratorSqlCondition(linkedColumn, filterItem);
572
619
  }
@@ -582,8 +629,8 @@ var linkSqlCondition = function linkSqlCondition(column, filterItem) {
582
629
 
583
630
  // FORMULA | LINK-FORMULA
584
631
  var formulaSqlCondition = function formulaSqlCondition(column, filterItem) {
585
- var _ref2 = column.data || {},
586
- result_type = _ref2.result_type;
632
+ var _ref4 = column.data || {},
633
+ result_type = _ref4.result_type;
587
634
  if (result_type === formula.FORMULA_RESULT_TYPE.STRING) {
588
635
  // need to change the type of column to text
589
636
  var newColumn = {
@@ -17,6 +17,20 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
17
17
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
18
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
19
  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];
20
+ var isCurrentUserDepartment = function isCurrentUserDepartment(departmentId, userDepartmentIdsMap) {
21
+ var _ref = userDepartmentIdsMap || {},
22
+ current_user_department_ids = _ref.current_user_department_ids;
23
+ return Array.isArray(current_user_department_ids) && current_user_department_ids.includes(departmentId);
24
+ };
25
+ var isCurrentUserDepartmentAndSub = function isCurrentUserDepartmentAndSub(departmentId, userDepartmentIdsMap) {
26
+ var _ref2 = userDepartmentIdsMap || {},
27
+ current_user_department_and_sub_ids = _ref2.current_user_department_and_sub_ids;
28
+ return Array.isArray(current_user_department_and_sub_ids) && current_user_department_and_sub_ids.includes(departmentId);
29
+ };
30
+ var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTerm) {
31
+ if (typeof departmentId !== 'number') return false;
32
+ return filterTerm.includes(departmentId);
33
+ };
20
34
 
21
35
  /**
22
36
  * Get filters which excludes incomplete
@@ -265,9 +279,9 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
265
279
  }
266
280
  case cellType.CellType.LINK:
267
281
  {
268
- var _ref = columnData || {},
269
- _array_type = _ref.array_type,
270
- _array_data = _ref.array_data;
282
+ var _ref3 = columnData || {},
283
+ _array_type = _ref3.array_type,
284
+ _array_data = _ref3.array_data;
271
285
  var _linkedColumn = {
272
286
  type: _array_type,
273
287
  data: _array_data
@@ -336,4 +350,7 @@ exports.getFormattedFilterOtherDate = getFormattedFilterOtherDate;
336
350
  exports.getFormattedFilters = getFormattedFilters;
337
351
  exports.getValidFilters = getValidFilters;
338
352
  exports.getValidFiltersWithoutError = getValidFiltersWithoutError;
353
+ exports.isCurrentUserDepartment = isCurrentUserDepartment;
354
+ exports.isCurrentUserDepartmentAndSub = isCurrentUserDepartmentAndSub;
355
+ exports.isSpecificDepartment = isSpecificDepartment;
339
356
  exports.otherDate = otherDate;
@@ -9,6 +9,7 @@ var collaborator = require('./collaborator.js');
9
9
  var date = require('./date.js');
10
10
  var text = require('./text.js');
11
11
  var multipleSelect = require('./multiple-select.js');
12
+ var departmentMultipleSelect = require('./department-multiple-select.js');
12
13
  var number$1 = require('./number.js');
13
14
  var cellType = require('../../constants/cell-type.js');
14
15
  var column = require('../../constants/column.js');
@@ -26,7 +27,8 @@ var TRUE_VALUE = [true, 'true'];
26
27
  */
27
28
  var filterByArrayType = function filterByArrayType(array, filter, _ref) {
28
29
  var username = _ref.username,
29
- userId = _ref.userId;
30
+ userId = _ref.userId,
31
+ userDepartmentIdsMap = _ref.userDepartmentIdsMap;
30
32
  var column$1 = filter.column,
31
33
  linked_column = filter.linked_column;
32
34
  var filter_predicate = filter.filter_predicate;
@@ -60,19 +62,26 @@ var filterByArrayType = function filterByArrayType(array, filter, _ref) {
60
62
  if (linkedColumnType === cellType.CellType.MULTIPLE_SELECT) {
61
63
  return multipleSelect.multipleSelectFilter(array, filter);
62
64
  }
65
+ if (linkedColumnType === cellType.CellType.DEPARTMENT_SINGLE_SELECT) {
66
+ var _normalizedArray2 = array;
67
+ if (array && !Array.isArray(array)) {
68
+ _normalizedArray2 = [array];
69
+ }
70
+ return departmentMultipleSelect.departmentMultipleSelectFilter(_normalizedArray2, filter, userDepartmentIdsMap);
71
+ }
63
72
  if (number.isNumericColumn({
64
73
  type: linkedColumnType
65
74
  })) {
66
- var _normalizedArray2 = array;
75
+ var _normalizedArray3 = array;
67
76
  if (Array.isArray(array)) {
68
77
  var cellValueLength = array.length;
69
78
  if (cellValueLength === 0) {
70
- _normalizedArray2 = '';
79
+ _normalizedArray3 = '';
71
80
  } else if (cellValueLength === 1) {
72
- _normalizedArray2 = array[0];
81
+ _normalizedArray3 = array[0];
73
82
  }
74
83
  }
75
- return number$1.numberFilter(_normalizedArray2, filter);
84
+ return number$1.numberFilter(_normalizedArray3, filter);
76
85
  }
77
86
  if (column.DATE_COLUMN_OPTIONS.includes(linkedColumnType)) {
78
87
  var newCellValue = array;