dtable-utils 5.0.3 → 5.0.5-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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,15 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
17
18
  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
19
  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
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
+ };
20
30
  var isCurrentUserDepartment = function isCurrentUserDepartment(departmentId, userDepartmentIdsMap) {
21
31
  var _ref = userDepartmentIdsMap || {},
22
32
  current_user_department_ids = _ref.current_user_department_ids;
@@ -32,9 +42,24 @@ var isSpecificDepartment = function isSpecificDepartment(departmentId, filterTer
32
42
  return filterTerm.includes(departmentId);
33
43
  };
34
44
 
45
+ /**
46
+ * Check if the filter is available to display
47
+ * @param {object} filter
48
+ * @param {array} columns
49
+ * @returns bool
50
+ */
51
+ var checkIsAvailableFilter = function checkIsAvailableFilter(filter$1, columns) {
52
+ var _ValidateFilter$valid = filter.ValidateFilter.validate(filter$1, columns),
53
+ error_message = _ValidateFilter$valid.error_message;
54
+ if (error_message && error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
55
+ return false;
56
+ }
57
+ return true;
58
+ };
59
+
35
60
  /**
36
61
  * Get filters which excludes incomplete
37
- * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
62
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }, { filters: [...]}]
38
63
  * @param {array} columns
39
64
  * @returns valid filters, array
40
65
  */
@@ -42,11 +67,24 @@ var getValidFilters = function getValidFilters(filters, columns) {
42
67
  if (!Array.isArray(filters) || !Array.isArray(columns)) {
43
68
  return [];
44
69
  }
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;
70
+ var availableFilters = [];
71
+ filters.forEach(function (filter) {
72
+ if (checkIsFilterGroup(filter)) {
73
+ var subFilters = filter.filters;
74
+ var availableSubFilters = [];
75
+ if (Array.isArray(subFilters) && subFilters.length > 0) {
76
+ availableSubFilters = subFilters.filter(function (subFilter) {
77
+ return checkIsAvailableFilter(subFilter, columns);
78
+ });
79
+ }
80
+ availableFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
81
+ filters: availableSubFilters
82
+ }));
83
+ } else if (checkIsAvailableFilter(filter, columns)) {
84
+ availableFilters.push(filter);
85
+ }
49
86
  });
87
+ return availableFilters;
50
88
  };
51
89
 
52
90
  /**
@@ -308,9 +346,37 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
308
346
  */
309
347
  var getFormattedFilters = function getFormattedFilters(filters) {
310
348
  return filters.map(function (filter) {
349
+ if (checkIsFilterGroup(filter)) {
350
+ var subFilters = filter.filters;
351
+ var formattedSubFilters = [];
352
+ if (Array.isArray(subFilters) && subFilters.length > 0) {
353
+ formattedSubFilters = subFilters.map(function (subFilter) {
354
+ return getFormattedFilter(subFilter, subFilter.column);
355
+ });
356
+ }
357
+ return _objectSpread(_objectSpread({}, filter), {}, {
358
+ filters: formattedSubFilters
359
+ });
360
+ }
311
361
  return getFormattedFilter(filter, filter.column);
312
362
  });
313
363
  };
364
+ var checkFilter = function checkFilter(filter$1, columns) {
365
+ var _ValidateFilter$valid2 = filter.ValidateFilter.validate(filter$1, columns),
366
+ error_message = _ValidateFilter$valid2.error_message;
367
+ if (error_message) {
368
+ if (error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
369
+ return null;
370
+ }
371
+ throw new Error(error_message);
372
+ }
373
+ var newFilter = _objectSpread({}, filter$1);
374
+ var column_key = filter$1.column_key;
375
+ newFilter.column = columns.find(function (column) {
376
+ return column.key === column_key;
377
+ });
378
+ return newFilter;
379
+ };
314
380
 
315
381
  /**
316
382
  * Get filters without error messages and formatted with filter column
@@ -323,27 +389,37 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
323
389
  return [];
324
390
  }
325
391
  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);
392
+ filters.forEach(function (filter) {
393
+ if (checkIsFilterGroup(filter)) {
394
+ var subFilters = filter.filters;
395
+ if (Array.isArray(subFilters) && subFilters.length > 0) {
396
+ var cleanSubFilters = [];
397
+ subFilters.forEach(function (subFilter) {
398
+ var newSubFilter = checkFilter(subFilter, columns);
399
+ if (newSubFilter) {
400
+ cleanSubFilters.push(newSubFilter);
401
+ }
402
+ });
403
+
404
+ // just keep the filter group which has valid sub-filters
405
+ if (cleanSubFilters.length > 0) {
406
+ cleanFilters.push(_objectSpread(_objectSpread({}, filter), {}, {
407
+ filters: cleanSubFilters
408
+ }));
409
+ }
333
410
  }
334
411
  } 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);
412
+ var newFilter = checkFilter(filter, columns);
413
+ if (newFilter) {
414
+ cleanFilters.push(newFilter);
415
+ }
342
416
  }
343
417
  });
344
418
  return cleanFilters;
345
419
  };
346
420
 
421
+ exports.checkIsAvailableFilter = checkIsAvailableFilter;
422
+ exports.checkIsFilterGroup = checkIsFilterGroup;
347
423
  exports.deleteInvalidFilter = deleteInvalidFilter;
348
424
  exports.getFormattedFilter = getFormattedFilter;
349
425
  exports.getFormattedFilterOtherDate = getFormattedFilterOtherDate;
@@ -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,
@@ -112,6 +112,13 @@ var convertRow = function convertRow(row, value, table, view, formulaResults, co
112
112
  result[columnName] = optionNames;
113
113
  break;
114
114
  }
115
+ case cellType.CellType.DATE:
116
+ {
117
+ var timeTextWithoutTimezone = cellValue$1.replace(/([+-]\d{2}:?\d{2})|Z$/g, '');
118
+ var format = column.data && column.data.format;
119
+ result[columnName] = date.formatTextToDate(timeTextWithoutTimezone, format);
120
+ break;
121
+ }
115
122
  case cellType.CellType.LONG_TEXT:
116
123
  {
117
124
  result[columnName] = cellValue$1 ? cellValue$1.text : '';
@@ -181,7 +188,7 @@ var convertRow = function convertRow(row, value, table, view, formulaResults, co
181
188
  // file/image/button/
182
189
  // translate in dtable-events
183
190
  // number/
184
- // date/ctime/mtime/
191
+ // ctime/mtime/
185
192
  // geolocation/
186
193
  // collaborator/creator/last-modifier/
187
194
  result[columnName] = cellValue$1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dtable-utils",
3
- "version": "5.0.3",
3
+ "version": "5.0.5-beta.1",
4
4
  "description": "dtable common utils",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./es/index.js",