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.
- package/README.md +12 -3
- package/dist/index.js +1 -1
- package/es/cell-value-get/cell-value.js +82 -60
- package/es/cell-value-get/collaborator.js +9 -2
- package/es/cell-value-get/duration.js +3 -3
- package/es/cell-value-get/geolocation.js +23 -25
- package/es/cell-value-get/number.js +19 -11
- package/es/cell-value-get/option.js +18 -4
- package/es/cell-value-get/rate.js +5 -0
- package/es/cell-value-set/date.js +9 -3
- package/es/{column/color.js → color/column-color.js} +25 -3
- package/es/{row/color.js → color/row-color.js} +12 -1
- package/es/column/option.js +37 -7
- package/es/common.js +23 -2
- package/es/constants/formula.js +2 -1
- package/es/filter/core.js +61 -26
- package/es/filter/filter-column/array.js +35 -30
- package/es/filter/filter-column/checkbox.js +9 -3
- package/es/filter/filter-column/collaborator.js +20 -15
- package/es/filter/filter-column/creator.js +22 -13
- package/es/filter/filter-column/date.js +57 -14
- package/es/filter/filter-column/digital-sign.js +11 -8
- package/es/filter/filter-column/file.js +9 -6
- package/es/filter/filter-column/formula.js +16 -8
- package/es/filter/filter-column/geolocation.js +12 -7
- package/es/filter/filter-column/link.js +10 -2
- package/es/filter/filter-column/long-text.js +10 -7
- package/es/filter/filter-column/multiple-select.js +17 -13
- package/es/filter/filter-column/number.js +25 -21
- package/es/filter/filter-column/single-select.js +14 -10
- package/es/filter/filter-column/text.js +18 -13
- package/es/filter/filter-row.js +35 -0
- package/es/group/core.js +15 -6
- package/es/group/group-row.js +39 -3
- package/es/index.js +10 -10
- package/es/link/core.js +14 -14
- package/es/number.js +11 -3
- package/es/row/core.js +20 -1
- package/es/sort/core.js +66 -7
- package/es/sort/sort-column/array.js +39 -30
- package/es/sort/sort-column/checkbox.js +12 -5
- package/es/sort/sort-column/collaborator.js +11 -4
- package/es/sort/sort-column/date.js +12 -12
- package/es/sort/sort-column/formula.js +21 -12
- package/es/sort/sort-column/link.js +18 -9
- package/es/sort/sort-column/multiple-select.js +26 -26
- package/es/sort/sort-column/number.js +15 -8
- package/es/sort/sort-column/single-select.js +16 -8
- package/es/sort/sort-column/text.js +24 -10
- package/es/sort/sort-row.js +22 -38
- package/es/table/column.js +2 -2
- package/es/table/core.js +2 -2
- package/es/table/row.js +4 -4
- package/es/view/core.js +20 -21
- package/es/view/formula.js +35 -31
- package/es/view/group.js +4 -4
- package/es/view/summaries.js +17 -29
- package/lib/cell-value-get/cell-value.js +82 -60
- package/lib/cell-value-get/collaborator.js +9 -2
- package/lib/cell-value-get/duration.js +4 -2
- package/lib/cell-value-get/geolocation.js +23 -25
- package/lib/cell-value-get/number.js +19 -11
- package/lib/cell-value-get/option.js +18 -4
- package/lib/cell-value-get/rate.js +5 -0
- package/lib/cell-value-set/date.js +9 -3
- package/lib/{column/color.js → color/column-color.js} +31 -9
- package/lib/{row/color.js → color/row-color.js} +12 -1
- package/lib/column/option.js +37 -7
- package/lib/common.js +23 -1
- package/lib/constants/formula.js +2 -0
- package/lib/filter/core.js +61 -26
- package/lib/filter/filter-column/array.js +35 -30
- package/lib/filter/filter-column/checkbox.js +9 -3
- package/lib/filter/filter-column/collaborator.js +20 -15
- package/lib/filter/filter-column/creator.js +22 -13
- package/lib/filter/filter-column/date.js +57 -14
- package/lib/filter/filter-column/digital-sign.js +11 -8
- package/lib/filter/filter-column/file.js +9 -6
- package/lib/filter/filter-column/formula.js +16 -8
- package/lib/filter/filter-column/geolocation.js +12 -7
- package/lib/filter/filter-column/link.js +10 -2
- package/lib/filter/filter-column/long-text.js +10 -7
- package/lib/filter/filter-column/multiple-select.js +17 -13
- package/lib/filter/filter-column/number.js +25 -21
- package/lib/filter/filter-column/single-select.js +14 -10
- package/lib/filter/filter-column/text.js +18 -13
- package/lib/filter/filter-row.js +35 -0
- package/lib/group/core.js +15 -6
- package/lib/group/group-row.js +39 -3
- package/lib/index.js +47 -45
- package/lib/link/core.js +14 -14
- package/lib/number.js +11 -3
- package/lib/row/core.js +20 -1
- package/lib/sort/core.js +71 -6
- package/lib/sort/sort-column/array.js +39 -30
- package/lib/sort/sort-column/checkbox.js +12 -5
- package/lib/sort/sort-column/collaborator.js +11 -4
- package/lib/sort/sort-column/date.js +12 -12
- package/lib/sort/sort-column/formula.js +21 -12
- package/lib/sort/sort-column/link.js +18 -9
- package/lib/sort/sort-column/multiple-select.js +25 -26
- package/lib/sort/sort-column/number.js +15 -8
- package/lib/sort/sort-column/single-select.js +16 -8
- package/lib/sort/sort-column/text.js +24 -10
- package/lib/sort/sort-row.js +21 -42
- package/lib/table/column.js +2 -2
- package/lib/table/core.js +2 -2
- package/lib/table/row.js +4 -4
- package/lib/view/core.js +20 -21
- package/lib/view/formula.js +35 -31
- package/lib/view/group.js +4 -4
- package/lib/view/summaries.js +17 -29
- package/package.json +1 -1
- package/es/table/index.js +0 -14
- package/lib/table/index.js +0 -18
package/es/column/option.js
CHANGED
|
@@ -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
|
|
71
|
+
var optionColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
58
72
|
var id = generateOptionID(options);
|
|
59
|
-
var
|
|
60
|
-
return
|
|
73
|
+
var colors = optionColor && SELECT_OPTION_COLORS.find(function (systemColor) {
|
|
74
|
+
return systemColor.COLOR === optionColor;
|
|
61
75
|
});
|
|
62
|
-
if (!
|
|
63
|
-
|
|
76
|
+
if (!colors) {
|
|
77
|
+
colors = getRandomOptionColor(options);
|
|
64
78
|
}
|
|
65
79
|
return {
|
|
66
80
|
id: id,
|
|
67
81
|
name: optionName,
|
|
68
|
-
color:
|
|
69
|
-
textColor:
|
|
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
|
|
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
|
-
|
|
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 };
|
package/es/constants/formula.js
CHANGED
|
@@ -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
|
-
*
|
|
15
|
-
* @param {array} filters [{ column_key
|
|
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
|
-
*
|
|
32
|
-
* @param {array} filters [{ column_key
|
|
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
|
-
|
|
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
|
|
197
|
-
|
|
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
|
-
}
|
|
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
|
|
239
|
-
_array_type =
|
|
240
|
-
_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
|
|
272
|
-
|
|
306
|
+
if (error_message !== FILTER_ERR_MSG.INCOMPLETE_FILTER) {
|
|
307
|
+
throw new Error(error_message);
|
|
273
308
|
}
|
|
274
|
-
|
|
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
|
-
|
|
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(
|
|
29
|
+
if (Array.isArray(array)) {
|
|
24
30
|
if (filter_predicate === FILTER_PREDICATE_TYPE.EMPTY) {
|
|
25
|
-
return
|
|
31
|
+
return array.length === 0;
|
|
26
32
|
}
|
|
27
33
|
if (filter_predicate === FILTER_PREDICATE_TYPE.NOT_EMPTY) {
|
|
28
|
-
return
|
|
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
|
|
38
|
-
if (Array.isArray(
|
|
39
|
-
|
|
42
|
+
var normalizedArray = array;
|
|
43
|
+
if (Array.isArray(array)) {
|
|
44
|
+
normalizedArray = array[0];
|
|
40
45
|
}
|
|
41
|
-
|
|
42
|
-
return checkboxFilter(
|
|
46
|
+
normalizedArray = TRUE_VALUE.includes(normalizedArray);
|
|
47
|
+
return checkboxFilter(normalizedArray, filter);
|
|
43
48
|
}
|
|
44
49
|
if (linkedColumnType === CellType.SINGLE_SELECT) {
|
|
45
|
-
var
|
|
46
|
-
if (
|
|
47
|
-
|
|
50
|
+
var _normalizedArray = array;
|
|
51
|
+
if (array && !Array.isArray(array)) {
|
|
52
|
+
_normalizedArray = [array];
|
|
48
53
|
}
|
|
49
|
-
return multipleSelectFilter(
|
|
54
|
+
return multipleSelectFilter(_normalizedArray, filter);
|
|
50
55
|
}
|
|
51
56
|
if (linkedColumnType === CellType.MULTIPLE_SELECT) {
|
|
52
|
-
return multipleSelectFilter(
|
|
57
|
+
return multipleSelectFilter(array, filter);
|
|
53
58
|
}
|
|
54
59
|
if (isNumericColumn({
|
|
55
60
|
type: linkedColumnType
|
|
56
61
|
})) {
|
|
57
|
-
var
|
|
58
|
-
if (Array.isArray(
|
|
59
|
-
var cellValueLength =
|
|
62
|
+
var _normalizedArray2 = array;
|
|
63
|
+
if (Array.isArray(array)) {
|
|
64
|
+
var cellValueLength = array.length;
|
|
60
65
|
if (cellValueLength === 0) {
|
|
61
|
-
|
|
66
|
+
_normalizedArray2 = '';
|
|
62
67
|
} else if (cellValueLength === 1) {
|
|
63
|
-
|
|
68
|
+
_normalizedArray2 = array[0];
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
|
-
return numberFilter(
|
|
71
|
+
return numberFilter(_normalizedArray2, filter);
|
|
67
72
|
}
|
|
68
73
|
if (DATE_COLUMN_OPTIONS.includes(linkedColumnType)) {
|
|
69
|
-
var newCellValue =
|
|
70
|
-
if (Array.isArray(
|
|
71
|
-
newCellValue = String(
|
|
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(
|
|
81
|
+
return collaboratorFilter(array, filter, username);
|
|
77
82
|
}
|
|
78
|
-
var
|
|
79
|
-
return textFilter(
|
|
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
|
-
|
|
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
|
|
5
|
-
return
|
|
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
|
-
|
|
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(
|
|
14
|
-
return
|
|
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(
|
|
20
|
-
return
|
|
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(
|
|
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
|
|
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(
|
|
42
|
+
if (!Array.isArray(emails) || emails.length === 0) {
|
|
38
43
|
return false;
|
|
39
44
|
}
|
|
40
|
-
var nonReptCellValue = _toConsumableArray(new Set(
|
|
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(
|
|
55
|
+
return !Array.isArray(emails) || emails.length === 0;
|
|
51
56
|
}
|
|
52
57
|
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
53
58
|
{
|
|
54
|
-
return Array.isArray(
|
|
59
|
+
return Array.isArray(emails) && emails.length > 0;
|
|
55
60
|
}
|
|
56
61
|
case FILTER_PREDICATE_TYPE.INCLUDE_ME:
|
|
57
62
|
{
|
|
58
|
-
return Array.isArray(
|
|
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
|
-
|
|
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 (!
|
|
20
|
+
if (!email) {
|
|
16
21
|
return false;
|
|
17
22
|
}
|
|
18
|
-
return filter_term.findIndex(function (
|
|
19
|
-
return
|
|
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) || !
|
|
29
|
+
if (!Array.isArray(filter_term) || !email) {
|
|
25
30
|
return true;
|
|
26
31
|
}
|
|
27
|
-
return filter_term.findIndex(function (
|
|
28
|
-
return
|
|
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
|
|
38
|
+
return email === username;
|
|
34
39
|
}
|
|
35
40
|
case FILTER_PREDICATE_TYPE.IS:
|
|
36
41
|
{
|
|
37
|
-
|
|
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
|
-
|
|
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-
|
|
3
|
+
import { FILTER_TERM_MODIFIER_TYPE } from '../../constants/filter/filter-modifier.js';
|
|
6
4
|
|
|
7
|
-
|
|
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(
|
|
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(
|
|
22
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
89
|
+
return !(date && DateUtils.getValidDate(date));
|
|
47
90
|
}
|
|
48
91
|
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
49
92
|
{
|
|
50
|
-
return
|
|
93
|
+
return !!(date && DateUtils.getValidDate(date));
|
|
51
94
|
}
|
|
52
95
|
default:
|
|
53
96
|
{
|