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.
Files changed (152) hide show
  1. package/README.md +56 -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 +143 -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 +31 -0
  66. package/es/sort/sort-column/single-select.js +36 -0
  67. package/es/sort/sort-column/text.js +69 -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 +151 -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 +35 -0
  140. package/lib/sort/sort-column/single-select.js +40 -0
  141. package/lib/sort/sort-column/text.js +74 -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,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 };