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
@@ -15,6 +15,12 @@ var getColumnOptions = function getColumnOptions(column) {
15
15
  }
16
16
  return column.data.options;
17
17
  };
18
+
19
+ /**
20
+ * generate unique option id
21
+ * @param {array} options e.g. [{ id, ... }, ...]
22
+ * @returns generated option id, string
23
+ */
18
24
  var generateOptionID = function generateOptionID(options) {
19
25
  if (options.length === 1) return String(Math.floor(Math.random() * Math.pow(10, 6)));
20
26
  var optionID;
@@ -57,22 +63,38 @@ var getRandomOptionColor = function getRandomOptionColor(options) {
57
63
  }
58
64
  return defaultOptions[colorIdx] || defaultOptions[0];
59
65
  };
66
+
67
+ /**
68
+ * generate option
69
+ * @param {array} options e.g. [{ id, ... }, ...]
70
+ * @param {string} optionName
71
+ * @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
72
+ * @returns generated option, object
73
+ */
60
74
  var createOption = function createOption(options, optionName) {
61
- var selectOptionColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
75
+ var optionColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
62
76
  var id = generateOptionID(options);
63
- var optionColor = selectOptionColor && selectOption.SELECT_OPTION_COLORS.find(function (item) {
64
- return item.COLOR === selectOptionColor;
77
+ var colors = optionColor && selectOption.SELECT_OPTION_COLORS.find(function (systemColor) {
78
+ return systemColor.COLOR === optionColor;
65
79
  });
66
- if (!optionColor) {
67
- optionColor = getRandomOptionColor(options);
80
+ if (!colors) {
81
+ colors = getRandomOptionColor(options);
68
82
  }
69
83
  return {
70
84
  id: id,
71
85
  name: optionName,
72
- color: optionColor.COLOR,
73
- textColor: optionColor.TEXT_COLOR
86
+ color: colors.COLOR,
87
+ textColor: colors.TEXT_COLOR
74
88
  };
75
89
  };
90
+
91
+ /**
92
+ * Generate cell option by name.
93
+ * Return the option id if exist, otherwise generate a new option
94
+ * @param {array} options e.g. [{ id, ... }, ...]
95
+ * @param {string} optionName used as the option name
96
+ * @returns option id and option, object
97
+ */
76
98
  var generatorCellOption = function generatorCellOption(options, optionName) {
77
99
  var existOption = options.find(function (option) {
78
100
  return option.name === optionName;
@@ -88,6 +110,14 @@ var generatorCellOption = function generatorCellOption(options, optionName) {
88
110
  selectedOptionId: newOption.id
89
111
  };
90
112
  };
113
+
114
+ /**
115
+ * Generate cell options by names.
116
+ * Return the options ids if exist, otherwise generate new options
117
+ * @param {array} options e.g. [{ id, ... }, ...]
118
+ * @param {array} optionNames used as the options names
119
+ * @returns options ids and options, object
120
+ */
91
121
  var generatorCellOptions = function generatorCellOptions(options, optionNames) {
92
122
  var cellOptions = [];
93
123
  var selectedOptionIds = [];
package/lib/common.js CHANGED
@@ -22,13 +22,35 @@ var generatorBase64Code = function generatorBase64Code() {
22
22
  }
23
23
  return key;
24
24
  };
25
+
26
+ /**
27
+ * Check whether the given value is empty
28
+ * @param {any} val
29
+ * @returns bool
30
+ */
25
31
  var isEmpty = function isEmpty(val) {
26
- if (val == null) return true;
32
+ if (val === null || val === undefined) return true;
27
33
  if (val.length !== undefined) return val.length === 0;
28
34
  if (val instanceof Date) return false;
29
35
  if (_typeof__default["default"](val) === 'object') return Object.keys(val).length === 0;
30
36
  return false;
31
37
  };
32
38
 
39
+ /**
40
+ * Check whether the object is empty.
41
+ * The true will be returned if the "obj" is invalid.
42
+ * @param {object} obj
43
+ * @returns bool
44
+ */
45
+ var isEmptyObject = function isEmptyObject(obj) {
46
+ var name;
47
+ // eslint-disable-next-line
48
+ for (name in obj) {
49
+ return false;
50
+ }
51
+ return true;
52
+ };
53
+
33
54
  exports.generatorBase64Code = generatorBase64Code;
34
55
  exports.isEmpty = isEmpty;
56
+ exports.isEmptyObject = isEmptyObject;
@@ -18,6 +18,8 @@ var FORMULA_RESULT_TYPE = {
18
18
  ARRAY: 'array'
19
19
  };
20
20
  var FORMULA_COLUMN_TYPES_MAP = (_FORMULA_COLUMN_TYPES = {}, _defineProperty__default["default"](_FORMULA_COLUMN_TYPES, cellType.CellType.FORMULA, true), _defineProperty__default["default"](_FORMULA_COLUMN_TYPES, cellType.CellType.LINK_FORMULA, true), _FORMULA_COLUMN_TYPES);
21
+ var DISPLAY_INTERNAL_ERRORS = ['#ERROR!', '#DIV/0!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!', '#VALUE!', '#GETTING_DATA'];
21
22
 
23
+ exports.DISPLAY_INTERNAL_ERRORS = DISPLAY_INTERNAL_ERRORS;
22
24
  exports.FORMULA_COLUMN_TYPES_MAP = FORMULA_COLUMN_TYPES_MAP;
23
25
  exports.FORMULA_RESULT_TYPE = FORMULA_RESULT_TYPE;
@@ -19,10 +19,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
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
20
 
21
21
  /**
22
- * get filters which excludes incomplete
23
- * @param {array} filters [{ column_key: '', filter_predicate: '' }]
22
+ * Get filters which excludes incomplete
23
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
24
24
  * @param {array} columns
25
- * @returns array
25
+ * @returns valid filters, array
26
26
  */
27
27
  var getValidFilters = function getValidFilters(filters, columns) {
28
28
  if (!Array.isArray(filters) || !Array.isArray(columns)) {
@@ -36,10 +36,10 @@ var getValidFilters = function getValidFilters(filters, columns) {
36
36
  };
37
37
 
38
38
  /**
39
- * get filters without error messages
40
- * @param {array} filters [{ column_key: '', filter_predicate: '' }]
39
+ * Get filters without error messages
40
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
41
41
  * @param {array} columns
42
- * @returns array
42
+ * @returns valid filters, array
43
43
  */
44
44
  var getValidFiltersWithoutError = function getValidFiltersWithoutError(filters, columns) {
45
45
  if (!Array.isArray(filters) || !Array.isArray(columns)) {
@@ -49,13 +49,21 @@ var getValidFiltersWithoutError = function getValidFiltersWithoutError(filters,
49
49
  return !filter.ValidateFilter.validate(filter$1, columns).error_message;
50
50
  });
51
51
  };
52
+
53
+ /**
54
+ * Generate date for filter
55
+ * @param {string} filterTermModifier
56
+ * @param {any} filterTerm
57
+ * @returns date | date range, object
58
+ */
52
59
  var otherDate = function otherDate(filterTermModifier, filterTerm) {
53
60
  var today = new Date();
54
61
  var year = today.getFullYear();
55
62
  var month = today.getMonth(); // use js month representation: 0 - 11
56
63
  var day = today.getDate();
57
- var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
64
+
58
65
  // 0 1 2 3 4 5 6 7 8 9 10 11
66
+ var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
59
67
  days[1] = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28; // is leap year
60
68
  switch (filterTermModifier) {
61
69
  case filterModifier.FILTER_TERM_MODIFIER_TYPE.TODAY:
@@ -196,19 +204,32 @@ var otherDate = function otherDate(filterTermModifier, filterTerm) {
196
204
  }
197
205
  }
198
206
  };
207
+
208
+ /**
209
+ * Generate formatted date for filter
210
+ * @param {string} filterTermModifier
211
+ * @param {any} filterTerm
212
+ * @returns formatted date | date range, object
213
+ */
199
214
  var getFormattedFilterOtherDate = function getFormattedFilterOtherDate(filterTermModifier, filterTerm) {
200
215
  var _otherDate = otherDate(filterTermModifier, filterTerm);
201
216
  if (EXACT_DATE_TERM_MODIFIER_TYPES.includes(filterTermModifier)) {
202
217
  return date.DateUtils.format(_otherDate);
203
218
  }
204
- var _ref = _otherDate || {},
205
- startDate = _ref.startDate,
206
- endDate = _ref.endDate;
219
+ var startDate = _otherDate.startDate,
220
+ endDate = _otherDate.endDate;
207
221
  return {
208
- startDate: date.DateUtils.format(startDate),
209
- endDate: date.DateUtils.format(endDate)
222
+ startDate: startDate ? date.DateUtils.format(startDate) : '',
223
+ endDate: endDate ? date.DateUtils.format(endDate) : ''
210
224
  };
211
225
  };
226
+
227
+ /**
228
+ * Format filter with other_date, linked_column etc.
229
+ * @param {object} filter e.g. { filter_term, filter_term_modifier, ... }
230
+ * @param {object} column
231
+ * @returns formatted filter
232
+ */
212
233
  var getFormattedFilter = function getFormattedFilter(filter, column) {
213
234
  var filter_term = filter.filter_term,
214
235
  filter_term_modifier = filter.filter_term_modifier;
@@ -224,7 +245,8 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
224
245
  array_data = columnData.array_data;
225
246
  if (result_type === formula.FORMULA_RESULT_TYPE.DATE) {
226
247
  formattedFilter.other_date = getFormattedFilterOtherDate(filter_term_modifier, filter_term);
227
- } else if (result_type === formula.FORMULA_RESULT_TYPE.ARRAY) {
248
+ }
249
+ if (result_type === formula.FORMULA_RESULT_TYPE.ARRAY) {
228
250
  var linkedColumn = {
229
251
  type: array_type,
230
252
  data: array_data
@@ -243,9 +265,9 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
243
265
  }
244
266
  case cellType.CellType.LINK:
245
267
  {
246
- var _ref2 = columnData || {},
247
- _array_type = _ref2.array_type,
248
- _array_data = _ref2.array_data;
268
+ var _ref = columnData || {},
269
+ _array_type = _ref.array_type,
270
+ _array_data = _ref.array_data;
249
271
  var _linkedColumn = {
250
272
  type: _array_type,
251
273
  data: _array_data
@@ -264,11 +286,24 @@ var getFormattedFilter = function getFormattedFilter(filter, column) {
264
286
  }
265
287
  return formattedFilter;
266
288
  };
289
+
290
+ /**
291
+ * Get formatted filters with other_date, linked_column etc.
292
+ * @param {array} filters [{ filter_term, filter_term_modifier, column, ... }]
293
+ * @returns formatted filters, array
294
+ */
267
295
  var getFormattedFilters = function getFormattedFilters(filters) {
268
296
  return filters.map(function (filter) {
269
297
  return getFormattedFilter(filter, filter.column);
270
298
  });
271
299
  };
300
+
301
+ /**
302
+ * Get filters without error messages and formatted with filter column
303
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
304
+ * @param {array} columns
305
+ * @returns filters, array
306
+ */
272
307
  var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
273
308
  var cleanFilters = [];
274
309
  filters.forEach(function (filter$1) {
@@ -276,18 +311,18 @@ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
276
311
  var _ValidateFilter$valid2 = filter.ValidateFilter.validate(filter$1, columns),
277
312
  error_message = _ValidateFilter$valid2.error_message;
278
313
  if (error_message) {
279
- if (error_message === index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
280
- return;
314
+ if (error_message !== index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
315
+ throw new Error(error_message);
281
316
  }
282
- throw new Error(error_message);
317
+ } else {
318
+ var filterColumn = columns.find(function (column) {
319
+ return column.key === column_key;
320
+ });
321
+ var newFilter = _objectSpread(_objectSpread({}, filter$1), {}, {
322
+ column: filterColumn
323
+ });
324
+ cleanFilters.push(newFilter);
283
325
  }
284
- var filterColumn = columns.find(function (column) {
285
- return column.key === column_key;
286
- });
287
- var newFilter = _objectSpread(_objectSpread({}, filter$1), {}, {
288
- column: filterColumn
289
- });
290
- cleanFilters.push(newFilter);
291
326
  });
292
327
  return cleanFilters;
293
328
  };
@@ -12,75 +12,80 @@ var multipleSelect = require('./multiple-select.js');
12
12
  var number$1 = require('./number.js');
13
13
  var cellType = require('../../constants/cell-type.js');
14
14
  var column = require('../../constants/column.js');
15
- require('../../constants/filter/filter-column-options.js');
16
- require('../../constants/filter/filter-modifier.js');
17
15
  var filterPredicate = require('../../constants/filter/filter-predicate.js');
18
- require('../../constants/filter/filter-is-within.js');
19
16
 
20
17
  var TRUE_VALUE = [true, 'true'];
21
- var filterByArrayType = function filterByArrayType(cellValue$1, filter, _ref) {
18
+
19
+ /**
20
+ * Filter by array type
21
+ * @param {array} array e.g. [ cellValue, ... ]
22
+ * @param {object} filter e.g. { filter_predicate, column, ... }
23
+ * @param {string} username
24
+ * @param {string} userId
25
+ * @returns bool
26
+ */
27
+ var filterByArrayType = function filterByArrayType(array, filter, _ref) {
22
28
  var username = _ref.username,
23
29
  userId = _ref.userId;
24
30
  var column$1 = filter.column,
25
31
  linked_column = filter.linked_column;
26
32
  var filter_predicate = filter.filter_predicate;
27
- if (Array.isArray(cellValue$1)) {
33
+ if (Array.isArray(array)) {
28
34
  if (filter_predicate === filterPredicate.FILTER_PREDICATE_TYPE.EMPTY) {
29
- return cellValue$1.length === 0;
35
+ return array.length === 0;
30
36
  }
31
37
  if (filter_predicate === filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY) {
32
- return cellValue$1.length > 0;
38
+ return array.length > 0;
33
39
  }
34
40
  }
35
41
  if (!linked_column) {
36
42
  return text.textFilter('', filter, userId);
37
43
  }
38
- var data = column$1.data;
39
44
  var linkedColumnType = linked_column.type;
40
45
  if (linkedColumnType === cellType.CellType.BOOL || linkedColumnType === cellType.CellType.CHECKBOX) {
41
- var normalizedCellValue = cellValue$1;
42
- if (Array.isArray(cellValue$1)) {
43
- normalizedCellValue = cellValue$1[0];
46
+ var normalizedArray = array;
47
+ if (Array.isArray(array)) {
48
+ normalizedArray = array[0];
44
49
  }
45
- normalizedCellValue = TRUE_VALUE.includes(normalizedCellValue);
46
- return checkbox.checkboxFilter(normalizedCellValue, filter);
50
+ normalizedArray = TRUE_VALUE.includes(normalizedArray);
51
+ return checkbox.checkboxFilter(normalizedArray, filter);
47
52
  }
48
53
  if (linkedColumnType === cellType.CellType.SINGLE_SELECT) {
49
- var _normalizedCellValue = cellValue$1;
50
- if (cellValue$1 && !Array.isArray(cellValue$1)) {
51
- _normalizedCellValue = [cellValue$1];
54
+ var _normalizedArray = array;
55
+ if (array && !Array.isArray(array)) {
56
+ _normalizedArray = [array];
52
57
  }
53
- return multipleSelect.multipleSelectFilter(_normalizedCellValue, filter);
58
+ return multipleSelect.multipleSelectFilter(_normalizedArray, filter);
54
59
  }
55
60
  if (linkedColumnType === cellType.CellType.MULTIPLE_SELECT) {
56
- return multipleSelect.multipleSelectFilter(cellValue$1, filter);
61
+ return multipleSelect.multipleSelectFilter(array, filter);
57
62
  }
58
63
  if (number.isNumericColumn({
59
64
  type: linkedColumnType
60
65
  })) {
61
- var _normalizedCellValue2 = cellValue$1;
62
- if (Array.isArray(cellValue$1)) {
63
- var cellValueLength = cellValue$1.length;
66
+ var _normalizedArray2 = array;
67
+ if (Array.isArray(array)) {
68
+ var cellValueLength = array.length;
64
69
  if (cellValueLength === 0) {
65
- _normalizedCellValue2 = '';
70
+ _normalizedArray2 = '';
66
71
  } else if (cellValueLength === 1) {
67
- _normalizedCellValue2 = cellValue$1[0];
72
+ _normalizedArray2 = array[0];
68
73
  }
69
74
  }
70
- return number$1.numberFilter(_normalizedCellValue2, filter);
75
+ return number$1.numberFilter(_normalizedArray2, filter);
71
76
  }
72
77
  if (column.DATE_COLUMN_OPTIONS.includes(linkedColumnType)) {
73
- var newCellValue = cellValue$1;
74
- if (Array.isArray(cellValue$1)) {
75
- newCellValue = String(cellValue$1);
78
+ var newCellValue = array;
79
+ if (Array.isArray(array)) {
80
+ newCellValue = String(array);
76
81
  }
77
82
  return date.dateFilter(newCellValue, filter);
78
83
  }
79
84
  if (column.COLLABORATOR_COLUMN_TYPES.includes(linkedColumnType)) {
80
- return collaborator.collaboratorFilter(cellValue$1, filter, username);
85
+ return collaborator.collaboratorFilter(array, filter, username);
81
86
  }
82
- var sCellValue = cellValue.getFormulaDisplayString(cellValue$1, data) || '';
83
- return text.textFilter(sCellValue, filter, userId);
87
+ var displayString = cellValue.getFormulaDisplayString(array, column$1.data) || '';
88
+ return text.textFilter(displayString, filter, userId);
84
89
  };
85
90
 
86
91
  exports.filterByArrayType = filterByArrayType;
@@ -2,11 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var checkboxFilter = function checkboxFilter(cellValue, _ref) {
5
+ /**
6
+ * Filter checkbox
7
+ * @param {bool} checked
8
+ * @param {bool} filter_term
9
+ * @returns boolean
10
+ */
11
+ var checkboxFilter = function checkboxFilter(checked, _ref) {
6
12
  var filter_term = _ref.filter_term;
7
13
  var filterTerm = filter_term || false;
8
- var normalizedCellValue = cellValue || false;
9
- return normalizedCellValue === filterTerm;
14
+ var normalizedChecked = checked || false;
15
+ return normalizedChecked === filterTerm;
10
16
  };
11
17
 
12
18
  exports.checkboxFilter = checkboxFilter;
@@ -3,38 +3,43 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
6
- require('../../constants/filter/filter-column-options.js');
7
- require('../../constants/filter/filter-modifier.js');
8
6
  var filterPredicate = require('../../constants/filter/filter-predicate.js');
9
- require('../../constants/filter/filter-is-within.js');
10
7
 
11
8
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
9
 
13
10
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
14
11
 
15
- var collaboratorFilter = function collaboratorFilter(cellValue, _ref, username) {
12
+ /**
13
+ * Filter collaborator
14
+ * @param {array} emails e.g. [ collaborator.email, ... ]
15
+ * @param {string} filter_predicate
16
+ * @param {array} filter_term e.g. [ collaborator.email, ... ]
17
+ * @param {string} username
18
+ * @returns bool
19
+ */
20
+ var collaboratorFilter = function collaboratorFilter(emails, _ref, username) {
16
21
  var filter_predicate = _ref.filter_predicate,
17
22
  filter_term = _ref.filter_term;
18
23
  switch (filter_predicate) {
19
24
  case filterPredicate.FILTER_PREDICATE_TYPE.HAS_ANY_OF:
20
25
  {
21
- return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(cellValue) && filter_term.some(function (email) {
22
- return cellValue.includes(email);
26
+ return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.some(function (email) {
27
+ return emails.includes(email);
23
28
  });
24
29
  }
25
30
  case filterPredicate.FILTER_PREDICATE_TYPE.HAS_ALL_OF:
26
31
  {
27
- return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(cellValue) && filter_term.every(function (email) {
28
- return cellValue.includes(email);
32
+ return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.every(function (email) {
33
+ return emails.includes(email);
29
34
  });
30
35
  }
31
36
  case filterPredicate.FILTER_PREDICATE_TYPE.HAS_NONE_OF:
32
37
  {
33
- if (!Array.isArray(filter_term) || filter_term.length === 0 || !Array.isArray(cellValue) || cellValue.length === 0) {
38
+ if (!Array.isArray(filter_term) || filter_term.length === 0 || !Array.isArray(emails) || emails.length === 0) {
34
39
  return true;
35
40
  }
36
41
  return filter_term.every(function (email) {
37
- return cellValue.indexOf(email) < 0;
42
+ return emails.indexOf(email) < 0;
38
43
  });
39
44
  }
40
45
  case filterPredicate.FILTER_PREDICATE_TYPE.IS_EXACTLY:
@@ -42,10 +47,10 @@ var collaboratorFilter = function collaboratorFilter(cellValue, _ref, username)
42
47
  if (!Array.isArray(filter_term) || filter_term.length === 0) {
43
48
  return true;
44
49
  }
45
- if (!Array.isArray(cellValue) || cellValue.length === 0) {
50
+ if (!Array.isArray(emails) || emails.length === 0) {
46
51
  return false;
47
52
  }
48
- var nonReptCellValue = _toConsumableArray__default["default"](new Set(cellValue));
53
+ var nonReptCellValue = _toConsumableArray__default["default"](new Set(emails));
49
54
  if (nonReptCellValue.length !== filter_term.length) {
50
55
  return false;
51
56
  }
@@ -55,15 +60,15 @@ var collaboratorFilter = function collaboratorFilter(cellValue, _ref, username)
55
60
  }
56
61
  case filterPredicate.FILTER_PREDICATE_TYPE.EMPTY:
57
62
  {
58
- return !Array.isArray(cellValue) || cellValue.length === 0;
63
+ return !Array.isArray(emails) || emails.length === 0;
59
64
  }
60
65
  case filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY:
61
66
  {
62
- return Array.isArray(cellValue) && cellValue.length > 0;
67
+ return Array.isArray(emails) && emails.length > 0;
63
68
  }
64
69
  case filterPredicate.FILTER_PREDICATE_TYPE.INCLUDE_ME:
65
70
  {
66
- return Array.isArray(cellValue) && cellValue.indexOf(username) > -1;
71
+ return Array.isArray(emails) && emails.indexOf(username) > -1;
67
72
  }
68
73
  default:
69
74
  {
@@ -2,12 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- require('../../constants/filter/filter-column-options.js');
6
- require('../../constants/filter/filter-modifier.js');
7
5
  var filterPredicate = require('../../constants/filter/filter-predicate.js');
8
- require('../../constants/filter/filter-is-within.js');
9
6
 
10
- var creatorFilter = function creatorFilter(cellValue, _ref, username) {
7
+ /**
8
+ * Filter creator
9
+ * @param {string} email
10
+ * @param {string} filter_predicate
11
+ * @param {array} filter_term e.g. [ collaborator.email, ... ]
12
+ * @param {string} username
13
+ * @returns bool
14
+ */
15
+ var creatorFilter = function creatorFilter(email, _ref, username) {
11
16
  var filter_predicate = _ref.filter_predicate,
12
17
  filter_term = _ref.filter_term;
13
18
  switch (filter_predicate) {
@@ -16,33 +21,37 @@ var creatorFilter = function creatorFilter(cellValue, _ref, username) {
16
21
  if (!Array.isArray(filter_term)) {
17
22
  return true;
18
23
  }
19
- if (!cellValue) {
24
+ if (!email) {
20
25
  return false;
21
26
  }
22
- return filter_term.findIndex(function (item) {
23
- return item === cellValue;
27
+ return filter_term.findIndex(function (filterEmail) {
28
+ return filterEmail === email;
24
29
  }) > -1;
25
30
  }
26
31
  case filterPredicate.FILTER_PREDICATE_TYPE.NOT_CONTAIN:
27
32
  {
28
- if (!Array.isArray(filter_term) || !cellValue) {
33
+ if (!Array.isArray(filter_term) || !email) {
29
34
  return true;
30
35
  }
31
- return filter_term.findIndex(function (item) {
32
- return item === cellValue;
36
+ return filter_term.findIndex(function (filterEmail) {
37
+ return filterEmail === email;
33
38
  }) < 0;
34
39
  }
35
40
  case filterPredicate.FILTER_PREDICATE_TYPE.INCLUDE_ME:
36
41
  {
37
- return cellValue === username;
42
+ return email === username;
38
43
  }
39
44
  case filterPredicate.FILTER_PREDICATE_TYPE.IS:
40
45
  {
41
- return !Array.isArray(filter_term) || cellValue === filter_term[0];
46
+ if (!filter_term) return true;
47
+ if (!Array.isArray(filter_term)) return email === filter_term;
48
+ return email === filter_term[0];
42
49
  }
43
50
  case filterPredicate.FILTER_PREDICATE_TYPE.IS_NOT:
44
51
  {
45
- return !Array.isArray(filter_term) || cellValue !== filter_term[0];
52
+ if (!filter_term) return true;
53
+ if (!Array.isArray(filter_term)) return email !== filter_term;
54
+ return email !== filter_term[0];
46
55
  }
47
56
  default:
48
57
  {