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,239 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var core = require('./core.js');
6
+ var checkbox = require('./filter-column/checkbox.js');
7
+ var collaborator = require('./filter-column/collaborator.js');
8
+ var creator = require('./filter-column/creator.js');
9
+ var date$1 = require('./filter-column/date.js');
10
+ var digitalSign = require('./filter-column/digital-sign.js');
11
+ var file = require('./filter-column/file.js');
12
+ var formula = require('./filter-column/formula.js');
13
+ var geolocation = require('./filter-column/geolocation.js');
14
+ var text = require('./filter-column/text.js');
15
+ var longText = require('./filter-column/long-text.js');
16
+ var multipleSelect = require('./filter-column/multiple-select.js');
17
+ var number = require('./filter-column/number.js');
18
+ var singleSelect = require('./filter-column/single-select.js');
19
+ var link = require('./filter-column/link.js');
20
+ var index = require('../constants/filter/index.js');
21
+ var date = require('../date.js');
22
+ var cellType = require('../constants/cell-type.js');
23
+ var column = require('../constants/column.js');
24
+
25
+ var getFilterResult = function getFilterResult(row, filter, _ref) {
26
+ var formulaRow = _ref.formulaRow,
27
+ username = _ref.username,
28
+ userId = _ref.userId;
29
+ var column_key = filter.column_key,
30
+ column$1 = filter.column;
31
+ var cellValue = row[column_key];
32
+ switch (column$1.type) {
33
+ case cellType.CellType.CHECKBOX:
34
+ {
35
+ return checkbox.checkboxFilter(cellValue, filter);
36
+ }
37
+ case cellType.CellType.SINGLE_SELECT:
38
+ {
39
+ return singleSelect.singleSelectFilter(cellValue, filter);
40
+ }
41
+ case cellType.CellType.MULTIPLE_SELECT:
42
+ {
43
+ return multipleSelect.multipleSelectFilter(cellValue, filter);
44
+ }
45
+ case cellType.CellType.DURATION:
46
+ case cellType.CellType.NUMBER:
47
+ case cellType.CellType.RATE:
48
+ {
49
+ return number.numberFilter(cellValue, filter);
50
+ }
51
+ case cellType.CellType.DATE:
52
+ {
53
+ return date$1.dateFilter(cellValue, filter);
54
+ }
55
+ case cellType.CellType.CTIME:
56
+ case cellType.CellType.MTIME:
57
+ {
58
+ cellValue = date.DateUtils.format(cellValue, column.DATE_FORMAT_MAP.YYYY_MM_DD_HH_MM_SS);
59
+ return date$1.dateFilter(cellValue, filter);
60
+ }
61
+ case cellType.CellType.COLLABORATOR:
62
+ {
63
+ return collaborator.collaboratorFilter(cellValue, filter, username);
64
+ }
65
+ case cellType.CellType.LONG_TEXT:
66
+ {
67
+ return longText.longTextFilter(cellValue, filter);
68
+ }
69
+ case cellType.CellType.TEXT:
70
+ case cellType.CellType.AUTO_NUMBER:
71
+ case cellType.CellType.EMAIL:
72
+ case cellType.CellType.URL:
73
+ {
74
+ return text.textFilter(cellValue, filter, userId);
75
+ }
76
+ case cellType.CellType.IMAGE:
77
+ case cellType.CellType.FILE:
78
+ {
79
+ return file.fileFilter(cellValue, filter);
80
+ }
81
+ case cellType.CellType.LAST_MODIFIER:
82
+ case cellType.CellType.CREATOR:
83
+ {
84
+ return creator.creatorFilter(cellValue, filter, username);
85
+ }
86
+ case cellType.CellType.GEOLOCATION:
87
+ {
88
+ return geolocation.geolocationFilter(cellValue, filter);
89
+ }
90
+ case cellType.CellType.FORMULA:
91
+ case cellType.CellType.LINK_FORMULA:
92
+ {
93
+ cellValue = formulaRow[column_key];
94
+ return formula.formulaFilter(cellValue, filter, {
95
+ username: username,
96
+ userId: userId
97
+ });
98
+ }
99
+ case cellType.CellType.LINK:
100
+ {
101
+ cellValue = formulaRow[column_key];
102
+ cellValue = Array.isArray(cellValue) ? cellValue.map(function (linked) {
103
+ return linked.display_value;
104
+ }) : null;
105
+ return link.linkFilter(cellValue, filter, {
106
+ username: username,
107
+ userId: userId
108
+ });
109
+ }
110
+ case cellType.CellType.DIGITAL_SIGN:
111
+ {
112
+ return digitalSign.digitalSignFilter(cellValue, filter);
113
+ }
114
+ default:
115
+ {
116
+ return false;
117
+ }
118
+ }
119
+ };
120
+
121
+ /**
122
+ * Filter row
123
+ * @param {object} row e.g. { _id, .... }
124
+ * @param {string} filterConjunction e.g. 'And' | 'Or'
125
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }, ...]
126
+ * @param {object} formulaRow
127
+ * @param {string} username
128
+ * @param {string} userId
129
+ * @returns filter result, bool
130
+ */
131
+ var filterRow = function filterRow(row, filterConjunction, filters) {
132
+ var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
133
+ _ref2$formulaRow = _ref2.formulaRow,
134
+ formulaRow = _ref2$formulaRow === void 0 ? {} : _ref2$formulaRow,
135
+ _ref2$username = _ref2.username,
136
+ username = _ref2$username === void 0 ? '' : _ref2$username,
137
+ userId = _ref2.userId;
138
+ if (filterConjunction === index.FILTER_CONJUNCTION_TYPE.AND) {
139
+ return filters.every(function (filter) {
140
+ return getFilterResult(row, filter, {
141
+ formulaRow: formulaRow,
142
+ username: username,
143
+ userId: userId
144
+ });
145
+ });
146
+ }
147
+ if (filterConjunction === index.FILTER_CONJUNCTION_TYPE.OR) {
148
+ return filters.some(function (filter) {
149
+ return getFilterResult(row, filter, {
150
+ formulaRow: formulaRow,
151
+ username: username,
152
+ userId: userId
153
+ });
154
+ });
155
+ }
156
+ return false;
157
+ };
158
+
159
+ /**
160
+ * Filter rows
161
+ * @param {string} filterConjunction e.g. 'And' | 'Or'
162
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }, ...]
163
+ * @param {array} rows e.g. [{ _id, .... }, ...]
164
+ * @param {object} formulaRows
165
+ * @param {string} username
166
+ * @param {userId} username
167
+ * @returns filtered rows ids, array
168
+ */
169
+ var filterRows = function filterRows(filterConjunction, filters, rows, _ref3) {
170
+ var formulaRows = _ref3.formulaRows,
171
+ username = _ref3.username,
172
+ userId = _ref3.userId;
173
+ var filteredRows = [];
174
+ var formattedFilters = core.getFormattedFilters(filters);
175
+ rows.forEach(function (row) {
176
+ var rowId = row._id;
177
+ var formulaRow = formulaRows && formulaRows[rowId] ? formulaRows[rowId] : {};
178
+ if (filterRow(row, filterConjunction, formattedFilters, {
179
+ formulaRow: formulaRow,
180
+ username: username,
181
+ userId: userId
182
+ })) {
183
+ filteredRows.push(rowId);
184
+ }
185
+ });
186
+ return filteredRows;
187
+ };
188
+
189
+ /**
190
+ * Filter rows without formula calculation
191
+ * The "formulaRows" need to be provided if you want to filter formula, link columns etc.
192
+ * @param {string} filterConjunction e.g. 'And' | 'Or'
193
+ * @param {array} filters e.g. [{ column_key, filter_predicate, ... }, ...]
194
+ * @param {array} rows e.g. [{ _id, .... }, ...]
195
+ * @param {object} table e.g. { columns, ... }
196
+ * @param {object} formulaRows
197
+ * @param {string} username
198
+ * @param {userId} username
199
+ * @returns filtered rows: row_ids and error message: error_message, object
200
+ */
201
+ var getFilteredRowsWithoutFormulaCalculation = function getFilteredRowsWithoutFormulaCalculation(filterConjunction, filters, rows, table) {
202
+ var _ref4 = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {},
203
+ _ref4$formulaRows = _ref4.formulaRows,
204
+ formulaRows = _ref4$formulaRows === void 0 ? null : _ref4$formulaRows,
205
+ _ref4$username = _ref4.username,
206
+ username = _ref4$username === void 0 ? null : _ref4$username,
207
+ _ref4$userId = _ref4.userId,
208
+ userId = _ref4$userId === void 0 ? null : _ref4$userId;
209
+ var columns = table.columns;
210
+ var validFilters = [];
211
+ try {
212
+ validFilters = core.deleteInvalidFilter(filters, columns);
213
+ } catch (err) {
214
+ return {
215
+ row_ids: [],
216
+ error_message: err.message
217
+ };
218
+ }
219
+ var filteredRows = [];
220
+ if (validFilters.length === 0) {
221
+ filteredRows = rows.map(function (row) {
222
+ return row._id;
223
+ });
224
+ } else {
225
+ filteredRows = filterRows(filterConjunction, validFilters, rows, {
226
+ formulaRows: formulaRows,
227
+ username: username,
228
+ userId: userId
229
+ });
230
+ }
231
+ return {
232
+ row_ids: filteredRows,
233
+ error_message: null
234
+ };
235
+ };
236
+
237
+ exports.filterRow = filterRow;
238
+ exports.filterRows = filterRows;
239
+ exports.getFilteredRowsWithoutFormulaCalculation = getFilteredRowsWithoutFormulaCalculation;
@@ -0,0 +1,126 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
+ var date = require('../column/date.js');
7
+ var core$1 = require('../link/core.js');
8
+ var column = require('../table/column.js');
9
+ var core = require('../table/core.js');
10
+ var cellType = require('../constants/cell-type.js');
11
+ var group = require('../constants/group.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
+
20
+ /**
21
+ * Check is valid groupby
22
+ * @param {object} groupby e.g. { column_key, count_type, sort_type, ... }
23
+ * @param {array} columns
24
+ * @returns bool
25
+ */
26
+ var isValidGroupby = function isValidGroupby(groupby, columns) {
27
+ if (!groupby || !Array.isArray(columns)) return false;
28
+ var column_key = groupby.column_key;
29
+ var groupbyColumn = columns.find(function (column) {
30
+ return column.key === column_key;
31
+ });
32
+ if (!groupbyColumn) {
33
+ return false;
34
+ }
35
+ return group.SUPPORT_GROUP_COLUMN_TYPES.includes(groupbyColumn.type);
36
+ };
37
+
38
+ /**
39
+ * Get valid groupbys
40
+ * @param {array} groupbys e.g. [{ column_key, count_type, ... }, ...]
41
+ * @param {array} columns
42
+ * @returns valid groupbys, array
43
+ */
44
+ var getValidGroupbys = function getValidGroupbys(groupbys, columns) {
45
+ if (!Array.isArray(groupbys) || !Array.isArray(columns)) {
46
+ return [];
47
+ }
48
+ return groupbys.filter(function (groupby) {
49
+ return isValidGroupby(groupby, columns);
50
+ });
51
+ };
52
+
53
+ /**
54
+ * Get valid and formatted groupbys
55
+ * @param {array} groupbys e.g. [{ column_key, count_type, ... }, ...]
56
+ * @param {array} columns
57
+ * @param {object} currentTable e.g. { _id, ... }
58
+ * @param {object} value e.g. { tables, collaborators }
59
+ * @returns valid and formatted groupbys
60
+ */
61
+ var deleteInvalidGroupby = function deleteInvalidGroupby(groupbys, columns, currentTable, value) {
62
+ var validGroupbys = getValidGroupbys(groupbys, columns);
63
+ var cleanGroupbys = [];
64
+ validGroupbys.forEach(function (groupby) {
65
+ var groupbyColumnKey = groupby.column_key,
66
+ count_type = groupby.count_type;
67
+ var groupbyColumn = columns.find(function (column) {
68
+ return groupbyColumnKey === column.key;
69
+ });
70
+ var columnType = groupbyColumn.type,
71
+ columnData = groupbyColumn.data;
72
+ var newGroupby = _objectSpread(_objectSpread({}, groupby), {}, {
73
+ column: groupbyColumn
74
+ });
75
+ switch (columnType) {
76
+ case cellType.CellType.DATE:
77
+ case cellType.CellType.CTIME:
78
+ case cellType.CellType.MTIME:
79
+ {
80
+ newGroupby.count_type = count_type || group.GROUP_DATE_GRANULARITY.MONTH;
81
+ break;
82
+ }
83
+ case cellType.CellType.GEOLOCATION:
84
+ {
85
+ newGroupby.count_type = count_type || group.GROUP_GEOLOCATION_GRANULARITY.PROVINCE;
86
+ break;
87
+ }
88
+ case cellType.CellType.COLLABORATOR:
89
+ {
90
+ var collaborator_email_map = {};
91
+ value.collaborators.forEach(function (collaborator) {
92
+ collaborator_email_map[collaborator.email] = true;
93
+ });
94
+ newGroupby.collaborator_email_map = collaborator_email_map;
95
+ break;
96
+ }
97
+ case cellType.CellType.LINK:
98
+ {
99
+ var table_id = columnData.table_id,
100
+ other_table_id = columnData.other_table_id,
101
+ display_column_key = columnData.display_column_key;
102
+ var currentTableId = currentTable ? currentTable._id : '';
103
+ var linkedTableID = core$1.getLinkedTableID(currentTableId, table_id, other_table_id);
104
+ var linkedTable = core.getTableById(value.tables, linkedTableID);
105
+ var displayColumn = column.getTableColumnByKey(linkedTable, display_column_key);
106
+ newGroupby.linked_table = linkedTable;
107
+ newGroupby.display_column = displayColumn;
108
+ break;
109
+ }
110
+ case cellType.CellType.FORMULA:
111
+ case cellType.CellType.LINK_FORMULA:
112
+ {
113
+ if (date.isDateColumn(groupbyColumn) && !count_type) {
114
+ newGroupby.count_type = group.GROUP_DATE_GRANULARITY.MONTH;
115
+ }
116
+ break;
117
+ }
118
+ }
119
+ cleanGroupbys.push(newGroupby);
120
+ });
121
+ return cleanGroupbys;
122
+ };
123
+
124
+ exports.deleteInvalidGroupby = deleteInvalidGroupby;
125
+ exports.getValidGroupbys = getValidGroupbys;
126
+ exports.isValidGroupby = isValidGroupby;