dtable-utils 0.0.3 → 4.2.0
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 +56 -5
- package/dist/index.js +1 -1
- package/es/cell-value-get/cell-value.js +250 -20
- package/es/cell-value-get/collaborator.js +16 -3
- package/es/cell-value-get/digital-sign.js +1 -1
- package/es/cell-value-get/duration.js +3 -3
- package/es/cell-value-get/geolocation.js +52 -30
- package/es/cell-value-get/long-text.js +1 -1
- package/es/cell-value-get/number.js +51 -19
- package/es/cell-value-get/option.js +33 -9
- package/es/cell-value-get/rate.js +11 -0
- package/es/cell-value-set/date.js +26 -0
- package/es/cell-value-set/number.js +53 -1
- package/es/color/column-color.js +437 -0
- package/es/color/gradient-color.js +100 -0
- package/es/color/row-color.js +289 -0
- package/es/column/{common.js → core.js} +2 -14
- package/es/column/date.js +1 -1
- package/es/column/number.js +1 -1
- package/es/column/option.js +143 -0
- package/es/common.js +23 -3
- package/es/constants/color.js +16 -0
- package/es/constants/column-permission.js +7 -0
- package/es/constants/column.js +127 -2
- package/es/constants/filter/index.js +5 -1
- package/es/constants/formula.js +2 -1
- package/es/constants/grid-header.js +6 -0
- package/es/constants/group.js +23 -0
- package/es/constants/limit.js +3 -0
- package/es/constants/reg.js +4 -0
- package/es/constants/row-color.js +11 -0
- package/es/constants/sort.js +11 -0
- package/es/date.js +1 -1
- package/es/filter/core.js +322 -0
- package/es/filter/filter-column/array.js +87 -0
- package/es/filter/filter-column/checkbox.js +14 -0
- package/es/filter/filter-column/collaborator.js +72 -0
- package/es/filter/filter-column/creator.js +59 -0
- package/es/filter/filter-column/date.js +102 -0
- package/es/filter/filter-column/digital-sign.js +29 -0
- package/es/filter/filter-column/file.js +27 -0
- package/es/filter/filter-column/formula.js +57 -0
- package/es/filter/filter-column/geolocation.js +58 -0
- package/es/filter/filter-column/link.js +20 -0
- package/es/filter/filter-column/long-text.js +28 -0
- package/es/filter/filter-column/multiple-select.js +64 -0
- package/es/filter/filter-column/number.js +97 -0
- package/es/filter/filter-column/single-select.js +45 -0
- package/es/filter/filter-column/text.js +60 -0
- package/es/filter/filter-row.js +233 -0
- package/es/group/core.js +116 -0
- package/es/group/group-row.js +402 -0
- package/es/index.js +63 -11
- package/es/link/core.js +78 -0
- package/es/number.js +21 -0
- package/es/row/core.js +180 -0
- package/es/sort/core.js +91 -0
- package/es/sort/sort-column/array.js +72 -0
- package/es/sort/sort-column/checkbox.js +22 -0
- package/es/sort/sort-column/collaborator.js +16 -0
- package/es/sort/sort-column/date.js +25 -0
- package/es/sort/sort-column/formula.js +49 -0
- package/es/sort/sort-column/link.js +32 -0
- package/es/sort/sort-column/multiple-select.js +45 -0
- package/es/sort/sort-column/number.js +31 -0
- package/es/sort/sort-column/single-select.js +36 -0
- package/es/sort/sort-column/text.js +69 -0
- package/es/sort/sort-row.js +110 -0
- package/es/table/column.js +27 -0
- package/es/table/core.js +14 -0
- package/es/table/row.js +25 -0
- package/es/validate/filter.js +1 -1
- package/es/validate/geolocation.js +5 -0
- package/es/view/core.js +134 -0
- package/es/view/formula.js +147 -0
- package/es/view/group.js +32 -0
- package/es/view/summaries.js +167 -0
- package/lib/cell-value-get/cell-value.js +254 -19
- package/lib/cell-value-get/collaborator.js +16 -2
- package/lib/cell-value-get/digital-sign.js +1 -1
- package/lib/cell-value-get/duration.js +3 -2
- package/lib/cell-value-get/geolocation.js +53 -30
- package/lib/cell-value-get/long-text.js +1 -1
- package/lib/cell-value-get/number.js +51 -18
- package/lib/cell-value-get/option.js +34 -8
- package/lib/cell-value-get/rate.js +15 -0
- package/lib/cell-value-set/date.js +30 -0
- package/lib/cell-value-set/number.js +53 -0
- package/lib/color/column-color.js +446 -0
- package/lib/color/gradient-color.js +110 -0
- package/lib/color/row-color.js +297 -0
- package/lib/column/{common.js → core.js} +1 -14
- package/lib/column/date.js +2 -2
- package/lib/column/number.js +3 -3
- package/lib/column/option.js +151 -0
- package/lib/common.js +27 -3
- package/lib/constants/color.js +20 -0
- package/lib/constants/column-permission.js +11 -0
- package/lib/constants/column.js +134 -1
- package/lib/constants/filter/index.js +5 -0
- package/lib/constants/formula.js +2 -0
- package/lib/constants/grid-header.js +10 -0
- package/lib/constants/group.js +36 -0
- package/lib/constants/limit.js +7 -0
- package/lib/constants/reg.js +9 -0
- package/lib/constants/row-color.js +17 -0
- package/lib/constants/sort.js +18 -0
- package/lib/filter/core.js +336 -0
- package/lib/filter/filter-column/array.js +91 -0
- package/lib/filter/filter-column/checkbox.js +18 -0
- package/lib/filter/filter-column/collaborator.js +80 -0
- package/lib/filter/filter-column/creator.js +63 -0
- package/lib/filter/filter-column/date.js +106 -0
- package/lib/filter/filter-column/digital-sign.js +33 -0
- package/lib/filter/filter-column/file.js +31 -0
- package/lib/filter/filter-column/formula.js +61 -0
- package/lib/filter/filter-column/geolocation.js +62 -0
- package/lib/filter/filter-column/link.js +24 -0
- package/lib/filter/filter-column/long-text.js +32 -0
- package/lib/filter/filter-column/multiple-select.js +72 -0
- package/lib/filter/filter-column/number.js +101 -0
- package/lib/filter/filter-column/single-select.js +49 -0
- package/lib/filter/filter-column/text.js +64 -0
- package/lib/filter/filter-row.js +239 -0
- package/lib/group/core.js +126 -0
- package/lib/group/group-row.js +413 -0
- package/lib/index.js +177 -7
- package/lib/link/core.js +90 -0
- package/lib/number.js +26 -0
- package/lib/row/core.js +189 -0
- package/lib/sort/core.js +102 -0
- package/lib/sort/sort-column/array.js +76 -0
- package/lib/sort/sort-column/checkbox.js +26 -0
- package/lib/sort/sort-column/collaborator.js +20 -0
- package/lib/sort/sort-column/date.js +29 -0
- package/lib/sort/sort-column/formula.js +53 -0
- package/lib/sort/sort-column/link.js +36 -0
- package/lib/sort/sort-column/multiple-select.js +49 -0
- package/lib/sort/sort-column/number.js +35 -0
- package/lib/sort/sort-column/single-select.js +40 -0
- package/lib/sort/sort-column/text.js +74 -0
- package/lib/sort/sort-row.js +115 -0
- package/lib/table/column.js +32 -0
- package/lib/table/core.js +18 -0
- package/lib/table/row.js +30 -0
- package/lib/validate/filter.js +3 -3
- package/lib/validate/geolocation.js +9 -0
- package/lib/view/core.js +143 -0
- package/lib/view/formula.js +154 -0
- package/lib/view/group.js +36 -0
- package/lib/view/summaries.js +173 -0
- package/package.json +5 -3
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter checkbox
|
|
3
|
+
* @param {bool} checked
|
|
4
|
+
* @param {bool} filter_term
|
|
5
|
+
* @returns boolean
|
|
6
|
+
*/
|
|
7
|
+
var checkboxFilter = function checkboxFilter(checked, _ref) {
|
|
8
|
+
var filter_term = _ref.filter_term;
|
|
9
|
+
var filterTerm = filter_term || false;
|
|
10
|
+
var normalizedChecked = checked || false;
|
|
11
|
+
return normalizedChecked === filterTerm;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { checkboxFilter };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
3
|
+
|
|
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) {
|
|
13
|
+
var filter_predicate = _ref.filter_predicate,
|
|
14
|
+
filter_term = _ref.filter_term;
|
|
15
|
+
switch (filter_predicate) {
|
|
16
|
+
case FILTER_PREDICATE_TYPE.HAS_ANY_OF:
|
|
17
|
+
{
|
|
18
|
+
return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.some(function (email) {
|
|
19
|
+
return emails.includes(email);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
case FILTER_PREDICATE_TYPE.HAS_ALL_OF:
|
|
23
|
+
{
|
|
24
|
+
return !Array.isArray(filter_term) || filter_term.length === 0 || Array.isArray(emails) && filter_term.every(function (email) {
|
|
25
|
+
return emails.includes(email);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
case FILTER_PREDICATE_TYPE.HAS_NONE_OF:
|
|
29
|
+
{
|
|
30
|
+
if (!Array.isArray(filter_term) || filter_term.length === 0 || !Array.isArray(emails) || emails.length === 0) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return filter_term.every(function (email) {
|
|
34
|
+
return emails.indexOf(email) < 0;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
case FILTER_PREDICATE_TYPE.IS_EXACTLY:
|
|
38
|
+
{
|
|
39
|
+
if (!Array.isArray(filter_term) || filter_term.length === 0) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if (!Array.isArray(emails) || emails.length === 0) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
var nonReptCellValue = _toConsumableArray(new Set(emails));
|
|
46
|
+
if (nonReptCellValue.length !== filter_term.length) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return filter_term.every(function (email) {
|
|
50
|
+
return nonReptCellValue.includes(email);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
54
|
+
{
|
|
55
|
+
return !Array.isArray(emails) || emails.length === 0;
|
|
56
|
+
}
|
|
57
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
58
|
+
{
|
|
59
|
+
return Array.isArray(emails) && emails.length > 0;
|
|
60
|
+
}
|
|
61
|
+
case FILTER_PREDICATE_TYPE.INCLUDE_ME:
|
|
62
|
+
{
|
|
63
|
+
return Array.isArray(emails) && emails.indexOf(username) > -1;
|
|
64
|
+
}
|
|
65
|
+
default:
|
|
66
|
+
{
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export { collaboratorFilter };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
2
|
+
|
|
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) {
|
|
12
|
+
var filter_predicate = _ref.filter_predicate,
|
|
13
|
+
filter_term = _ref.filter_term;
|
|
14
|
+
switch (filter_predicate) {
|
|
15
|
+
case FILTER_PREDICATE_TYPE.CONTAINS:
|
|
16
|
+
{
|
|
17
|
+
if (!Array.isArray(filter_term)) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
if (!email) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return filter_term.findIndex(function (filterEmail) {
|
|
24
|
+
return filterEmail === email;
|
|
25
|
+
}) > -1;
|
|
26
|
+
}
|
|
27
|
+
case FILTER_PREDICATE_TYPE.NOT_CONTAIN:
|
|
28
|
+
{
|
|
29
|
+
if (!Array.isArray(filter_term) || !email) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return filter_term.findIndex(function (filterEmail) {
|
|
33
|
+
return filterEmail === email;
|
|
34
|
+
}) < 0;
|
|
35
|
+
}
|
|
36
|
+
case FILTER_PREDICATE_TYPE.INCLUDE_ME:
|
|
37
|
+
{
|
|
38
|
+
return email === username;
|
|
39
|
+
}
|
|
40
|
+
case FILTER_PREDICATE_TYPE.IS:
|
|
41
|
+
{
|
|
42
|
+
if (!filter_term) return true;
|
|
43
|
+
if (!Array.isArray(filter_term)) return email === filter_term;
|
|
44
|
+
return email === filter_term[0];
|
|
45
|
+
}
|
|
46
|
+
case FILTER_PREDICATE_TYPE.IS_NOT:
|
|
47
|
+
{
|
|
48
|
+
if (!filter_term) return true;
|
|
49
|
+
if (!Array.isArray(filter_term)) return email !== filter_term;
|
|
50
|
+
return email !== filter_term[0];
|
|
51
|
+
}
|
|
52
|
+
default:
|
|
53
|
+
{
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export { creatorFilter };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { DateUtils } from '../../date.js';
|
|
2
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
3
|
+
import { FILTER_TERM_MODIFIER_TYPE } from '../../constants/filter/filter-modifier.js';
|
|
4
|
+
|
|
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) {
|
|
15
|
+
var filter_predicate = _ref.filter_predicate,
|
|
16
|
+
filter_term_modifier = _ref.filter_term_modifier,
|
|
17
|
+
filter_term = _ref.filter_term,
|
|
18
|
+
other_date = _ref.other_date;
|
|
19
|
+
switch (filter_predicate) {
|
|
20
|
+
case FILTER_PREDICATE_TYPE.IS:
|
|
21
|
+
{
|
|
22
|
+
return filter_term_modifier === FILTER_TERM_MODIFIER_TYPE.EXACT_DATE && !filter_term || DateUtils.format(date) === other_date;
|
|
23
|
+
}
|
|
24
|
+
case FILTER_PREDICATE_TYPE.IS_WITHIN:
|
|
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
|
+
}
|
|
32
|
+
var startDate = other_date.startDate,
|
|
33
|
+
endDate = other_date.endDate;
|
|
34
|
+
var currentDate = DateUtils.format(date);
|
|
35
|
+
return currentDate >= startDate && currentDate <= endDate;
|
|
36
|
+
}
|
|
37
|
+
case FILTER_PREDICATE_TYPE.IS_BEFORE:
|
|
38
|
+
{
|
|
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;
|
|
46
|
+
}
|
|
47
|
+
case FILTER_PREDICATE_TYPE.IS_AFTER:
|
|
48
|
+
{
|
|
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;
|
|
56
|
+
}
|
|
57
|
+
case FILTER_PREDICATE_TYPE.IS_ON_OR_BEFORE:
|
|
58
|
+
{
|
|
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;
|
|
66
|
+
}
|
|
67
|
+
case FILTER_PREDICATE_TYPE.IS_ON_OR_AFTER:
|
|
68
|
+
{
|
|
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;
|
|
76
|
+
}
|
|
77
|
+
case FILTER_PREDICATE_TYPE.IS_NOT:
|
|
78
|
+
{
|
|
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;
|
|
86
|
+
}
|
|
87
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
88
|
+
{
|
|
89
|
+
return !(date && DateUtils.getValidDate(date));
|
|
90
|
+
}
|
|
91
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
92
|
+
{
|
|
93
|
+
return !!(date && DateUtils.getValidDate(date));
|
|
94
|
+
}
|
|
95
|
+
default:
|
|
96
|
+
{
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export { dateFilter };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Filter digital signature
|
|
5
|
+
* @param {object} digitalSignature e.g. { username, sign_time, sign_image_url, ... }
|
|
6
|
+
* @param {string} filter_predicate
|
|
7
|
+
* @returns bool
|
|
8
|
+
*/
|
|
9
|
+
var digitalSignFilter = function digitalSignFilter(digitalSignature, _ref) {
|
|
10
|
+
var filter_predicate = _ref.filter_predicate;
|
|
11
|
+
switch (filter_predicate) {
|
|
12
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
13
|
+
{
|
|
14
|
+
if (!digitalSignature) return true;
|
|
15
|
+
return !digitalSignature.username || !digitalSignature.sign_time || !digitalSignature.sign_image_url;
|
|
16
|
+
}
|
|
17
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
18
|
+
{
|
|
19
|
+
if (!digitalSignature) return false;
|
|
20
|
+
return !!(digitalSignature.username && digitalSignature.sign_time && digitalSignature.sign_image_url);
|
|
21
|
+
}
|
|
22
|
+
default:
|
|
23
|
+
{
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { digitalSignFilter };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Filter file
|
|
5
|
+
* @param {array} files e.g. [{ name, type, url, ... }] | [ url1, ... ]
|
|
6
|
+
* @param {string} filter_predicate
|
|
7
|
+
* @returns bool
|
|
8
|
+
*/
|
|
9
|
+
var fileFilter = function fileFilter(files, _ref) {
|
|
10
|
+
var filter_predicate = _ref.filter_predicate;
|
|
11
|
+
switch (filter_predicate) {
|
|
12
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
13
|
+
{
|
|
14
|
+
return !(files && files.length > 0);
|
|
15
|
+
}
|
|
16
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
17
|
+
{
|
|
18
|
+
return !!(files && files.length > 0);
|
|
19
|
+
}
|
|
20
|
+
default:
|
|
21
|
+
{
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { fileFilter };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { numberFilter } from './number.js';
|
|
2
|
+
import { dateFilter } from './date.js';
|
|
3
|
+
import { checkboxFilter } from './checkbox.js';
|
|
4
|
+
import { textFilter } from './text.js';
|
|
5
|
+
import { filterByArrayType } from './array.js';
|
|
6
|
+
import { getFormulaDisplayString } from '../../cell-value-get/cell-value.js';
|
|
7
|
+
import { FORMULA_RESULT_TYPE } from '../../constants/formula.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Filter formula
|
|
11
|
+
* @param {any} computedValue cell value from formulaRow
|
|
12
|
+
* @param {object} filter e.g. { filter_predicate, column, ... }
|
|
13
|
+
* @param {string} username
|
|
14
|
+
* @param {string} userId
|
|
15
|
+
* @returns bool
|
|
16
|
+
*/
|
|
17
|
+
var formulaFilter = function formulaFilter(computedValue, filter, _ref) {
|
|
18
|
+
var username = _ref.username,
|
|
19
|
+
userId = _ref.userId;
|
|
20
|
+
var data = filter.column.data;
|
|
21
|
+
var _ref2 = data || {},
|
|
22
|
+
result_type = _ref2.result_type;
|
|
23
|
+
switch (result_type) {
|
|
24
|
+
case FORMULA_RESULT_TYPE.NUMBER:
|
|
25
|
+
{
|
|
26
|
+
return numberFilter(computedValue, filter);
|
|
27
|
+
}
|
|
28
|
+
case FORMULA_RESULT_TYPE.DATE:
|
|
29
|
+
{
|
|
30
|
+
return dateFilter(computedValue, filter);
|
|
31
|
+
}
|
|
32
|
+
case FORMULA_RESULT_TYPE.BOOL:
|
|
33
|
+
{
|
|
34
|
+
var normalizedCellValue = computedValue;
|
|
35
|
+
if (computedValue === 'true') {
|
|
36
|
+
normalizedCellValue = true;
|
|
37
|
+
} else if (computedValue === 'false') {
|
|
38
|
+
normalizedCellValue = false;
|
|
39
|
+
}
|
|
40
|
+
return checkboxFilter(normalizedCellValue, filter);
|
|
41
|
+
}
|
|
42
|
+
case FORMULA_RESULT_TYPE.ARRAY:
|
|
43
|
+
{
|
|
44
|
+
return filterByArrayType(computedValue, filter, {
|
|
45
|
+
username: username,
|
|
46
|
+
userId: userId
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
default:
|
|
50
|
+
{
|
|
51
|
+
// FORMULA_RESULT_TYPE.STRING
|
|
52
|
+
return textFilter(getFormulaDisplayString(computedValue, data) || '', filter, userId);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export { formulaFilter };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getGeolocationDisplayString } from '../../cell-value-get/geolocation.js';
|
|
2
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Filter geolocation
|
|
6
|
+
* @param {object} location e.g. { province, ... }
|
|
7
|
+
* @param {string} filter_predicate
|
|
8
|
+
* @param {string} filter_term
|
|
9
|
+
* @param {object} column e.g. { type, data: { geo_format, ... }, ... }
|
|
10
|
+
* @returns bool
|
|
11
|
+
*/
|
|
12
|
+
var geolocationFilter = function geolocationFilter(location, _ref) {
|
|
13
|
+
var filter_predicate = _ref.filter_predicate,
|
|
14
|
+
filter_term = _ref.filter_term,
|
|
15
|
+
column = _ref.column;
|
|
16
|
+
var geolocation = getGeolocationDisplayString(location, column.data);
|
|
17
|
+
switch (filter_predicate) {
|
|
18
|
+
case FILTER_PREDICATE_TYPE.CONTAINS:
|
|
19
|
+
{
|
|
20
|
+
if (!filter_term) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
if (!geolocation) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return geolocation.toString().toLowerCase().indexOf(filter_term.toLowerCase()) > -1;
|
|
27
|
+
}
|
|
28
|
+
case FILTER_PREDICATE_TYPE.NOT_CONTAIN:
|
|
29
|
+
{
|
|
30
|
+
if (!filter_term || !geolocation) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return geolocation.toString().toLowerCase().indexOf(filter_term.toLowerCase()) < 0;
|
|
34
|
+
}
|
|
35
|
+
case FILTER_PREDICATE_TYPE.IS:
|
|
36
|
+
{
|
|
37
|
+
return !filter_term || geolocation === filter_term;
|
|
38
|
+
}
|
|
39
|
+
case FILTER_PREDICATE_TYPE.IS_NOT:
|
|
40
|
+
{
|
|
41
|
+
return !filter_term || geolocation !== filter_term;
|
|
42
|
+
}
|
|
43
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
44
|
+
{
|
|
45
|
+
return !geolocation;
|
|
46
|
+
}
|
|
47
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
48
|
+
{
|
|
49
|
+
return !!geolocation;
|
|
50
|
+
}
|
|
51
|
+
default:
|
|
52
|
+
{
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { geolocationFilter };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { filterByArrayType } from './array.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Filter link
|
|
5
|
+
* @param {array} linkedCellValues e.g. [ displayCellValue, ... ]
|
|
6
|
+
* @param {object} filter e.g. { filter_predicate, column, ... }
|
|
7
|
+
* @param {string} username
|
|
8
|
+
* @param {string} userId
|
|
9
|
+
* @returns bool
|
|
10
|
+
*/
|
|
11
|
+
var linkFilter = function linkFilter(linkedCellValues, filter, _ref) {
|
|
12
|
+
var username = _ref.username,
|
|
13
|
+
userId = _ref.userId;
|
|
14
|
+
return filterByArrayType(linkedCellValues, filter, {
|
|
15
|
+
username: username,
|
|
16
|
+
userId: userId
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { linkFilter };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Filter long-text
|
|
5
|
+
* @param {object} longText e.g. { text, ... }
|
|
6
|
+
* @param {string} filter_predicate
|
|
7
|
+
* @returns bool
|
|
8
|
+
*/
|
|
9
|
+
var longTextFilter = function longTextFilter(longText, _ref) {
|
|
10
|
+
var filter_predicate = _ref.filter_predicate;
|
|
11
|
+
var text = longText ? longText.text : null;
|
|
12
|
+
switch (filter_predicate) {
|
|
13
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
14
|
+
{
|
|
15
|
+
return !text;
|
|
16
|
+
}
|
|
17
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
18
|
+
{
|
|
19
|
+
return !!text;
|
|
20
|
+
}
|
|
21
|
+
default:
|
|
22
|
+
{
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { longTextFilter };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Filter multiple-select
|
|
6
|
+
* @param {array} optionIds e.g. [ option.id, ... ]
|
|
7
|
+
* @param {string} filter_predicate
|
|
8
|
+
* @param {array} filter_term option ids
|
|
9
|
+
* @returns bool
|
|
10
|
+
*/
|
|
11
|
+
var multipleSelectFilter = function multipleSelectFilter(optionIds, _ref) {
|
|
12
|
+
var filter_predicate = _ref.filter_predicate,
|
|
13
|
+
filter_term = _ref.filter_term;
|
|
14
|
+
switch (filter_predicate) {
|
|
15
|
+
case FILTER_PREDICATE_TYPE.HAS_ANY_OF:
|
|
16
|
+
{
|
|
17
|
+
return filter_term.length === 0 || Array.isArray(optionIds) && optionIds.some(function (optionId) {
|
|
18
|
+
return filter_term.includes(optionId);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
case FILTER_PREDICATE_TYPE.HAS_ALL_OF:
|
|
22
|
+
{
|
|
23
|
+
return filter_term.length === 0 || Array.isArray(optionIds) && filter_term.every(function (optionId) {
|
|
24
|
+
return optionIds.includes(optionId);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
case FILTER_PREDICATE_TYPE.HAS_NONE_OF:
|
|
28
|
+
{
|
|
29
|
+
if (filter_term.length === 0 || !Array.isArray(optionIds) || optionIds.length === 0) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return filter_term.every(function (optionId) {
|
|
33
|
+
return optionIds.indexOf(optionId) < 0;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
case FILTER_PREDICATE_TYPE.IS_EXACTLY:
|
|
37
|
+
{
|
|
38
|
+
if (filter_term.length === 0) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (!Array.isArray(optionIds)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
var uniqueArr = function uniqueArr(arr) {
|
|
45
|
+
return _toConsumableArray(new Set(arr)).sort();
|
|
46
|
+
};
|
|
47
|
+
return uniqueArr(optionIds).toString() === uniqueArr(filter_term).toString();
|
|
48
|
+
}
|
|
49
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
50
|
+
{
|
|
51
|
+
return !Array.isArray(optionIds) || optionIds.length === 0;
|
|
52
|
+
}
|
|
53
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
54
|
+
{
|
|
55
|
+
return Array.isArray(optionIds) && optionIds.length > 0;
|
|
56
|
+
}
|
|
57
|
+
default:
|
|
58
|
+
{
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export { multipleSelectFilter };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { isNumberEqual } from '../../number.js';
|
|
2
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Filter number
|
|
6
|
+
* @param {number} number
|
|
7
|
+
* @param {string} filter_predicate
|
|
8
|
+
* @param {number} filter_term
|
|
9
|
+
* @returns bool
|
|
10
|
+
*/
|
|
11
|
+
var numberFilter = function numberFilter(number, _ref) {
|
|
12
|
+
var filter_predicate = _ref.filter_predicate,
|
|
13
|
+
filter_term = _ref.filter_term;
|
|
14
|
+
switch (filter_predicate) {
|
|
15
|
+
case FILTER_PREDICATE_TYPE.EQUAL:
|
|
16
|
+
{
|
|
17
|
+
if (!filter_term && filter_term !== 0) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
if (!number && number !== 0) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return isNumberEqual(filter_term, number);
|
|
24
|
+
}
|
|
25
|
+
case FILTER_PREDICATE_TYPE.NOT_EQUAL:
|
|
26
|
+
{
|
|
27
|
+
if (!filter_term && filter_term !== 0 || !number && number !== 0) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return !isNumberEqual(filter_term, number);
|
|
31
|
+
}
|
|
32
|
+
case FILTER_PREDICATE_TYPE.LESS:
|
|
33
|
+
{
|
|
34
|
+
if (!filter_term && filter_term !== 0) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if (!number && number !== 0 || isNumberEqual(number, filter_term)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return number < filter_term;
|
|
41
|
+
}
|
|
42
|
+
case FILTER_PREDICATE_TYPE.GREATER:
|
|
43
|
+
{
|
|
44
|
+
if (!filter_term && filter_term !== 0) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
if (!number && number !== 0 || isNumberEqual(number, filter_term)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return number > filter_term;
|
|
51
|
+
}
|
|
52
|
+
case FILTER_PREDICATE_TYPE.LESS_OR_EQUAL:
|
|
53
|
+
{
|
|
54
|
+
if (!filter_term && filter_term !== 0) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (!number && number !== 0) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if (isNumberEqual(number, filter_term)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return number < filter_term;
|
|
64
|
+
}
|
|
65
|
+
case FILTER_PREDICATE_TYPE.GREATER_OR_EQUAL:
|
|
66
|
+
{
|
|
67
|
+
if (!filter_term && filter_term !== 0) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (!number && number !== 0) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return isNumberEqual(number, filter_term) || number > filter_term;
|
|
74
|
+
}
|
|
75
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
76
|
+
{
|
|
77
|
+
if (number === 0) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return !number || typeof number !== 'number';
|
|
81
|
+
}
|
|
82
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
83
|
+
{
|
|
84
|
+
// must be a number
|
|
85
|
+
if (number === 0) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return !!(number && typeof number === 'number');
|
|
89
|
+
}
|
|
90
|
+
default:
|
|
91
|
+
{
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export { numberFilter };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { FILTER_PREDICATE_TYPE } from '../../constants/filter/filter-predicate.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Filter single-select
|
|
5
|
+
* @param {string} optionId
|
|
6
|
+
* @param {string} filter_predicate
|
|
7
|
+
* @param {string|array} filter_term option id or option ids
|
|
8
|
+
* @returns bool
|
|
9
|
+
*/
|
|
10
|
+
var singleSelectFilter = function singleSelectFilter(optionId, _ref) {
|
|
11
|
+
var filter_predicate = _ref.filter_predicate,
|
|
12
|
+
filter_term = _ref.filter_term;
|
|
13
|
+
switch (filter_predicate) {
|
|
14
|
+
case FILTER_PREDICATE_TYPE.IS:
|
|
15
|
+
{
|
|
16
|
+
return !filter_term || optionId === filter_term;
|
|
17
|
+
}
|
|
18
|
+
case FILTER_PREDICATE_TYPE.IS_NOT:
|
|
19
|
+
{
|
|
20
|
+
return !filter_term || optionId !== filter_term;
|
|
21
|
+
}
|
|
22
|
+
case FILTER_PREDICATE_TYPE.IS_ANY_OF:
|
|
23
|
+
{
|
|
24
|
+
return filter_term.length === 0 || filter_term.includes(optionId);
|
|
25
|
+
}
|
|
26
|
+
case FILTER_PREDICATE_TYPE.IS_NONE_OF:
|
|
27
|
+
{
|
|
28
|
+
return filter_term.length === 0 || filter_term.indexOf(optionId) < 0;
|
|
29
|
+
}
|
|
30
|
+
case FILTER_PREDICATE_TYPE.EMPTY:
|
|
31
|
+
{
|
|
32
|
+
return !optionId;
|
|
33
|
+
}
|
|
34
|
+
case FILTER_PREDICATE_TYPE.NOT_EMPTY:
|
|
35
|
+
{
|
|
36
|
+
return !!optionId;
|
|
37
|
+
}
|
|
38
|
+
default:
|
|
39
|
+
{
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export { singleSelectFilter };
|