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
package/lib/link/core.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Get link by id
|
|
13
|
+
* @param {array} links e.g. [{ _id, ... }, ...]
|
|
14
|
+
* @param {string} linkId
|
|
15
|
+
* @returns link, object
|
|
16
|
+
*/
|
|
17
|
+
var getLinkById = function getLinkById(links, linkId) {
|
|
18
|
+
if (!Array.isArray(links) || !linkId) return null;
|
|
19
|
+
return links.find(function (link) {
|
|
20
|
+
return link._id === linkId;
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Check is valid link
|
|
26
|
+
* @param {object} columnData
|
|
27
|
+
* @returns bool
|
|
28
|
+
*/
|
|
29
|
+
var isValidLink = function isValidLink(linkColumnData) {
|
|
30
|
+
if (!linkColumnData) return false;
|
|
31
|
+
var link_id = linkColumnData.link_id,
|
|
32
|
+
table_id = linkColumnData.table_id,
|
|
33
|
+
other_table_id = linkColumnData.other_table_id,
|
|
34
|
+
display_column_key = linkColumnData.display_column_key;
|
|
35
|
+
return !!(link_id && table_id && other_table_id && display_column_key);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Get current table id by link relationship
|
|
40
|
+
* @param {string} currentTableID
|
|
41
|
+
* @param {string} tableID
|
|
42
|
+
* @param {string} otherTableID
|
|
43
|
+
* @returns current table id, string
|
|
44
|
+
*/
|
|
45
|
+
var getLinkTableID = function getLinkTableID(currentTableID, tableID, otherTableID) {
|
|
46
|
+
return currentTableID === tableID ? tableID : otherTableID;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get linked table id by link relationship
|
|
51
|
+
* @param {string} currentTableID
|
|
52
|
+
* @param {string} tableID
|
|
53
|
+
* @param {string} otherTableID
|
|
54
|
+
* @returns linked table id, string
|
|
55
|
+
*/
|
|
56
|
+
var getLinkedTableID = function getLinkedTableID(currentTableID, tableID, otherTableID) {
|
|
57
|
+
return currentTableID === tableID ? otherTableID : tableID;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Get linked rows ids by the given row id
|
|
62
|
+
* @param {array} links e.g. [ { _id, table1_id, table2_id, table1_table2_map, table2_table1_map, ... }, ... ]
|
|
63
|
+
* @param {string} linkId
|
|
64
|
+
* @param {string} table1Id
|
|
65
|
+
* @param {string} table2Id
|
|
66
|
+
* @param {string} rowId
|
|
67
|
+
* @returns linked rows ids, array
|
|
68
|
+
*/
|
|
69
|
+
var getLinkCellValue = function getLinkCellValue(links, linkId, table1Id, table2Id, rowId) {
|
|
70
|
+
if (!Array.isArray(links) || links.length === 0 || !table1Id || !table2Id || !rowId) return [];
|
|
71
|
+
var linkBetween2Tables = getLinkById(links, linkId);
|
|
72
|
+
if (!linkBetween2Tables) return [];
|
|
73
|
+
var linkMap = {};
|
|
74
|
+
if (table1Id === table2Id) {
|
|
75
|
+
linkMap = linkBetween2Tables.table2_table1_map;
|
|
76
|
+
} else {
|
|
77
|
+
linkMap = linkBetween2Tables.table1_id === table1Id ? linkBetween2Tables.table1_table2_map : linkBetween2Tables.table2_table1_map;
|
|
78
|
+
}
|
|
79
|
+
var linkedRowIds = linkMap[rowId];
|
|
80
|
+
if (!linkedRowIds) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
return _toConsumableArray__default["default"](linkedRowIds);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.getLinkById = getLinkById;
|
|
87
|
+
exports.getLinkCellValue = getLinkCellValue;
|
|
88
|
+
exports.getLinkTableID = getLinkTableID;
|
|
89
|
+
exports.getLinkedTableID = getLinkedTableID;
|
|
90
|
+
exports.isValidLink = isValidLink;
|
package/lib/number.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Check whether is number
|
|
7
|
+
* @param {number} number
|
|
8
|
+
* @returns boolean
|
|
9
|
+
*/
|
|
10
|
+
var isNumber = function isNumber(number) {
|
|
11
|
+
return (number || number === 0) && Object.prototype.toString.call(number) === '[object Number]';
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Check whether the numbers is equal
|
|
16
|
+
* Two numbers are considered equal if the absolute value of their difference is less than 0.00001
|
|
17
|
+
* @param {number} leftNumber
|
|
18
|
+
* @param {number} rightNumber
|
|
19
|
+
* @returns bool
|
|
20
|
+
*/
|
|
21
|
+
var isNumberEqual = function isNumberEqual(leftNumber, rightNumber) {
|
|
22
|
+
return leftNumber === rightNumber || Math.abs(leftNumber - rightNumber) < 0.00001;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.isNumber = isNumber;
|
|
26
|
+
exports.isNumberEqual = isNumberEqual;
|
package/lib/row/core.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _typeof = require('@babel/runtime/helpers/typeof');
|
|
6
|
+
var cellValue = require('../cell-value-get/cell-value.js');
|
|
7
|
+
require('dayjs');
|
|
8
|
+
require('../constants/column.js');
|
|
9
|
+
require('../constants/formula.js');
|
|
10
|
+
var option = require('../cell-value-get/option.js');
|
|
11
|
+
require('../constants/group.js');
|
|
12
|
+
var core = require('../link/core.js');
|
|
13
|
+
var common = require('../common.js');
|
|
14
|
+
var cellType = require('../constants/cell-type.js');
|
|
15
|
+
var limit = require('../constants/limit.js');
|
|
16
|
+
|
|
17
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
18
|
+
|
|
19
|
+
var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Check is table rows
|
|
23
|
+
* @param {array} rows e.g. table rows: [{ _id, xxx }, ...] | view rows: [ row._id, ... ]
|
|
24
|
+
* @returns bool
|
|
25
|
+
*/
|
|
26
|
+
var isTableRows = function isTableRows(rows) {
|
|
27
|
+
return Array.isArray(rows) && _typeof__default["default"](rows[0]) === 'object';
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Convert row
|
|
32
|
+
* e.g. { '0000': 'a' } to { 'Name': 'a' }
|
|
33
|
+
* @param {object} row
|
|
34
|
+
* @param {object} value e.g. { links, ... }
|
|
35
|
+
* @param {object} table e.g. { _id, columns, ... }
|
|
36
|
+
* @param {object} view e.g. { hidden_columns, ... }
|
|
37
|
+
* @param {object} formulaResults computed value of formula, link-formula, link etc.
|
|
38
|
+
* @param {bool} convertLinkID use to convert link: get linked from formulaResults if true, otherwise get linked from links
|
|
39
|
+
* @param {func} debug use to debug if supplied
|
|
40
|
+
* @returns converted row, object
|
|
41
|
+
*/
|
|
42
|
+
var convertRow = function convertRow(row, value, table, view, formulaResults, convertLinkID) {
|
|
43
|
+
var _ref = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {},
|
|
44
|
+
debug = _ref.debug;
|
|
45
|
+
var result = {};
|
|
46
|
+
// eslint-disable-next-line
|
|
47
|
+
if (row.hasOwnProperty('_id')) {
|
|
48
|
+
result._id = row._id;
|
|
49
|
+
}
|
|
50
|
+
// eslint-disable-next-line
|
|
51
|
+
if (row.hasOwnProperty('_mtime')) {
|
|
52
|
+
result._mtime = row._mtime;
|
|
53
|
+
}
|
|
54
|
+
// eslint-disable-next-line
|
|
55
|
+
if (row.hasOwnProperty('_ctime')) {
|
|
56
|
+
result._ctime = row._ctime;
|
|
57
|
+
}
|
|
58
|
+
var columns = table.columns;
|
|
59
|
+
if (columns.length > limit.CONVERT_ROW_COLUMNS_LIMIT) {
|
|
60
|
+
columns = columns.slice(0, limit.CONVERT_ROW_COLUMNS_LIMIT);
|
|
61
|
+
}
|
|
62
|
+
var hiddenColumns = view ? view.hidden_columns : null;
|
|
63
|
+
for (var i = 0; i < columns.length; i++) {
|
|
64
|
+
var column = columns[i];
|
|
65
|
+
var key = column.key,
|
|
66
|
+
type = column.type,
|
|
67
|
+
columnName = column.name;
|
|
68
|
+
if (hiddenColumns && hiddenColumns.includes(key)) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
var cellValue$1 = row[key];
|
|
72
|
+
switch (type) {
|
|
73
|
+
case cellType.CellType.SINGLE_SELECT:
|
|
74
|
+
{
|
|
75
|
+
if (!column.data) {
|
|
76
|
+
if (debug) {
|
|
77
|
+
debug('No options found');
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
result[columnName] = option.getColumnOptionNameById(column, cellValue$1);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case cellType.CellType.MULTIPLE_SELECT:
|
|
85
|
+
{
|
|
86
|
+
if (!column.data) {
|
|
87
|
+
if (debug) {
|
|
88
|
+
debug('No options found');
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
if (!Array.isArray(cellValue$1)) {
|
|
93
|
+
result[columnName] = '';
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
var optionNames = [];
|
|
97
|
+
for (var optionIndex = 0; optionIndex < cellValue$1.length; optionIndex++) {
|
|
98
|
+
var optionName = option.getColumnOptionNameById(column, cellValue$1[optionIndex]);
|
|
99
|
+
if (optionName) {
|
|
100
|
+
optionNames.push(optionName);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
result[columnName] = optionNames;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case cellType.CellType.LONG_TEXT:
|
|
107
|
+
{
|
|
108
|
+
result[columnName] = cellValue$1 ? cellValue$1.text : '';
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
case cellType.CellType.LINK:
|
|
112
|
+
{
|
|
113
|
+
if (!column.data) {
|
|
114
|
+
if (debug) {
|
|
115
|
+
debug('No links found');
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
// convertLinkID to display value
|
|
120
|
+
if (convertLinkID) {
|
|
121
|
+
// get values form formulaResults
|
|
122
|
+
var formulaRow = formulaResults && formulaResults[row._id];
|
|
123
|
+
var cellResult = formulaRow && formulaRow[key];
|
|
124
|
+
if (!Array.isArray(cellResult) || cellResult.length === 0) {
|
|
125
|
+
result[columnName] = null;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
// linked with common column:
|
|
129
|
+
// cellResult
|
|
130
|
+
// [
|
|
131
|
+
// {row_id: '', displayValue: ''},
|
|
132
|
+
// {row_id: '', displayValue: ''},
|
|
133
|
+
// ]
|
|
134
|
+
|
|
135
|
+
// linked with formula column and formula result is array
|
|
136
|
+
// cellResult
|
|
137
|
+
// [
|
|
138
|
+
// {row_id: '', display_value: []},
|
|
139
|
+
// {row_id: '', display_value: []},
|
|
140
|
+
// ]
|
|
141
|
+
result[columnName] = cellResult;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
var tableID = table._id;
|
|
145
|
+
var _column$data = column.data,
|
|
146
|
+
link_id = _column$data.link_id,
|
|
147
|
+
table_id = _column$data.table_id,
|
|
148
|
+
other_table_id = _column$data.other_table_id;
|
|
149
|
+
var otherTableID = tableID === table_id ? other_table_id : table_id;
|
|
150
|
+
var links = value.links;
|
|
151
|
+
result[columnName] = core.getLinkCellValue(links, link_id, tableID, otherTableID, row._id);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case cellType.CellType.FORMULA:
|
|
155
|
+
case cellType.CellType.LINK_FORMULA:
|
|
156
|
+
{
|
|
157
|
+
if (!column.data || !formulaResults) {
|
|
158
|
+
if (debug) {
|
|
159
|
+
debug('No formula found');
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
var _formulaRow = formulaResults[row._id] || {};
|
|
164
|
+
result[columnName] = cellValue.getFormulaDisplayString(_formulaRow[key], column.data);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
default:
|
|
168
|
+
{
|
|
169
|
+
// text/email/url/auto-number/
|
|
170
|
+
// check/
|
|
171
|
+
// rate/duration/
|
|
172
|
+
// file/image/button/
|
|
173
|
+
// translate in dtable-events
|
|
174
|
+
// number/
|
|
175
|
+
// date/ctime/mtime/
|
|
176
|
+
// geolocation/
|
|
177
|
+
// collaborator/creator/last-modifier/
|
|
178
|
+
result[columnName] = cellValue$1;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (common.isEmpty(result[columnName])) {
|
|
182
|
+
delete result[columnName];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
exports.convertRow = convertRow;
|
|
189
|
+
exports.isTableRows = isTableRows;
|
package/lib/sort/core.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
|
+
var option = require('../column/option.js');
|
|
7
|
+
var cellType = require('../constants/cell-type.js');
|
|
8
|
+
var sort = require('../constants/sort.js');
|
|
9
|
+
|
|
10
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
|
+
|
|
12
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
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; }
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Check is valid sort
|
|
19
|
+
* @param {object} sort e.g. { column_key, sort_type, ... }
|
|
20
|
+
* @param {array} columns
|
|
21
|
+
* @returns bool
|
|
22
|
+
*/
|
|
23
|
+
var isValidSort = function isValidSort(sort$1, columns) {
|
|
24
|
+
var sortByColumn = sort$1 && columns.find(function (column) {
|
|
25
|
+
return column.key === sort$1.column_key;
|
|
26
|
+
});
|
|
27
|
+
if (!sortByColumn) return false;
|
|
28
|
+
return sort.SORT_COLUMN_OPTIONS.includes(sortByColumn.type);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Get valid sorts
|
|
33
|
+
* 1. sort column is exist or not
|
|
34
|
+
* 2. valid sort type
|
|
35
|
+
* @param {array} sorts e.g. [{ column_key, sort_type, ... }, ...]
|
|
36
|
+
* @param {array} columns
|
|
37
|
+
* @returns valid sorts, array
|
|
38
|
+
*/
|
|
39
|
+
var getValidSorts = function getValidSorts(sorts, columns) {
|
|
40
|
+
if (!Array.isArray(sorts) || !Array.isArray(columns)) return [];
|
|
41
|
+
return sorts.filter(function (sort) {
|
|
42
|
+
return isValidSort(sort, columns);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get sorted option index of the "optionIds"
|
|
48
|
+
* @param {array} optionIds
|
|
49
|
+
* @param {object} option_id_index_map e.g. {[option.id]: 0, ...}
|
|
50
|
+
* @returns sorted options index, array
|
|
51
|
+
*/
|
|
52
|
+
var getMultipleIndexesOrderbyOptions = function getMultipleIndexesOrderbyOptions(optionIds, option_id_index_map) {
|
|
53
|
+
var indexArr = [];
|
|
54
|
+
optionIds.forEach(function (optionId) {
|
|
55
|
+
var index = option_id_index_map[optionId];
|
|
56
|
+
if (index > -1) {
|
|
57
|
+
indexArr.push(index);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return indexArr.sort();
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get valid and formatted sorts
|
|
65
|
+
* @param {array} sorts e.g. [{ column_key, sort_type, ... }, ...]
|
|
66
|
+
* @param {array} columns
|
|
67
|
+
* @returns valid and formatted sorts, array
|
|
68
|
+
*/
|
|
69
|
+
var deleteInvalidSort = function deleteInvalidSort(sorts, columns) {
|
|
70
|
+
var validSorts = getValidSorts(sorts, columns);
|
|
71
|
+
var cleanSorts = [];
|
|
72
|
+
validSorts.forEach(function (sort) {
|
|
73
|
+
var column_key = sort.column_key;
|
|
74
|
+
var sortColumn = columns.find(function (column) {
|
|
75
|
+
return column.key === column_key;
|
|
76
|
+
});
|
|
77
|
+
var columnType = sortColumn.type;
|
|
78
|
+
var newSort = _objectSpread(_objectSpread({}, sort), {}, {
|
|
79
|
+
column: sortColumn
|
|
80
|
+
});
|
|
81
|
+
switch (columnType) {
|
|
82
|
+
case cellType.CellType.SINGLE_SELECT:
|
|
83
|
+
case cellType.CellType.MULTIPLE_SELECT:
|
|
84
|
+
{
|
|
85
|
+
var options = option.getColumnOptions(sortColumn);
|
|
86
|
+
var option_id_index_map = {};
|
|
87
|
+
options.forEach(function (option, index) {
|
|
88
|
+
option_id_index_map[option.id] = index;
|
|
89
|
+
});
|
|
90
|
+
newSort.option_id_index_map = option_id_index_map;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
cleanSorts.push(newSort);
|
|
95
|
+
});
|
|
96
|
+
return cleanSorts;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
exports.deleteInvalidSort = deleteInvalidSort;
|
|
100
|
+
exports.getMultipleIndexesOrderbyOptions = getMultipleIndexesOrderbyOptions;
|
|
101
|
+
exports.getValidSorts = getValidSorts;
|
|
102
|
+
exports.isValidSort = isValidSort;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var collaborator = require('../../cell-value-get/collaborator.js');
|
|
6
|
+
var cellValue = require('../../cell-value-get/cell-value.js');
|
|
7
|
+
var checkbox = require('./checkbox.js');
|
|
8
|
+
var collaborator$1 = require('./collaborator.js');
|
|
9
|
+
var date = require('./date.js');
|
|
10
|
+
var number = require('./number.js');
|
|
11
|
+
var text = require('./text.js');
|
|
12
|
+
var cellType = require('../../constants/cell-type.js');
|
|
13
|
+
var column = require('../../constants/column.js');
|
|
14
|
+
var formula = require('../../constants/formula.js');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Sort by array type
|
|
18
|
+
* @param {array} leftArray
|
|
19
|
+
* @param {array} rightArray
|
|
20
|
+
* @param {string} sortType e.g. 'up' | 'down
|
|
21
|
+
* @param {object} columnData e.g. { result_type, array_type, array_data, ... }
|
|
22
|
+
* @param {object} value e.g. { collaborators, ... }
|
|
23
|
+
* @returns number
|
|
24
|
+
*/
|
|
25
|
+
var sortByArrayType = function sortByArrayType(leftArray, rightArray, sortType, _ref) {
|
|
26
|
+
var columnData = _ref.columnData,
|
|
27
|
+
value = _ref.value;
|
|
28
|
+
var _ref2 = columnData || {},
|
|
29
|
+
array_type = _ref2.array_type;
|
|
30
|
+
if (column.NUMERIC_COLUMNS_TYPES.includes(array_type)) {
|
|
31
|
+
var leftNumber = leftArray;
|
|
32
|
+
var rightNumber = rightArray;
|
|
33
|
+
if (Array.isArray(leftArray)) {
|
|
34
|
+
leftNumber = leftArray[0];
|
|
35
|
+
}
|
|
36
|
+
if (Array.isArray(rightArray)) {
|
|
37
|
+
rightNumber = rightArray[0];
|
|
38
|
+
}
|
|
39
|
+
leftNumber = leftNumber || leftNumber === 0 ? leftNumber : null;
|
|
40
|
+
rightNumber = rightNumber || rightNumber === 0 ? rightNumber : null;
|
|
41
|
+
return number.sortNumber(leftNumber, rightNumber, sortType);
|
|
42
|
+
}
|
|
43
|
+
if (column.DATE_COLUMN_OPTIONS.includes(array_type)) {
|
|
44
|
+
var leftDate = Array.isArray(leftArray) ? leftArray[0] : leftArray;
|
|
45
|
+
var rightDate = Array.isArray(rightArray) ? rightArray[0] : rightArray;
|
|
46
|
+
return date.sortDate(leftDate, rightDate, sortType);
|
|
47
|
+
}
|
|
48
|
+
if (array_type === cellType.CellType.CHECKBOX || array_type === formula.FORMULA_RESULT_TYPE.BOOL) {
|
|
49
|
+
var leftBool = leftArray;
|
|
50
|
+
var rightBool = rightArray;
|
|
51
|
+
if (Array.isArray(leftArray)) {
|
|
52
|
+
leftBool = leftArray[0];
|
|
53
|
+
}
|
|
54
|
+
if (Array.isArray(rightArray)) {
|
|
55
|
+
rightBool = rightArray[0];
|
|
56
|
+
}
|
|
57
|
+
leftBool = leftBool || false;
|
|
58
|
+
rightBool = rightBool || false;
|
|
59
|
+
return checkbox.sortCheckbox(leftBool, rightBool, sortType);
|
|
60
|
+
}
|
|
61
|
+
if (array_type === cellType.CellType.COLLABORATOR) {
|
|
62
|
+
var collaborators = value.collaborators;
|
|
63
|
+
var leftCollaborators = Array.isArray(leftArray) ? leftArray : [leftArray];
|
|
64
|
+
var rightCollaborators = Array.isArray(rightArray) ? rightArray : [rightArray];
|
|
65
|
+
if (collaborators) {
|
|
66
|
+
leftCollaborators = collaborator.getCollaboratorsNames(leftCollaborators, collaborators);
|
|
67
|
+
rightCollaborators = collaborator.getCollaboratorsNames(rightCollaborators, collaborators);
|
|
68
|
+
}
|
|
69
|
+
return collaborator$1.sortCollaborator(leftCollaborators, rightCollaborators, sortType);
|
|
70
|
+
}
|
|
71
|
+
var leftText = cellValue.getFormulaDisplayString(leftArray, columnData);
|
|
72
|
+
var rightText = cellValue.getFormulaDisplayString(rightArray, columnData);
|
|
73
|
+
return text.sortText(leftText, rightText, sortType);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
exports.sortByArrayType = sortByArrayType;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var sort = require('../../constants/sort.js');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Sort checkbox
|
|
9
|
+
* @param {bool} leftChecked
|
|
10
|
+
* @param {bool} rightChecked
|
|
11
|
+
* @param {string} sortType e.g. 'up' | 'down
|
|
12
|
+
* @returns number
|
|
13
|
+
*/
|
|
14
|
+
var sortCheckbox = function sortCheckbox(leftChecked, rightChecked, sortType) {
|
|
15
|
+
var normalizedCurrChecked = leftChecked ? 1 : -1;
|
|
16
|
+
var normalizedNextChecked = rightChecked ? 1 : -1;
|
|
17
|
+
if (normalizedCurrChecked > normalizedNextChecked) {
|
|
18
|
+
return sortType === sort.SORT_TYPE.UP ? 1 : -1;
|
|
19
|
+
}
|
|
20
|
+
if (normalizedCurrChecked < normalizedNextChecked) {
|
|
21
|
+
return sortType === sort.SORT_TYPE.UP ? -1 : 1;
|
|
22
|
+
}
|
|
23
|
+
return 0;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
exports.sortCheckbox = sortCheckbox;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var text = require('./text.js');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Sort collaborator with email or name
|
|
9
|
+
* @param {array} leftCollaborators e.g. [ collaborator.email, ... ] | [ collaborator.name, ... ]
|
|
10
|
+
* @param {array} rightCollaborators
|
|
11
|
+
* @param {string} sortType e.g. 'up' | 'down
|
|
12
|
+
* @returns number
|
|
13
|
+
*/
|
|
14
|
+
var sortCollaborator = function sortCollaborator(leftCollaborators, rightCollaborators, sortType) {
|
|
15
|
+
var sLeftCollaborators = Array.isArray(leftCollaborators) && leftCollaborators.length ? leftCollaborators.join('') : null;
|
|
16
|
+
var sRightCollaborators = Array.isArray(rightCollaborators) && rightCollaborators.length ? rightCollaborators.join('') : null;
|
|
17
|
+
return text.sortText(sLeftCollaborators, sRightCollaborators, sortType);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
exports.sortCollaborator = sortCollaborator;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var sort = require('../../constants/sort.js');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Sort date
|
|
9
|
+
* @param {string} leftDate e.g. '2023-07-31'
|
|
10
|
+
* @param {string} nextDate
|
|
11
|
+
* @param {string} sortType e.g. 'up' | 'down'
|
|
12
|
+
* @returns number
|
|
13
|
+
*/
|
|
14
|
+
var sortDate = function sortDate(leftDate, rightDate, sortType) {
|
|
15
|
+
var emptyLeftDate = !leftDate;
|
|
16
|
+
var emptyRightDate = !rightDate;
|
|
17
|
+
if (emptyLeftDate && emptyRightDate) return 0;
|
|
18
|
+
if (emptyLeftDate) return 1;
|
|
19
|
+
if (emptyRightDate) return -1;
|
|
20
|
+
if (leftDate > rightDate) {
|
|
21
|
+
return sortType === sort.SORT_TYPE.UP ? 1 : -1;
|
|
22
|
+
}
|
|
23
|
+
if (leftDate < rightDate) {
|
|
24
|
+
return sortType === sort.SORT_TYPE.UP ? -1 : 1;
|
|
25
|
+
}
|
|
26
|
+
return 0;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.sortDate = sortDate;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var cellValue = require('../../cell-value-get/cell-value.js');
|
|
6
|
+
var array = require('./array.js');
|
|
7
|
+
var checkbox = require('./checkbox.js');
|
|
8
|
+
var date = require('./date.js');
|
|
9
|
+
var number = require('./number.js');
|
|
10
|
+
var text = require('./text.js');
|
|
11
|
+
var column = require('../../constants/column.js');
|
|
12
|
+
var formula = require('../../constants/formula.js');
|
|
13
|
+
var sort = require('../../constants/sort.js');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Sort formula
|
|
17
|
+
* @param {any} leftComputedValue compute value from formula row
|
|
18
|
+
* @param {any} rightComputedValue
|
|
19
|
+
* @param {string} sortType e.g. 'up' | 'down
|
|
20
|
+
* @param {object} columnData e.g. { result_type, array_type, array_data, ... }
|
|
21
|
+
* @param {object} value e.g. { collaborators, ... }
|
|
22
|
+
* @returns number
|
|
23
|
+
*/
|
|
24
|
+
var sortFormula = function sortFormula(leftComputedValue, rightComputedValue, sortType, _ref) {
|
|
25
|
+
var columnData = _ref.columnData,
|
|
26
|
+
value = _ref.value;
|
|
27
|
+
var _ref2 = columnData || {},
|
|
28
|
+
result_type = _ref2.result_type;
|
|
29
|
+
if (sort.NUMBER_SORTER_COLUMN_TYPES.includes(result_type)) {
|
|
30
|
+
var leftNumber = leftComputedValue || leftComputedValue === 0 ? leftComputedValue - 0 : null;
|
|
31
|
+
var rightNumber = rightComputedValue || rightComputedValue === 0 ? rightComputedValue - 0 : null;
|
|
32
|
+
return number.sortNumber(leftNumber, rightNumber, sortType);
|
|
33
|
+
}
|
|
34
|
+
if (column.DATE_COLUMN_OPTIONS.includes(result_type)) {
|
|
35
|
+
return date.sortDate(leftComputedValue, rightComputedValue, sortType);
|
|
36
|
+
}
|
|
37
|
+
if (result_type === formula.FORMULA_RESULT_TYPE.BOOL) {
|
|
38
|
+
var leftBoolean = leftComputedValue || false;
|
|
39
|
+
var rightBoolean = rightComputedValue || false;
|
|
40
|
+
return checkbox.sortCheckbox(leftBoolean, rightBoolean, sortType);
|
|
41
|
+
}
|
|
42
|
+
if (result_type === formula.FORMULA_RESULT_TYPE.ARRAY) {
|
|
43
|
+
return array.sortByArrayType(leftComputedValue, rightComputedValue, sortType, {
|
|
44
|
+
columnData: columnData,
|
|
45
|
+
value: value
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
var leftText = cellValue.getFormulaDisplayString(leftComputedValue, columnData);
|
|
49
|
+
var rightText = cellValue.getFormulaDisplayString(rightComputedValue, columnData);
|
|
50
|
+
return text.sortText(leftText, rightText, sortType);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
exports.sortFormula = sortFormula;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var array = require('./array.js');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Sort link
|
|
9
|
+
* @param {array} leftLinkedCellValues e.g. [{ row_id, display_value }]
|
|
10
|
+
* @param {array} rightLinkedCellValues
|
|
11
|
+
* @param {string} sortType e.g. 'up' | 'down
|
|
12
|
+
* @param {object} columnData e.g. { result_type, array_type, array_data, ... }
|
|
13
|
+
* @param {object} value e.g. { collaborators, ... }
|
|
14
|
+
* @returns number
|
|
15
|
+
*/
|
|
16
|
+
var sortLink = function sortLink(leftLinkedCellValues, rightLinkedCellValues, sortType, _ref) {
|
|
17
|
+
var columnData = _ref.columnData,
|
|
18
|
+
value = _ref.value;
|
|
19
|
+
var emptyLeftLinkedCellValues = !Array.isArray(leftLinkedCellValues) || leftLinkedCellValues.length === 0;
|
|
20
|
+
var emptyRightLinkedCellValues = !Array.isArray(rightLinkedCellValues) || rightLinkedCellValues.length === 0;
|
|
21
|
+
if (emptyLeftLinkedCellValues && emptyRightLinkedCellValues) return 0;
|
|
22
|
+
if (emptyLeftLinkedCellValues) return 1;
|
|
23
|
+
if (emptyRightLinkedCellValues) return -1;
|
|
24
|
+
var leftDisplayValues = leftLinkedCellValues.map(function (linked) {
|
|
25
|
+
return linked.display_value;
|
|
26
|
+
});
|
|
27
|
+
var rightDisplayValues = rightLinkedCellValues.map(function (linked) {
|
|
28
|
+
return linked.display_value;
|
|
29
|
+
});
|
|
30
|
+
return array.sortByArrayType(leftDisplayValues, rightDisplayValues, sortType, {
|
|
31
|
+
columnData: columnData,
|
|
32
|
+
value: value
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.sortLink = sortLink;
|