dtable-utils 0.0.3 → 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 (152) hide show
  1. package/README.md +42 -5
  2. package/dist/index.js +1 -1
  3. package/es/cell-value-get/cell-value.js +250 -20
  4. package/es/cell-value-get/collaborator.js +16 -3
  5. package/es/cell-value-get/digital-sign.js +1 -1
  6. package/es/cell-value-get/duration.js +3 -3
  7. package/es/cell-value-get/geolocation.js +52 -30
  8. package/es/cell-value-get/long-text.js +1 -1
  9. package/es/cell-value-get/number.js +51 -19
  10. package/es/cell-value-get/option.js +33 -9
  11. package/es/cell-value-get/rate.js +11 -0
  12. package/es/cell-value-set/date.js +26 -0
  13. package/es/cell-value-set/number.js +53 -1
  14. package/es/color/column-color.js +437 -0
  15. package/es/color/gradient-color.js +100 -0
  16. package/es/color/row-color.js +289 -0
  17. package/es/column/{common.js → core.js} +2 -14
  18. package/es/column/date.js +1 -1
  19. package/es/column/number.js +1 -1
  20. package/es/column/option.js +145 -0
  21. package/es/common.js +23 -3
  22. package/es/constants/color.js +16 -0
  23. package/es/constants/column-permission.js +7 -0
  24. package/es/constants/column.js +127 -2
  25. package/es/constants/filter/index.js +5 -1
  26. package/es/constants/formula.js +2 -1
  27. package/es/constants/grid-header.js +6 -0
  28. package/es/constants/group.js +23 -0
  29. package/es/constants/limit.js +3 -0
  30. package/es/constants/reg.js +4 -0
  31. package/es/constants/row-color.js +11 -0
  32. package/es/constants/sort.js +11 -0
  33. package/es/date.js +1 -1
  34. package/es/filter/core.js +322 -0
  35. package/es/filter/filter-column/array.js +87 -0
  36. package/es/filter/filter-column/checkbox.js +14 -0
  37. package/es/filter/filter-column/collaborator.js +72 -0
  38. package/es/filter/filter-column/creator.js +59 -0
  39. package/es/filter/filter-column/date.js +102 -0
  40. package/es/filter/filter-column/digital-sign.js +29 -0
  41. package/es/filter/filter-column/file.js +27 -0
  42. package/es/filter/filter-column/formula.js +57 -0
  43. package/es/filter/filter-column/geolocation.js +58 -0
  44. package/es/filter/filter-column/link.js +20 -0
  45. package/es/filter/filter-column/long-text.js +28 -0
  46. package/es/filter/filter-column/multiple-select.js +64 -0
  47. package/es/filter/filter-column/number.js +97 -0
  48. package/es/filter/filter-column/single-select.js +45 -0
  49. package/es/filter/filter-column/text.js +60 -0
  50. package/es/filter/filter-row.js +233 -0
  51. package/es/group/core.js +116 -0
  52. package/es/group/group-row.js +402 -0
  53. package/es/index.js +63 -11
  54. package/es/link/core.js +78 -0
  55. package/es/number.js +21 -0
  56. package/es/row/core.js +180 -0
  57. package/es/sort/core.js +91 -0
  58. package/es/sort/sort-column/array.js +72 -0
  59. package/es/sort/sort-column/checkbox.js +22 -0
  60. package/es/sort/sort-column/collaborator.js +16 -0
  61. package/es/sort/sort-column/date.js +25 -0
  62. package/es/sort/sort-column/formula.js +49 -0
  63. package/es/sort/sort-column/link.js +32 -0
  64. package/es/sort/sort-column/multiple-select.js +45 -0
  65. package/es/sort/sort-column/number.js +25 -0
  66. package/es/sort/sort-column/single-select.js +30 -0
  67. package/es/sort/sort-column/text.js +61 -0
  68. package/es/sort/sort-row.js +110 -0
  69. package/es/table/column.js +27 -0
  70. package/es/table/core.js +14 -0
  71. package/es/table/row.js +25 -0
  72. package/es/validate/filter.js +1 -1
  73. package/es/validate/geolocation.js +5 -0
  74. package/es/view/core.js +134 -0
  75. package/es/view/formula.js +147 -0
  76. package/es/view/group.js +32 -0
  77. package/es/view/summaries.js +167 -0
  78. package/lib/cell-value-get/cell-value.js +254 -19
  79. package/lib/cell-value-get/collaborator.js +16 -2
  80. package/lib/cell-value-get/digital-sign.js +1 -1
  81. package/lib/cell-value-get/duration.js +3 -2
  82. package/lib/cell-value-get/geolocation.js +53 -30
  83. package/lib/cell-value-get/long-text.js +1 -1
  84. package/lib/cell-value-get/number.js +51 -18
  85. package/lib/cell-value-get/option.js +34 -8
  86. package/lib/cell-value-get/rate.js +15 -0
  87. package/lib/cell-value-set/date.js +30 -0
  88. package/lib/cell-value-set/number.js +53 -0
  89. package/lib/color/column-color.js +446 -0
  90. package/lib/color/gradient-color.js +110 -0
  91. package/lib/color/row-color.js +297 -0
  92. package/lib/column/{common.js → core.js} +1 -14
  93. package/lib/column/date.js +2 -2
  94. package/lib/column/number.js +3 -3
  95. package/lib/column/option.js +153 -0
  96. package/lib/common.js +27 -3
  97. package/lib/constants/color.js +20 -0
  98. package/lib/constants/column-permission.js +11 -0
  99. package/lib/constants/column.js +134 -1
  100. package/lib/constants/filter/index.js +5 -0
  101. package/lib/constants/formula.js +2 -0
  102. package/lib/constants/grid-header.js +10 -0
  103. package/lib/constants/group.js +36 -0
  104. package/lib/constants/limit.js +7 -0
  105. package/lib/constants/reg.js +9 -0
  106. package/lib/constants/row-color.js +17 -0
  107. package/lib/constants/sort.js +18 -0
  108. package/lib/filter/core.js +336 -0
  109. package/lib/filter/filter-column/array.js +91 -0
  110. package/lib/filter/filter-column/checkbox.js +18 -0
  111. package/lib/filter/filter-column/collaborator.js +80 -0
  112. package/lib/filter/filter-column/creator.js +63 -0
  113. package/lib/filter/filter-column/date.js +106 -0
  114. package/lib/filter/filter-column/digital-sign.js +33 -0
  115. package/lib/filter/filter-column/file.js +31 -0
  116. package/lib/filter/filter-column/formula.js +61 -0
  117. package/lib/filter/filter-column/geolocation.js +62 -0
  118. package/lib/filter/filter-column/link.js +24 -0
  119. package/lib/filter/filter-column/long-text.js +32 -0
  120. package/lib/filter/filter-column/multiple-select.js +72 -0
  121. package/lib/filter/filter-column/number.js +101 -0
  122. package/lib/filter/filter-column/single-select.js +49 -0
  123. package/lib/filter/filter-column/text.js +64 -0
  124. package/lib/filter/filter-row.js +239 -0
  125. package/lib/group/core.js +126 -0
  126. package/lib/group/group-row.js +413 -0
  127. package/lib/index.js +177 -7
  128. package/lib/link/core.js +90 -0
  129. package/lib/number.js +26 -0
  130. package/lib/row/core.js +189 -0
  131. package/lib/sort/core.js +102 -0
  132. package/lib/sort/sort-column/array.js +76 -0
  133. package/lib/sort/sort-column/checkbox.js +26 -0
  134. package/lib/sort/sort-column/collaborator.js +20 -0
  135. package/lib/sort/sort-column/date.js +29 -0
  136. package/lib/sort/sort-column/formula.js +53 -0
  137. package/lib/sort/sort-column/link.js +36 -0
  138. package/lib/sort/sort-column/multiple-select.js +49 -0
  139. package/lib/sort/sort-column/number.js +29 -0
  140. package/lib/sort/sort-column/single-select.js +34 -0
  141. package/lib/sort/sort-column/text.js +66 -0
  142. package/lib/sort/sort-row.js +115 -0
  143. package/lib/table/column.js +32 -0
  144. package/lib/table/core.js +18 -0
  145. package/lib/table/row.js +30 -0
  146. package/lib/validate/filter.js +3 -3
  147. package/lib/validate/geolocation.js +9 -0
  148. package/lib/view/core.js +143 -0
  149. package/lib/view/formula.js +154 -0
  150. package/lib/view/group.js +36 -0
  151. package/lib/view/summaries.js +173 -0
  152. package/package.json +5 -3
@@ -0,0 +1,336 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
+ var filter = require('../validate/filter.js');
7
+ var date = require('../date.js');
8
+ var index = require('../constants/filter/index.js');
9
+ var cellType = require('../constants/cell-type.js');
10
+ var formula = require('../constants/formula.js');
11
+ var filterModifier = require('../constants/filter/filter-modifier.js');
12
+
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
16
+
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
+ 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
+ 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
+
21
+ /**
22
+ * Get filters which excludes incomplete
23
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
24
+ * @param {array} columns
25
+ * @returns valid filters, array
26
+ */
27
+ var getValidFilters = function getValidFilters(filters, columns) {
28
+ if (!Array.isArray(filters) || !Array.isArray(columns)) {
29
+ return [];
30
+ }
31
+ return filters.filter(function (filter$1) {
32
+ var _ValidateFilter$valid = filter.ValidateFilter.validate(filter$1, columns),
33
+ error_message = _ValidateFilter$valid.error_message;
34
+ return !error_message || error_message !== index.FILTER_ERR_MSG.INCOMPLETE_FILTER;
35
+ });
36
+ };
37
+
38
+ /**
39
+ * Get filters without error messages
40
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }]
41
+ * @param {array} columns
42
+ * @returns valid filters, array
43
+ */
44
+ var getValidFiltersWithoutError = function getValidFiltersWithoutError(filters, columns) {
45
+ if (!Array.isArray(filters) || !Array.isArray(columns)) {
46
+ return [];
47
+ }
48
+ return filters.filter(function (filter$1) {
49
+ return !filter.ValidateFilter.validate(filter$1, columns).error_message;
50
+ });
51
+ };
52
+
53
+ /**
54
+ * Generate date for filter
55
+ * @param {string} filterTermModifier
56
+ * @param {any} filterTerm
57
+ * @returns date | date range, object
58
+ */
59
+ var otherDate = function otherDate(filterTermModifier, filterTerm) {
60
+ var today = new Date();
61
+ var year = today.getFullYear();
62
+ var month = today.getMonth(); // use js month representation: 0 - 11
63
+ var day = today.getDate();
64
+
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];
67
+ days[1] = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28; // is leap year
68
+ switch (filterTermModifier) {
69
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.TODAY:
70
+ {
71
+ // today, should start at 0:00 and end at 24:00
72
+ return new Date(year, month, day, 0, 0, 0);
73
+ }
74
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.TOMORROW:
75
+ {
76
+ return new Date(year, month, day + 1);
77
+ }
78
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.YESTERDAY:
79
+ {
80
+ return new Date(year, month, day - 1);
81
+ }
82
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_AGO:
83
+ {
84
+ return new Date(year, month, day - 7);
85
+ }
86
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_WEEK_FROM_NOW:
87
+ {
88
+ return new Date(year, month, day + 7);
89
+ }
90
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_AGO:
91
+ {
92
+ var pastMonth = month - 1;
93
+ var monthDaysIndex = month === 0 ? 11 : pastMonth;
94
+ var currentDay = day > days[monthDaysIndex] ? days[monthDaysIndex] : day;
95
+ return new Date(year, pastMonth, currentDay);
96
+ }
97
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.ONE_MONTH_FROM_NOW:
98
+ {
99
+ var nextMonth = month + 1;
100
+ var _monthDaysIndex = month === 11 ? 0 : nextMonth;
101
+ var _currentDay = day > days[_monthDaysIndex] ? days[_monthDaysIndex] : day;
102
+ return new Date(year, nextMonth, _currentDay);
103
+ }
104
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_AGO:
105
+ {
106
+ return new Date(year, month, day - Number(filterTerm));
107
+ }
108
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.NUMBER_OF_DAYS_FROM_NOW:
109
+ {
110
+ return new Date(year, month, day + Number(filterTerm));
111
+ }
112
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE:
113
+ {
114
+ return new Date(filterTerm);
115
+ }
116
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_PAST_WEEK:
117
+ {
118
+ var weekDay = today.getDay() !== 0 ? today.getDay() : 7;
119
+ return {
120
+ startDate: new Date(year, month, day - weekDay - 6),
121
+ endDate: new Date(year, month, day - weekDay)
122
+ };
123
+ }
124
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THIS_WEEK:
125
+ {
126
+ var _weekDay = today.getDay() !== 0 ? today.getDay() : 7;
127
+ return {
128
+ startDate: new Date(year, month, day - _weekDay + 1),
129
+ endDate: new Date(year, month, day - _weekDay + 7)
130
+ };
131
+ }
132
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_NEXT_WEEK:
133
+ {
134
+ var _weekDay2 = today.getDay() !== 0 ? today.getDay() : 7;
135
+ return {
136
+ startDate: new Date(year, month, day - _weekDay2 + 8),
137
+ endDate: new Date(year, month, day - _weekDay2 + 14)
138
+ };
139
+ }
140
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_PAST_MONTH:
141
+ {
142
+ var _pastMonth = month - 1;
143
+ return {
144
+ startDate: new Date(year, _pastMonth, 1),
145
+ endDate: new Date(year, _pastMonth, days[month === 0 ? 11 : _pastMonth])
146
+ };
147
+ }
148
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THIS_MONTH:
149
+ {
150
+ return {
151
+ startDate: new Date(year, month, 1),
152
+ endDate: new Date(year, month, days[month])
153
+ };
154
+ }
155
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_NEXT_MONTH:
156
+ {
157
+ var _nextMonth = month + 1;
158
+ return {
159
+ startDate: new Date(year, _nextMonth, 1),
160
+ endDate: new Date(year, _nextMonth, month === 11 ? days[0] : days[_nextMonth])
161
+ };
162
+ }
163
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_PAST_YEAR:
164
+ {
165
+ var pastYear = year - 1;
166
+ return {
167
+ startDate: new Date(pastYear, 0, 1),
168
+ // The computer's month starts at 0.
169
+ endDate: new Date(pastYear, 11, 31)
170
+ };
171
+ }
172
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THIS_YEAR:
173
+ {
174
+ return {
175
+ startDate: new Date(year, 0, 1),
176
+ endDate: new Date(year, 11, 31)
177
+ };
178
+ }
179
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_NEXT_YEAR:
180
+ {
181
+ var nextYear = year + 1;
182
+ return {
183
+ startDate: new Date(nextYear, 0, 1),
184
+ endDate: new Date(nextYear, 11, 31)
185
+ };
186
+ }
187
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_NEXT_NUMBERS_OF_DAYS:
188
+ {
189
+ return {
190
+ startDate: new Date(year, month, day + 1, 0, 0, 0),
191
+ endDate: new Date(year, month, day + Number(filterTerm))
192
+ };
193
+ }
194
+ case filterModifier.FILTER_TERM_MODIFIER_TYPE.THE_PAST_NUMBERS_OF_DAYS:
195
+ {
196
+ return {
197
+ startDate: new Date(year, month, day - Number(filterTerm)),
198
+ endDate: new Date(year, month, day, 0, 0, 0)
199
+ };
200
+ }
201
+ default:
202
+ {
203
+ return {};
204
+ }
205
+ }
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
+ */
214
+ var getFormattedFilterOtherDate = function getFormattedFilterOtherDate(filterTermModifier, filterTerm) {
215
+ var _otherDate = otherDate(filterTermModifier, filterTerm);
216
+ if (EXACT_DATE_TERM_MODIFIER_TYPES.includes(filterTermModifier)) {
217
+ return date.DateUtils.format(_otherDate);
218
+ }
219
+ var startDate = _otherDate.startDate,
220
+ endDate = _otherDate.endDate;
221
+ return {
222
+ startDate: startDate ? date.DateUtils.format(startDate) : '',
223
+ endDate: endDate ? date.DateUtils.format(endDate) : ''
224
+ };
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
+ */
233
+ var getFormattedFilter = function getFormattedFilter(filter, column) {
234
+ var filter_term = filter.filter_term,
235
+ filter_term_modifier = filter.filter_term_modifier;
236
+ var columnType = column.type,
237
+ columnData = column.data;
238
+ var formattedFilter = filter;
239
+ switch (columnType) {
240
+ case cellType.CellType.FORMULA:
241
+ case cellType.CellType.LINK_FORMULA:
242
+ {
243
+ var result_type = columnData.result_type,
244
+ array_type = columnData.array_type,
245
+ array_data = columnData.array_data;
246
+ if (result_type === formula.FORMULA_RESULT_TYPE.DATE) {
247
+ formattedFilter.other_date = getFormattedFilterOtherDate(filter_term_modifier, filter_term);
248
+ }
249
+ if (result_type === formula.FORMULA_RESULT_TYPE.ARRAY) {
250
+ var linkedColumn = {
251
+ type: array_type,
252
+ data: array_data
253
+ };
254
+ formattedFilter.linked_column = linkedColumn;
255
+ formattedFilter = getFormattedFilter(formattedFilter, linkedColumn);
256
+ }
257
+ break;
258
+ }
259
+ case cellType.CellType.DATE:
260
+ case cellType.CellType.CTIME:
261
+ case cellType.CellType.MTIME:
262
+ {
263
+ formattedFilter.other_date = getFormattedFilterOtherDate(filter_term_modifier, filter_term);
264
+ break;
265
+ }
266
+ case cellType.CellType.LINK:
267
+ {
268
+ var _ref = columnData || {},
269
+ _array_type = _ref.array_type,
270
+ _array_data = _ref.array_data;
271
+ var _linkedColumn = {
272
+ type: _array_type,
273
+ data: _array_data
274
+ };
275
+ var filterColumnData = _objectSpread(_objectSpread({}, columnData), {}, {
276
+ result_type: formula.FORMULA_RESULT_TYPE.ARRAY
277
+ });
278
+ var filterColumn = _objectSpread(_objectSpread({}, column), {}, {
279
+ data: filterColumnData
280
+ });
281
+ formattedFilter.column = filterColumn;
282
+ formattedFilter.linked_column = _linkedColumn;
283
+ formattedFilter = getFormattedFilter(formattedFilter, _linkedColumn);
284
+ break;
285
+ }
286
+ }
287
+ return formattedFilter;
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
+ */
295
+ var getFormattedFilters = function getFormattedFilters(filters) {
296
+ return filters.map(function (filter) {
297
+ return getFormattedFilter(filter, filter.column);
298
+ });
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
+ */
307
+ var deleteInvalidFilter = function deleteInvalidFilter(filters, columns) {
308
+ var cleanFilters = [];
309
+ filters.forEach(function (filter$1) {
310
+ var column_key = filter$1.column_key;
311
+ var _ValidateFilter$valid2 = filter.ValidateFilter.validate(filter$1, columns),
312
+ error_message = _ValidateFilter$valid2.error_message;
313
+ if (error_message) {
314
+ if (error_message !== index.FILTER_ERR_MSG.INCOMPLETE_FILTER) {
315
+ throw new Error(error_message);
316
+ }
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);
325
+ }
326
+ });
327
+ return cleanFilters;
328
+ };
329
+
330
+ exports.deleteInvalidFilter = deleteInvalidFilter;
331
+ exports.getFormattedFilter = getFormattedFilter;
332
+ exports.getFormattedFilterOtherDate = getFormattedFilterOtherDate;
333
+ exports.getFormattedFilters = getFormattedFilters;
334
+ exports.getValidFilters = getValidFilters;
335
+ exports.getValidFiltersWithoutError = getValidFiltersWithoutError;
336
+ exports.otherDate = otherDate;
@@ -0,0 +1,91 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var cellValue = require('../../cell-value-get/cell-value.js');
6
+ var number = require('../../column/number.js');
7
+ var checkbox = require('./checkbox.js');
8
+ var collaborator = require('./collaborator.js');
9
+ var date = require('./date.js');
10
+ var text = require('./text.js');
11
+ var multipleSelect = require('./multiple-select.js');
12
+ var number$1 = require('./number.js');
13
+ var cellType = require('../../constants/cell-type.js');
14
+ var column = require('../../constants/column.js');
15
+ var filterPredicate = require('../../constants/filter/filter-predicate.js');
16
+
17
+ var TRUE_VALUE = [true, 'true'];
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) {
28
+ var username = _ref.username,
29
+ userId = _ref.userId;
30
+ var column$1 = filter.column,
31
+ linked_column = filter.linked_column;
32
+ var filter_predicate = filter.filter_predicate;
33
+ if (Array.isArray(array)) {
34
+ if (filter_predicate === filterPredicate.FILTER_PREDICATE_TYPE.EMPTY) {
35
+ return array.length === 0;
36
+ }
37
+ if (filter_predicate === filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY) {
38
+ return array.length > 0;
39
+ }
40
+ }
41
+ if (!linked_column) {
42
+ return text.textFilter('', filter, userId);
43
+ }
44
+ var linkedColumnType = linked_column.type;
45
+ if (linkedColumnType === cellType.CellType.BOOL || linkedColumnType === cellType.CellType.CHECKBOX) {
46
+ var normalizedArray = array;
47
+ if (Array.isArray(array)) {
48
+ normalizedArray = array[0];
49
+ }
50
+ normalizedArray = TRUE_VALUE.includes(normalizedArray);
51
+ return checkbox.checkboxFilter(normalizedArray, filter);
52
+ }
53
+ if (linkedColumnType === cellType.CellType.SINGLE_SELECT) {
54
+ var _normalizedArray = array;
55
+ if (array && !Array.isArray(array)) {
56
+ _normalizedArray = [array];
57
+ }
58
+ return multipleSelect.multipleSelectFilter(_normalizedArray, filter);
59
+ }
60
+ if (linkedColumnType === cellType.CellType.MULTIPLE_SELECT) {
61
+ return multipleSelect.multipleSelectFilter(array, filter);
62
+ }
63
+ if (number.isNumericColumn({
64
+ type: linkedColumnType
65
+ })) {
66
+ var _normalizedArray2 = array;
67
+ if (Array.isArray(array)) {
68
+ var cellValueLength = array.length;
69
+ if (cellValueLength === 0) {
70
+ _normalizedArray2 = '';
71
+ } else if (cellValueLength === 1) {
72
+ _normalizedArray2 = array[0];
73
+ }
74
+ }
75
+ return number$1.numberFilter(_normalizedArray2, filter);
76
+ }
77
+ if (column.DATE_COLUMN_OPTIONS.includes(linkedColumnType)) {
78
+ var newCellValue = array;
79
+ if (Array.isArray(array)) {
80
+ newCellValue = String(array);
81
+ }
82
+ return date.dateFilter(newCellValue, filter);
83
+ }
84
+ if (column.COLLABORATOR_COLUMN_TYPES.includes(linkedColumnType)) {
85
+ return collaborator.collaboratorFilter(array, filter, username);
86
+ }
87
+ var displayString = cellValue.getFormulaDisplayString(array, column$1.data) || '';
88
+ return text.textFilter(displayString, filter, userId);
89
+ };
90
+
91
+ exports.filterByArrayType = filterByArrayType;
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /**
6
+ * Filter checkbox
7
+ * @param {bool} checked
8
+ * @param {bool} filter_term
9
+ * @returns boolean
10
+ */
11
+ var checkboxFilter = function checkboxFilter(checked, _ref) {
12
+ var filter_term = _ref.filter_term;
13
+ var filterTerm = filter_term || false;
14
+ var normalizedChecked = checked || false;
15
+ return normalizedChecked === filterTerm;
16
+ };
17
+
18
+ exports.checkboxFilter = checkboxFilter;
@@ -0,0 +1,80 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
6
+ var filterPredicate = require('../../constants/filter/filter-predicate.js');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
11
+
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) {
21
+ var filter_predicate = _ref.filter_predicate,
22
+ filter_term = _ref.filter_term;
23
+ switch (filter_predicate) {
24
+ case filterPredicate.FILTER_PREDICATE_TYPE.HAS_ANY_OF:
25
+ {
26
+ return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.some(function (email) {
27
+ return emails.includes(email);
28
+ });
29
+ }
30
+ case filterPredicate.FILTER_PREDICATE_TYPE.HAS_ALL_OF:
31
+ {
32
+ return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.every(function (email) {
33
+ return emails.includes(email);
34
+ });
35
+ }
36
+ case filterPredicate.FILTER_PREDICATE_TYPE.HAS_NONE_OF:
37
+ {
38
+ if (!Array.isArray(filter_term) || filter_term.length === 0 || !Array.isArray(emails) || emails.length === 0) {
39
+ return true;
40
+ }
41
+ return filter_term.every(function (email) {
42
+ return emails.indexOf(email) < 0;
43
+ });
44
+ }
45
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_EXACTLY:
46
+ {
47
+ if (!Array.isArray(filter_term) || filter_term.length === 0) {
48
+ return true;
49
+ }
50
+ if (!Array.isArray(emails) || emails.length === 0) {
51
+ return false;
52
+ }
53
+ var nonReptCellValue = _toConsumableArray__default["default"](new Set(emails));
54
+ if (nonReptCellValue.length !== filter_term.length) {
55
+ return false;
56
+ }
57
+ return filter_term.every(function (email) {
58
+ return nonReptCellValue.includes(email);
59
+ });
60
+ }
61
+ case filterPredicate.FILTER_PREDICATE_TYPE.EMPTY:
62
+ {
63
+ return !Array.isArray(emails) || emails.length === 0;
64
+ }
65
+ case filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY:
66
+ {
67
+ return Array.isArray(emails) && emails.length > 0;
68
+ }
69
+ case filterPredicate.FILTER_PREDICATE_TYPE.INCLUDE_ME:
70
+ {
71
+ return Array.isArray(emails) && emails.indexOf(username) > -1;
72
+ }
73
+ default:
74
+ {
75
+ return false;
76
+ }
77
+ }
78
+ };
79
+
80
+ exports.collaboratorFilter = collaboratorFilter;
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var filterPredicate = require('../../constants/filter/filter-predicate.js');
6
+
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) {
16
+ var filter_predicate = _ref.filter_predicate,
17
+ filter_term = _ref.filter_term;
18
+ switch (filter_predicate) {
19
+ case filterPredicate.FILTER_PREDICATE_TYPE.CONTAINS:
20
+ {
21
+ if (!Array.isArray(filter_term)) {
22
+ return true;
23
+ }
24
+ if (!email) {
25
+ return false;
26
+ }
27
+ return filter_term.findIndex(function (filterEmail) {
28
+ return filterEmail === email;
29
+ }) > -1;
30
+ }
31
+ case filterPredicate.FILTER_PREDICATE_TYPE.NOT_CONTAIN:
32
+ {
33
+ if (!Array.isArray(filter_term) || !email) {
34
+ return true;
35
+ }
36
+ return filter_term.findIndex(function (filterEmail) {
37
+ return filterEmail === email;
38
+ }) < 0;
39
+ }
40
+ case filterPredicate.FILTER_PREDICATE_TYPE.INCLUDE_ME:
41
+ {
42
+ return email === username;
43
+ }
44
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS:
45
+ {
46
+ if (!filter_term) return true;
47
+ if (!Array.isArray(filter_term)) return email === filter_term;
48
+ return email === filter_term[0];
49
+ }
50
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_NOT:
51
+ {
52
+ if (!filter_term) return true;
53
+ if (!Array.isArray(filter_term)) return email !== filter_term;
54
+ return email !== filter_term[0];
55
+ }
56
+ default:
57
+ {
58
+ return false;
59
+ }
60
+ }
61
+ };
62
+
63
+ exports.creatorFilter = creatorFilter;
@@ -0,0 +1,106 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var date = require('../../date.js');
6
+ var filterPredicate = require('../../constants/filter/filter-predicate.js');
7
+ var filterModifier = require('../../constants/filter/filter-modifier.js');
8
+
9
+ /**
10
+ * Filter date
11
+ * @param {string} date
12
+ * @param {string} filter_predicate
13
+ * @param {string} filter_term_modifier
14
+ * @param {any} filter_term date string or number etc.
15
+ * @param {string|object} other_date date string or { startDate, endDate }
16
+ * @returns bool
17
+ */
18
+ var dateFilter = function dateFilter(date$1, _ref) {
19
+ var filter_predicate = _ref.filter_predicate,
20
+ filter_term_modifier = _ref.filter_term_modifier,
21
+ filter_term = _ref.filter_term,
22
+ other_date = _ref.other_date;
23
+ switch (filter_predicate) {
24
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS:
25
+ {
26
+ return filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || date.DateUtils.format(date$1) === other_date;
27
+ }
28
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_WITHIN:
29
+ {
30
+ if (filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
31
+ return true;
32
+ }
33
+ if (!date$1) {
34
+ return false;
35
+ }
36
+ var startDate = other_date.startDate,
37
+ endDate = other_date.endDate;
38
+ var currentDate = date.DateUtils.format(date$1);
39
+ return currentDate >= startDate && currentDate <= endDate;
40
+ }
41
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_BEFORE:
42
+ {
43
+ if (filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
44
+ return true;
45
+ }
46
+ if (!date$1 || !date.DateUtils.getValidDate(date$1)) {
47
+ return false;
48
+ }
49
+ return date.DateUtils.format(date$1) < other_date;
50
+ }
51
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_AFTER:
52
+ {
53
+ if (filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
54
+ return true;
55
+ }
56
+ if (!date$1 || !date.DateUtils.getValidDate(date$1)) {
57
+ return false;
58
+ }
59
+ return date.DateUtils.format(date$1) > other_date;
60
+ }
61
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_ON_OR_BEFORE:
62
+ {
63
+ if (filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
64
+ return true;
65
+ }
66
+ if (!date$1 || !date.DateUtils.getValidDate(date$1)) {
67
+ return false;
68
+ }
69
+ return date.DateUtils.format(date$1) <= other_date;
70
+ }
71
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_ON_OR_AFTER:
72
+ {
73
+ if (filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
74
+ return true;
75
+ }
76
+ if (!date$1 || !date.DateUtils.getValidDate(date$1)) {
77
+ return false;
78
+ }
79
+ return date.DateUtils.format(date$1) >= other_date;
80
+ }
81
+ case filterPredicate.FILTER_PREDICATE_TYPE.IS_NOT:
82
+ {
83
+ if (filter_term_modifier === filterModifier.FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term) {
84
+ return true;
85
+ }
86
+ if (!date$1 || !date.DateUtils.getValidDate(date$1)) {
87
+ return false;
88
+ }
89
+ return date.DateUtils.format(date$1) !== other_date;
90
+ }
91
+ case filterPredicate.FILTER_PREDICATE_TYPE.EMPTY:
92
+ {
93
+ return !(date$1 && date.DateUtils.getValidDate(date$1));
94
+ }
95
+ case filterPredicate.FILTER_PREDICATE_TYPE.NOT_EMPTY:
96
+ {
97
+ return !!(date$1 && date.DateUtils.getValidDate(date$1));
98
+ }
99
+ default:
100
+ {
101
+ return false;
102
+ }
103
+ }
104
+ };
105
+
106
+ exports.dateFilter = dateFilter;