dtable-utils 0.0.3-beta.1 → 0.0.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.
Files changed (115) hide show
  1. package/README.md +12 -3
  2. package/dist/index.js +1 -1
  3. package/es/cell-value-get/cell-value.js +82 -60
  4. package/es/cell-value-get/collaborator.js +9 -2
  5. package/es/cell-value-get/duration.js +3 -3
  6. package/es/cell-value-get/geolocation.js +23 -25
  7. package/es/cell-value-get/number.js +19 -11
  8. package/es/cell-value-get/option.js +18 -4
  9. package/es/cell-value-get/rate.js +5 -0
  10. package/es/cell-value-set/date.js +9 -3
  11. package/es/{column/color.js → color/column-color.js} +25 -3
  12. package/es/{row/color.js → color/row-color.js} +12 -1
  13. package/es/column/option.js +37 -7
  14. package/es/common.js +23 -2
  15. package/es/constants/formula.js +2 -1
  16. package/es/filter/core.js +61 -26
  17. package/es/filter/filter-column/array.js +35 -30
  18. package/es/filter/filter-column/checkbox.js +9 -3
  19. package/es/filter/filter-column/collaborator.js +20 -15
  20. package/es/filter/filter-column/creator.js +22 -13
  21. package/es/filter/filter-column/date.js +57 -14
  22. package/es/filter/filter-column/digital-sign.js +11 -8
  23. package/es/filter/filter-column/file.js +9 -6
  24. package/es/filter/filter-column/formula.js +16 -8
  25. package/es/filter/filter-column/geolocation.js +12 -7
  26. package/es/filter/filter-column/link.js +10 -2
  27. package/es/filter/filter-column/long-text.js +10 -7
  28. package/es/filter/filter-column/multiple-select.js +17 -13
  29. package/es/filter/filter-column/number.js +25 -21
  30. package/es/filter/filter-column/single-select.js +14 -10
  31. package/es/filter/filter-column/text.js +18 -13
  32. package/es/filter/filter-row.js +35 -0
  33. package/es/group/core.js +15 -6
  34. package/es/group/group-row.js +39 -3
  35. package/es/index.js +10 -10
  36. package/es/link/core.js +14 -14
  37. package/es/number.js +11 -3
  38. package/es/row/core.js +20 -1
  39. package/es/sort/core.js +66 -7
  40. package/es/sort/sort-column/array.js +39 -30
  41. package/es/sort/sort-column/checkbox.js +12 -5
  42. package/es/sort/sort-column/collaborator.js +11 -4
  43. package/es/sort/sort-column/date.js +12 -12
  44. package/es/sort/sort-column/formula.js +21 -12
  45. package/es/sort/sort-column/link.js +18 -9
  46. package/es/sort/sort-column/multiple-select.js +26 -26
  47. package/es/sort/sort-column/number.js +15 -8
  48. package/es/sort/sort-column/single-select.js +16 -8
  49. package/es/sort/sort-column/text.js +24 -10
  50. package/es/sort/sort-row.js +22 -38
  51. package/es/table/column.js +2 -2
  52. package/es/table/core.js +2 -2
  53. package/es/table/row.js +4 -4
  54. package/es/view/core.js +20 -21
  55. package/es/view/formula.js +35 -31
  56. package/es/view/group.js +4 -4
  57. package/es/view/summaries.js +17 -29
  58. package/lib/cell-value-get/cell-value.js +82 -60
  59. package/lib/cell-value-get/collaborator.js +9 -2
  60. package/lib/cell-value-get/duration.js +4 -2
  61. package/lib/cell-value-get/geolocation.js +23 -25
  62. package/lib/cell-value-get/number.js +19 -11
  63. package/lib/cell-value-get/option.js +18 -4
  64. package/lib/cell-value-get/rate.js +5 -0
  65. package/lib/cell-value-set/date.js +9 -3
  66. package/lib/{column/color.js → color/column-color.js} +31 -9
  67. package/lib/{row/color.js → color/row-color.js} +12 -1
  68. package/lib/column/option.js +37 -7
  69. package/lib/common.js +23 -1
  70. package/lib/constants/formula.js +2 -0
  71. package/lib/filter/core.js +61 -26
  72. package/lib/filter/filter-column/array.js +35 -30
  73. package/lib/filter/filter-column/checkbox.js +9 -3
  74. package/lib/filter/filter-column/collaborator.js +20 -15
  75. package/lib/filter/filter-column/creator.js +22 -13
  76. package/lib/filter/filter-column/date.js +57 -14
  77. package/lib/filter/filter-column/digital-sign.js +11 -8
  78. package/lib/filter/filter-column/file.js +9 -6
  79. package/lib/filter/filter-column/formula.js +16 -8
  80. package/lib/filter/filter-column/geolocation.js +12 -7
  81. package/lib/filter/filter-column/link.js +10 -2
  82. package/lib/filter/filter-column/long-text.js +10 -7
  83. package/lib/filter/filter-column/multiple-select.js +17 -13
  84. package/lib/filter/filter-column/number.js +25 -21
  85. package/lib/filter/filter-column/single-select.js +14 -10
  86. package/lib/filter/filter-column/text.js +18 -13
  87. package/lib/filter/filter-row.js +35 -0
  88. package/lib/group/core.js +15 -6
  89. package/lib/group/group-row.js +39 -3
  90. package/lib/index.js +47 -45
  91. package/lib/link/core.js +14 -14
  92. package/lib/number.js +11 -3
  93. package/lib/row/core.js +20 -1
  94. package/lib/sort/core.js +71 -6
  95. package/lib/sort/sort-column/array.js +39 -30
  96. package/lib/sort/sort-column/checkbox.js +12 -5
  97. package/lib/sort/sort-column/collaborator.js +11 -4
  98. package/lib/sort/sort-column/date.js +12 -12
  99. package/lib/sort/sort-column/formula.js +21 -12
  100. package/lib/sort/sort-column/link.js +18 -9
  101. package/lib/sort/sort-column/multiple-select.js +25 -26
  102. package/lib/sort/sort-column/number.js +15 -8
  103. package/lib/sort/sort-column/single-select.js +16 -8
  104. package/lib/sort/sort-column/text.js +24 -10
  105. package/lib/sort/sort-row.js +21 -42
  106. package/lib/table/column.js +2 -2
  107. package/lib/table/core.js +2 -2
  108. package/lib/table/row.js +4 -4
  109. package/lib/view/core.js +20 -21
  110. package/lib/view/formula.js +35 -31
  111. package/lib/view/group.js +4 -4
  112. package/lib/view/summaries.js +17 -29
  113. package/package.json +1 -1
  114. package/es/table/index.js +0 -14
  115. package/lib/table/index.js +0 -18
@@ -11,6 +11,12 @@ var getColumnOptions = function getColumnOptions(column) {
11
11
  }
12
12
  return column.data.options;
13
13
  };
14
+
15
+ /**
16
+ * generate unique option id
17
+ * @param {array} options e.g. [{ id, ... }, ...]
18
+ * @returns generated option id, string
19
+ */
14
20
  var generateOptionID = function generateOptionID(options) {
15
21
  if (options.length === 1) return String(Math.floor(Math.random() * Math.pow(10, 6)));
16
22
  var optionID;
@@ -53,22 +59,38 @@ var getRandomOptionColor = function getRandomOptionColor(options) {
53
59
  }
54
60
  return defaultOptions[colorIdx] || defaultOptions[0];
55
61
  };
62
+
63
+ /**
64
+ * generate option
65
+ * @param {array} options e.g. [{ id, ... }, ...]
66
+ * @param {string} optionName
67
+ * @param {string} optionColor used to find system support color options. The new color option will be generated if not found by "optionColor" or not supported
68
+ * @returns generated option, object
69
+ */
56
70
  var createOption = function createOption(options, optionName) {
57
- var selectOptionColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
71
+ var optionColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
58
72
  var id = generateOptionID(options);
59
- var optionColor = selectOptionColor && SELECT_OPTION_COLORS.find(function (item) {
60
- return item.COLOR === selectOptionColor;
73
+ var colors = optionColor && SELECT_OPTION_COLORS.find(function (systemColor) {
74
+ return systemColor.COLOR === optionColor;
61
75
  });
62
- if (!optionColor) {
63
- optionColor = getRandomOptionColor(options);
76
+ if (!colors) {
77
+ colors = getRandomOptionColor(options);
64
78
  }
65
79
  return {
66
80
  id: id,
67
81
  name: optionName,
68
- color: optionColor.COLOR,
69
- textColor: optionColor.TEXT_COLOR
82
+ color: colors.COLOR,
83
+ textColor: colors.TEXT_COLOR
70
84
  };
71
85
  };
86
+
87
+ /**
88
+ * Generate cell option by name.
89
+ * Return the option id if exist, otherwise generate a new option
90
+ * @param {array} options e.g. [{ id, ... }, ...]
91
+ * @param {string} optionName used as the option name
92
+ * @returns option id and option, object
93
+ */
72
94
  var generatorCellOption = function generatorCellOption(options, optionName) {
73
95
  var existOption = options.find(function (option) {
74
96
  return option.name === optionName;
@@ -84,6 +106,14 @@ var generatorCellOption = function generatorCellOption(options, optionName) {
84
106
  selectedOptionId: newOption.id
85
107
  };
86
108
  };
109
+
110
+ /**
111
+ * Generate cell options by names.
112
+ * Return the options ids if exist, otherwise generate new options
113
+ * @param {array} options e.g. [{ id, ... }, ...]
114
+ * @param {array} optionNames used as the options names
115
+ * @returns options ids and options, object
116
+ */
87
117
  var generatorCellOptions = function generatorCellOptions(options, optionNames) {
88
118
  var cellOptions = [];
89
119
  var selectedOptionIds = [];
package/es/common.js CHANGED
@@ -14,12 +14,33 @@ var generatorBase64Code = function generatorBase64Code() {
14
14
  }
15
15
  return key;
16
16
  };
17
+
18
+ /**
19
+ * Check whether the given value is empty
20
+ * @param {any} val
21
+ * @returns bool
22
+ */
17
23
  var isEmpty = function isEmpty(val) {
18
- if (val == null) return true;
24
+ if (val === null || val === undefined) return true;
19
25
  if (val.length !== undefined) return val.length === 0;
20
26
  if (val instanceof Date) return false;
21
27
  if (_typeof(val) === 'object') return Object.keys(val).length === 0;
22
28
  return false;
23
29
  };
24
30
 
25
- export { generatorBase64Code, isEmpty };
31
+ /**
32
+ * Check whether the object is empty.
33
+ * The true will be returned if the "obj" is invalid.
34
+ * @param {object} obj
35
+ * @returns bool
36
+ */
37
+ var isEmptyObject = function isEmptyObject(obj) {
38
+ var name;
39
+ // eslint-disable-next-line
40
+ for (name in obj) {
41
+ return false;
42
+ }
43
+ return true;
44
+ };
45
+
46
+ export { generatorBase64Code, isEmpty, isEmptyObject };
@@ -10,5 +10,6 @@ var FORMULA_RESULT_TYPE = {
10
10
  ARRAY: 'array'
11
11
  };
12
12
  var FORMULA_COLUMN_TYPES_MAP = (_FORMULA_COLUMN_TYPES = {}, _defineProperty(_FORMULA_COLUMN_TYPES, CellType.FORMULA, true), _defineProperty(_FORMULA_COLUMN_TYPES, CellType.LINK_FORMULA, true), _FORMULA_COLUMN_TYPES);
13
+ var DISPLAY_INTERNAL_ERRORS = ['#ERROR!', '#DIV/0!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!', '#VALUE!', '#GETTING_DATA'];
13
14
 
14
- export { FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE };
15
+ export { DISPLAY_INTERNAL_ERRORS, FORMULA_COLUMN_TYPES_MAP, FORMULA_RESULT_TYPE };
package/es/filter/core.js CHANGED
@@ -11,10 +11,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
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
12
 
13
13
  /**
14
- * get filters which excludes incomplete
15
- * @param {array} filters [{ column_key: '', filter_predicate: '' }]
14
+ * Get filters which excludes incomplete
15
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
16
16
  * @param {array} columns
17
- * @returns array
17
+ * @returns valid filters, array
18
18
  */
19
19
  var getValidFilters = function getValidFilters(filters, columns) {
20
20
  if (!Array.isArray(filters) || !Array.isArray(columns)) {
@@ -28,10 +28,10 @@ var getValidFilters = function getValidFilters(filters, columns) {
28
28
  };
29
29
 
30
30
  /**
31
- * get filters without error messages
32
- * @param {array} filters [{ column_key: '', filter_predicate: '' }]
31
+ * Get filters without error messages
32
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
33
33
  * @param {array} columns
34
- * @returns array
34
+ * @returns valid filters, array
35
35
  */
36
36
  var getValidFiltersWithoutError = function getValidFiltersWithoutError(filters, columns) {
37
37
  if (!Array.isArray(filters) || !Array.isArray(columns)) {
@@ -41,13 +41,21 @@ var getValidFiltersWithoutError = function getValidFiltersWithoutError(filters,
41
41
  return !ValidateFilter.validate(filter, columns).error_message;
42
42
  });
43
43
  };
44
+
45
+ /**
46
+ * Generate date for filter
47
+ * @param {string} filterTermModifier
48
+ * @param {any} filterTerm
49
+ * @returns date | date range, object
50
+ */
44
51
  var otherDate = function otherDate(filterTermModifier, filterTerm) {
45
52
  var today = new Date();
46
53
  var year = today.getFullYear();
47
54
  var month = today.getMonth(); // use js month representation: 0 - 11
48
55
  var day = today.getDate();
49
- var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
56
+
50
57
  // 0 1 2 3 4 5 6 7 8 9 10 11
58
+ var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
51
59
  days[1] = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28; // is leap year
52
60
  switch (filterTermModifier) {
53
61
  case FILTER_TERM_MODIFIER_TYPE.TODAY:
@@ -188,19 +196,32 @@ var otherDate = function otherDate(filterTermModifier, filterTerm) {
188
196
  }
189
197
  }
190
198
  };
199
+
200
+ /**
201
+ * Generate formatted date for filter
202
+ * @param {string} filterTermModifier
203
+ * @param {any} filterTerm
204
+ * @returns formatted date | date range, object
205
+ */
191
206
  var getFormattedFilterOtherDate = function getFormattedFilterOtherDate(filterTermModifier, filterTerm) {
192
207
  var _otherDate = otherDate(filterTermModifier, filterTerm);
193
208
  if (EXACT_DATE_TERM_MODIFIER_TYPES.includes(filterTermModifier)) {
194
209
  return DateUtils.format(_otherDate);
195
210
  }
196
- var _ref = _otherDate || {},
197
- startDate = _ref.startDate,
198
- endDate = _ref.endDate;
211
+ var startDate = _otherDate.startDate,
212
+ endDate = _otherDate.endDate;
199
213
  return {
200
- startDate: DateUtils.format(startDate),
201
- endDate: DateUtils.format(endDate)
214
+ startDate: startDate ? DateUtils.format(startDate) : '',
215
+ endDate: endDate ? DateUtils.format(endDate) : ''
202
216
  };
203
217
  };
218
+
219
+ /**
220
+ * Format filter with other_date, linked_column etc.
221
+ * @param {object} filter e.g. { filter_term, filter_term_modifier, ... }
222
+ * @param {object} column
223
+ * @returns formatted filter
224
+ */
204
225
  var getFormattedFilter = function getFormattedFilter(filter, column) {
205
226
  var filter_term = filter.filter_term,
206
227
  filter_term_modifier = filter.filter_term_modifier;
@@ -216,7 +237,8 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
216
237
  array_data = columnData.array_data;
217
238
  if (result_type === FORMULA_RESULT_TYPE.DATE) {
218
239
  formattedFilter.other_date = getFormattedFilterOtherDate(filter_term_modifier, filter_term);
219
- } else if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
240
+ }
241
+ if (result_type === FORMULA_RESULT_TYPE.ARRAY) {
220
242
  var linkedColumn = {
221
243
  type: array_type,
222
244
  data: array_data
@@ -235,9 +257,9 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
235
257
  }
236
258
  case CellType.LINK:
237
259
  {
238
- var _ref2 = columnData || {},
239
- _array_type = _ref2.array_type,
240
- _array_data = _ref2.array_data;
260
+ var _ref = columnData || {},
261
+ _array_type = _ref.array_type,
262
+ _array_data = _ref.array_data;
241
263
  var _linkedColumn = {
242
264
  type: _array_type,
243
265
  data: _array_data
@@ -256,11 +278,24 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
256
278
  }
257
279
  return formattedFilter;
258
280
  };
281
+
282
+ /**
283
+ * Get formatted filters with other_date, linked_column etc.
284
+ * @param {array} filters [{ filter_term, filter_term_modifier, column, ... }]
285
+ * @returns formatted filters, array
286
+ */
259
287
  var getFormattedFilters = function getFormattedFilters(filters) {
260
288
  return filters.map(function (filter) {
261
289
  return getFormattedFilter(filter, filter.column);
262
290
  });
263
291
  };
292
+
293
+ /**
294
+ * Get filters without error messages and formatted with filter column
295
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
296
+ * @param {array} columns
297
+ * @returns filters, array
298
+ */
264
299
  var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
265
300
  var cleanFilters = [];
266
301
  filters.forEach(function (filter) {
@@ -268,18 +303,18 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
268
303
  var _ValidateFilter$valid2 = ValidateFilter.validate(filter, columns),
269
304
  error_message = _ValidateFilter$valid2.error_message;
270
305
  if (error_message) {
271
- if (error_message === FILTER_ERR_MSG.INCOMPLETE_FILTER) {
272
- return;
306
+ if (error_message !== FILTER_ERR_MSG.INCOMPLETE_FILTER) {
307
+ throw new Error(error_message);
273
308
  }
274
- throw new Error(error_message);
309
+ } else {
310
+ var filterColumn = columns.find(function (column) {
311
+ return column.key === column_key;
312
+ });
313
+ var newFilter = _objectSpread(_objectSpread({}, filter), {}, {
314
+ column: filterColumn
315
+ });
316
+ cleanFilters.push(newFilter);
275
317
  }
276
- var filterColumn = columns.find(function (column) {
277
- return column.key === column_key;
278
- });
279
- var newFilter = _objectSpread(_objectSpread({}, filter), {}, {
280
- column: filterColumn
281
- });
282
- cleanFilters.push(newFilter);
283
318
  });
284
319
  return cleanFilters;
285
320
  };
@@ -8,75 +8,80 @@ import { multipleSelectFilter } from './multiple-select.js';
8
8
  import { numberFilter } from './number.js';
9
9
  import { CellType } from '../../constants/cell-type.js';
10
10
  import { DATE_COLUMN_OPTIONS, COLLABORATOR_COLUMN_TYPES } from '../../constants/column.js';
11
- import '../../constants/filter/filter-column-options.js';
12
- import '../../constants/filter/filter-modifier.js';
13
11
  import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
14
- import '../../constants/filter/filter-is-within.js';
15
12
 
16
13
  var TRUE_VALUE = [true, 'true'];
17
- var filterByArrayType = function filterByArrayType(cellValue, filter, _ref) {
14
+
15
+ /**
16
+ * Filter by array type
17
+ * @param {array} array e.g. [ cellValue, ... ]
18
+ * @param {object} filter e.g. { filter_predicate, column, ... }
19
+ * @param {string} username
20
+ * @param {string} userId
21
+ * @returns bool
22
+ */
23
+ var filterByArrayType = function filterByArrayType(array, filter, _ref) {
18
24
  var username = _ref.username,
19
25
  userId = _ref.userId;
20
26
  var column = filter.column,
21
27
  linked_column = filter.linked_column;
22
28
  var filter_predicate = filter.filter_predicate;
23
- if (Array.isArray(cellValue)) {
29
+ if (Array.isArray(array)) {
24
30
  if (filter_predicate === FILTER_PREDICATE_TYPE.EMPTY) {
25
- return cellValue.length === 0;
31
+ return array.length === 0;
26
32
  }
27
33
  if (filter_predicate === FILTER_PREDICATE_TYPE.NOT_EMPTY) {
28
- return cellValue.length > 0;
34
+ return array.length > 0;
29
35
  }
30
36
  }
31
37
  if (!linked_column) {
32
38
  return textFilter('', filter, userId);
33
39
  }
34
- var data = column.data;
35
40
  var linkedColumnType = linked_column.type;
36
41
  if (linkedColumnType === CellType.BOOL || linkedColumnType === CellType.CHECKBOX) {
37
- var normalizedCellValue = cellValue;
38
- if (Array.isArray(cellValue)) {
39
- normalizedCellValue = cellValue[0];
42
+ var normalizedArray = array;
43
+ if (Array.isArray(array)) {
44
+ normalizedArray = array[0];
40
45
  }
41
- normalizedCellValue = TRUE_VALUE.includes(normalizedCellValue);
42
- return checkboxFilter(normalizedCellValue, filter);
46
+ normalizedArray = TRUE_VALUE.includes(normalizedArray);
47
+ return checkboxFilter(normalizedArray, filter);
43
48
  }
44
49
  if (linkedColumnType === CellType.SINGLE_SELECT) {
45
- var _normalizedCellValue = cellValue;
46
- if (cellValue && !Array.isArray(cellValue)) {
47
- _normalizedCellValue = [cellValue];
50
+ var _normalizedArray = array;
51
+ if (array && !Array.isArray(array)) {
52
+ _normalizedArray = [array];
48
53
  }
49
- return multipleSelectFilter(_normalizedCellValue, filter);
54
+ return multipleSelectFilter(_normalizedArray, filter);
50
55
  }
51
56
  if (linkedColumnType === CellType.MULTIPLE_SELECT) {
52
- return multipleSelectFilter(cellValue, filter);
57
+ return multipleSelectFilter(array, filter);
53
58
  }
54
59
  if (isNumericColumn({
55
60
  type: linkedColumnType
56
61
  })) {
57
- var _normalizedCellValue2 = cellValue;
58
- if (Array.isArray(cellValue)) {
59
- var cellValueLength = cellValue.length;
62
+ var _normalizedArray2 = array;
63
+ if (Array.isArray(array)) {
64
+ var cellValueLength = array.length;
60
65
  if (cellValueLength === 0) {
61
- _normalizedCellValue2 = '';
66
+ _normalizedArray2 = '';
62
67
  } else if (cellValueLength === 1) {
63
- _normalizedCellValue2 = cellValue[0];
68
+ _normalizedArray2 = array[0];
64
69
  }
65
70
  }
66
- return numberFilter(_normalizedCellValue2, filter);
71
+ return numberFilter(_normalizedArray2, filter);
67
72
  }
68
73
  if (DATE_COLUMN_OPTIONS.includes(linkedColumnType)) {
69
- var newCellValue = cellValue;
70
- if (Array.isArray(cellValue)) {
71
- newCellValue = String(cellValue);
74
+ var newCellValue = array;
75
+ if (Array.isArray(array)) {
76
+ newCellValue = String(array);
72
77
  }
73
78
  return dateFilter(newCellValue, filter);
74
79
  }
75
80
  if (COLLABORATOR_COLUMN_TYPES.includes(linkedColumnType)) {
76
- return collaboratorFilter(cellValue, filter, username);
81
+ return collaboratorFilter(array, filter, username);
77
82
  }
78
- var sCellValue = getFormulaDisplayString(cellValue, data) || '';
79
- return textFilter(sCellValue, filter, userId);
83
+ var displayString = getFormulaDisplayString(array, column.data) || '';
84
+ return textFilter(displayString, filter, userId);
80
85
  };
81
86
 
82
87
  export { filterByArrayType };
@@ -1,8 +1,14 @@
1
- var checkboxFilter = function checkboxFilter(cellValue, _ref) {
1
+ /**
2
+ * Filter checkbox
3
+ * @param {bool} checked
4
+ * @param {bool} filter_term
5
+ * @returns boolean
6
+ */
7
+ var checkboxFilter = function checkboxFilter(checked, _ref) {
2
8
  var filter_term = _ref.filter_term;
3
9
  var filterTerm = filter_term || false;
4
- var normalizedCellValue = cellValue || false;
5
- return normalizedCellValue === filterTerm;
10
+ var normalizedChecked = checked || false;
11
+ return normalizedChecked === filterTerm;
6
12
  };
7
13
 
8
14
  export { checkboxFilter };
@@ -1,32 +1,37 @@
1
1
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
2
- import '../../constants/filter/filter-column-options.js';
3
- import '../../constants/filter/filter-modifier.js';
4
2
  import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
5
- import '../../constants/filter/filter-is-within.js';
6
3
 
7
- var collaboratorFilter = function collaboratorFilter(cellValue, _ref, username) {
4
+ /**
5
+ * Filter collaborator
6
+ * @param {array} emails e.g. [ collaborator.email, ... ]
7
+ * @param {string} filter_predicate
8
+ * @param {array} filter_term e.g. [ collaborator.email, ... ]
9
+ * @param {string} username
10
+ * @returns bool
11
+ */
12
+ var collaboratorFilter = function collaboratorFilter(emails, _ref, username) {
8
13
  var filter_predicate = _ref.filter_predicate,
9
14
  filter_term = _ref.filter_term;
10
15
  switch (filter_predicate) {
11
16
  case FILTER_PREDICATE_TYPE.HAS_ANY_OF:
12
17
  {
13
- return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(cellValue) && filter_term.some(function (email) {
14
- return cellValue.includes(email);
18
+ return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.some(function (email) {
19
+ return emails.includes(email);
15
20
  });
16
21
  }
17
22
  case FILTER_PREDICATE_TYPE.HAS_ALL_OF:
18
23
  {
19
- return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(cellValue) && filter_term.every(function (email) {
20
- return cellValue.includes(email);
24
+ return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.every(function (email) {
25
+ return emails.includes(email);
21
26
  });
22
27
  }
23
28
  case FILTER_PREDICATE_TYPE.HAS_NONE_OF:
24
29
  {
25
- if (!Array.isArray(filter_term) || filter_term.length === 0 || !Array.isArray(cellValue) || cellValue.length === 0) {
30
+ if (!Array.isArray(filter_term) || filter_term.length === 0 || !Array.isArray(emails) || emails.length === 0) {
26
31
  return true;
27
32
  }
28
33
  return filter_term.every(function (email) {
29
- return cellValue.indexOf(email) < 0;
34
+ return emails.indexOf(email) < 0;
30
35
  });
31
36
  }
32
37
  case FILTER_PREDICATE_TYPE.IS_EXACTLY:
@@ -34,10 +39,10 @@ var collaboratorFilter = function collaboratorFilter(cellValue, _ref, username)
34
39
  if (!Array.isArray(filter_term) || filter_term.length === 0) {
35
40
  return true;
36
41
  }
37
- if (!Array.isArray(cellValue) || cellValue.length === 0) {
42
+ if (!Array.isArray(emails) || emails.length === 0) {
38
43
  return false;
39
44
  }
40
- var nonReptCellValue = _toConsumableArray(new Set(cellValue));
45
+ var nonReptCellValue = _toConsumableArray(new Set(emails));
41
46
  if (nonReptCellValue.length !== filter_term.length) {
42
47
  return false;
43
48
  }
@@ -47,15 +52,15 @@ var collaboratorFilter = function collaboratorFilter(cellValue, _ref, username)
47
52
  }
48
53
  case FILTER_PREDICATE_TYPE.EMPTY:
49
54
  {
50
- return !Array.isArray(cellValue) || cellValue.length === 0;
55
+ return !Array.isArray(emails) || emails.length === 0;
51
56
  }
52
57
  case FILTER_PREDICATE_TYPE.NOT_EMPTY:
53
58
  {
54
- return Array.isArray(cellValue) && cellValue.length > 0;
59
+ return Array.isArray(emails) && emails.length > 0;
55
60
  }
56
61
  case FILTER_PREDICATE_TYPE.INCLUDE_ME:
57
62
  {
58
- return Array.isArray(cellValue) && cellValue.indexOf(username) > -1;
63
+ return Array.isArray(emails) && emails.indexOf(username) > -1;
59
64
  }
60
65
  default:
61
66
  {
@@ -1,9 +1,14 @@
1
- import '../../constants/filter/filter-column-options.js';
2
- import '../../constants/filter/filter-modifier.js';
3
1
  import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
4
- import '../../constants/filter/filter-is-within.js';
5
2
 
6
- var creatorFilter = function creatorFilter(cellValue, _ref, username) {
3
+ /**
4
+ * Filter creator
5
+ * @param {string} email
6
+ * @param {string} filter_predicate
7
+ * @param {array} filter_term e.g. [ collaborator.email, ... ]
8
+ * @param {string} username
9
+ * @returns bool
10
+ */
11
+ var creatorFilter = function creatorFilter(email, _ref, username) {
7
12
  var filter_predicate = _ref.filter_predicate,
8
13
  filter_term = _ref.filter_term;
9
14
  switch (filter_predicate) {
@@ -12,33 +17,37 @@ var creatorFilter = function creatorFilter(cellValue, _ref, username) {
12
17
  if (!Array.isArray(filter_term)) {
13
18
  return true;
14
19
  }
15
- if (!cellValue) {
20
+ if (!email) {
16
21
  return false;
17
22
  }
18
- return filter_term.findIndex(function (item) {
19
- return item === cellValue;
23
+ return filter_term.findIndex(function (filterEmail) {
24
+ return filterEmail === email;
20
25
  }) > -1;
21
26
  }
22
27
  case FILTER_PREDICATE_TYPE.NOT_CONTAIN:
23
28
  {
24
- if (!Array.isArray(filter_term) || !cellValue) {
29
+ if (!Array.isArray(filter_term) || !email) {
25
30
  return true;
26
31
  }
27
- return filter_term.findIndex(function (item) {
28
- return item === cellValue;
32
+ return filter_term.findIndex(function (filterEmail) {
33
+ return filterEmail === email;
29
34
  }) < 0;
30
35
  }
31
36
  case FILTER_PREDICATE_TYPE.INCLUDE_ME:
32
37
  {
33
- return cellValue === username;
38
+ return email === username;
34
39
  }
35
40
  case FILTER_PREDICATE_TYPE.IS:
36
41
  {
37
- return !Array.isArray(filter_term) || cellValue === filter_term[0];
42
+ if (!filter_term) return true;
43
+ if (!Array.isArray(filter_term)) return email === filter_term;
44
+ return email === filter_term[0];
38
45
  }
39
46
  case FILTER_PREDICATE_TYPE.IS_NOT:
40
47
  {
41
- return !Array.isArray(filter_term) || cellValue !== filter_term[0];
48
+ if (!filter_term) return true;
49
+ if (!Array.isArray(filter_term)) return email !== filter_term;
50
+ return email !== filter_term[0];
42
51
  }
43
52
  default:
44
53
  {
@@ -1,10 +1,17 @@
1
1
  import { DateUtils } from '../../date.js';
2
- import '../../constants/filter/filter-column-options.js';
3
- import { FILTER_TERM_MODIFIER_TYPE } from '../../constants/filter/filter-modifier.js';
4
2
  import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
5
- import '../../constants/filter/filter-is-within.js';
3
+ import { FILTER_TERM_MODIFIER_TYPE } from '../../constants/filter/filter-modifier.js';
6
4
 
7
- var dateFilter = function dateFilter(cellValue, _ref) {
5
+ /**
6
+ * Filter date
7
+ * @param {string} date
8
+ * @param {string} filter_predicate
9
+ * @param {string} filter_term_modifier
10
+ * @param {any} filter_term date string or number etc.
11
+ * @param {string|object} other_date date string or { startDate, endDate }
12
+ * @returns bool
13
+ */
14
+ var dateFilter = function dateFilter(date, _ref) {
8
15
  var filter_predicate = _ref.filter_predicate,
9
16
  filter_term_modifier = _ref.filter_term_modifier,
10
17
  filter_term = _ref.filter_term,
@@ -12,42 +19,78 @@ var dateFilter = function dateFilter(cellValue, _ref) {
12
19
  switch (filter_predicate) {
13
20
  case FILTER_PREDICATE_TYPE.IS:
14
21
  {
15
- return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || DateUtils.format(cellValue) === other_date;
22
+ return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || DateUtils.format(date) === other_date;
16
23
  }
17
24
  case FILTER_PREDICATE_TYPE.IS_WITHIN:
18
25
  {
26
+ if (filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
27
+ return true;
28
+ }
29
+ if (!date) {
30
+ return false;
31
+ }
19
32
  var startDate = other_date.startDate,
20
33
  endDate = other_date.endDate;
21
- var currentDate = DateUtils.format(cellValue);
22
- return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || !!cellValue && currentDate >= startDate && currentDate <= endDate;
34
+ var currentDate = DateUtils.format(date);
35
+ return currentDate >= startDate && currentDate <= endDate;
23
36
  }
24
37
  case FILTER_PREDICATE_TYPE.IS_BEFORE:
25
38
  {
26
- return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || !!cellValue && DateUtils.getValidDate(cellValue) && DateUtils.format(cellValue) < other_date;
39
+ if (filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
40
+ return true;
41
+ }
42
+ if (!date || !DateUtils.getValidDate(date)) {
43
+ return false;
44
+ }
45
+ return DateUtils.format(date) < other_date;
27
46
  }
28
47
  case FILTER_PREDICATE_TYPE.IS_AFTER:
29
48
  {
30
- return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || !!cellValue && DateUtils.getValidDate(cellValue) && DateUtils.format(cellValue) > other_date;
49
+ if (filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
50
+ return true;
51
+ }
52
+ if (!date || !DateUtils.getValidDate(date)) {
53
+ return false;
54
+ }
55
+ return DateUtils.format(date) > other_date;
31
56
  }
32
57
  case FILTER_PREDICATE_TYPE.IS_ON_OR_BEFORE:
33
58
  {
34
- return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || !!cellValue && DateUtils.getValidDate(cellValue) && DateUtils.format(cellValue) <= other_date;
59
+ if (filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
60
+ return true;
61
+ }
62
+ if (!date || !DateUtils.getValidDate(date)) {
63
+ return false;
64
+ }
65
+ return DateUtils.format(date) <= other_date;
35
66
  }
36
67
  case FILTER_PREDICATE_TYPE.IS_ON_OR_AFTER:
37
68
  {
38
- return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || !!cellValue && DateUtils.getValidDate(cellValue) && DateUtils.format(cellValue) >= other_date;
69
+ if (filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
70
+ return true;
71
+ }
72
+ if (!date || !DateUtils.getValidDate(date)) {
73
+ return false;
74
+ }
75
+ return DateUtils.format(date) >= other_date;
39
76
  }
40
77
  case FILTER_PREDICATE_TYPE.IS_NOT:
41
78
  {
42
- return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || !cellValue || DateUtils.format(cellValue) !== other_date;
79
+ if (filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
80
+ return true;
81
+ }
82
+ if (!date || !DateUtils.getValidDate(date)) {
83
+ return false;
84
+ }
85
+ return DateUtils.format(date) !== other_date;
43
86
  }
44
87
  case FILTER_PREDICATE_TYPE.EMPTY:
45
88
  {
46
- return cellValue && DateUtils.getValidDate(cellValue) ? false : true;
89
+ return !(date && DateUtils.getValidDate(date));
47
90
  }
48
91
  case FILTER_PREDICATE_TYPE.NOT_EMPTY:
49
92
  {
50
- return cellValue && DateUtils.getValidDate(cellValue) ? true : false;
93
+ return !!(date && DateUtils.getValidDate(date));
51
94
  }
52
95
  default:
53
96
  {