dtable-utils 0.0.3 → 0.0.4-beta.1

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