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,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;
|