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