dtable-utils 0.0.3-beta.1 → 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 (115) hide show
  1. package/README.md +12 -3
  2. package/dist/index.js +1 -1
  3. package/es/cell-value-get/cell-value.js +82 -60
  4. package/es/cell-value-get/collaborator.js +9 -2
  5. package/es/cell-value-get/duration.js +3 -3
  6. package/es/cell-value-get/geolocation.js +23 -25
  7. package/es/cell-value-get/number.js +19 -11
  8. package/es/cell-value-get/option.js +18 -4
  9. package/es/cell-value-get/rate.js +5 -0
  10. package/es/cell-value-set/date.js +9 -3
  11. package/es/{column/color.js → color/column-color.js} +25 -3
  12. package/es/{row/color.js → color/row-color.js} +12 -1
  13. package/es/column/option.js +37 -7
  14. package/es/common.js +23 -2
  15. package/es/constants/formula.js +2 -1
  16. package/es/filter/core.js +61 -26
  17. package/es/filter/filter-column/array.js +35 -30
  18. package/es/filter/filter-column/checkbox.js +9 -3
  19. package/es/filter/filter-column/collaborator.js +20 -15
  20. package/es/filter/filter-column/creator.js +22 -13
  21. package/es/filter/filter-column/date.js +57 -14
  22. package/es/filter/filter-column/digital-sign.js +11 -8
  23. package/es/filter/filter-column/file.js +9 -6
  24. package/es/filter/filter-column/formula.js +16 -8
  25. package/es/filter/filter-column/geolocation.js +12 -7
  26. package/es/filter/filter-column/link.js +10 -2
  27. package/es/filter/filter-column/long-text.js +10 -7
  28. package/es/filter/filter-column/multiple-select.js +17 -13
  29. package/es/filter/filter-column/number.js +25 -21
  30. package/es/filter/filter-column/single-select.js +14 -10
  31. package/es/filter/filter-column/text.js +18 -13
  32. package/es/filter/filter-row.js +35 -0
  33. package/es/group/core.js +15 -6
  34. package/es/group/group-row.js +39 -3
  35. package/es/index.js +10 -10
  36. package/es/link/core.js +14 -14
  37. package/es/number.js +11 -3
  38. package/es/row/core.js +20 -1
  39. package/es/sort/core.js +66 -7
  40. package/es/sort/sort-column/array.js +39 -30
  41. package/es/sort/sort-column/checkbox.js +12 -5
  42. package/es/sort/sort-column/collaborator.js +11 -4
  43. package/es/sort/sort-column/date.js +12 -12
  44. package/es/sort/sort-column/formula.js +21 -12
  45. package/es/sort/sort-column/link.js +18 -9
  46. package/es/sort/sort-column/multiple-select.js +26 -26
  47. package/es/sort/sort-column/number.js +15 -8
  48. package/es/sort/sort-column/single-select.js +16 -8
  49. package/es/sort/sort-column/text.js +24 -10
  50. package/es/sort/sort-row.js +22 -38
  51. package/es/table/column.js +2 -2
  52. package/es/table/core.js +2 -2
  53. package/es/table/row.js +4 -4
  54. package/es/view/core.js +20 -21
  55. package/es/view/formula.js +35 -31
  56. package/es/view/group.js +4 -4
  57. package/es/view/summaries.js +17 -29
  58. package/lib/cell-value-get/cell-value.js +82 -60
  59. package/lib/cell-value-get/collaborator.js +9 -2
  60. package/lib/cell-value-get/duration.js +4 -2
  61. package/lib/cell-value-get/geolocation.js +23 -25
  62. package/lib/cell-value-get/number.js +19 -11
  63. package/lib/cell-value-get/option.js +18 -4
  64. package/lib/cell-value-get/rate.js +5 -0
  65. package/lib/cell-value-set/date.js +9 -3
  66. package/lib/{column/color.js → color/column-color.js} +31 -9
  67. package/lib/{row/color.js → color/row-color.js} +12 -1
  68. package/lib/column/option.js +37 -7
  69. package/lib/common.js +23 -1
  70. package/lib/constants/formula.js +2 -0
  71. package/lib/filter/core.js +61 -26
  72. package/lib/filter/filter-column/array.js +35 -30
  73. package/lib/filter/filter-column/checkbox.js +9 -3
  74. package/lib/filter/filter-column/collaborator.js +20 -15
  75. package/lib/filter/filter-column/creator.js +22 -13
  76. package/lib/filter/filter-column/date.js +57 -14
  77. package/lib/filter/filter-column/digital-sign.js +11 -8
  78. package/lib/filter/filter-column/file.js +9 -6
  79. package/lib/filter/filter-column/formula.js +16 -8
  80. package/lib/filter/filter-column/geolocation.js +12 -7
  81. package/lib/filter/filter-column/link.js +10 -2
  82. package/lib/filter/filter-column/long-text.js +10 -7
  83. package/lib/filter/filter-column/multiple-select.js +17 -13
  84. package/lib/filter/filter-column/number.js +25 -21
  85. package/lib/filter/filter-column/single-select.js +14 -10
  86. package/lib/filter/filter-column/text.js +18 -13
  87. package/lib/filter/filter-row.js +35 -0
  88. package/lib/group/core.js +15 -6
  89. package/lib/group/group-row.js +39 -3
  90. package/lib/index.js +47 -45
  91. package/lib/link/core.js +14 -14
  92. package/lib/number.js +11 -3
  93. package/lib/row/core.js +20 -1
  94. package/lib/sort/core.js +71 -6
  95. package/lib/sort/sort-column/array.js +39 -30
  96. package/lib/sort/sort-column/checkbox.js +12 -5
  97. package/lib/sort/sort-column/collaborator.js +11 -4
  98. package/lib/sort/sort-column/date.js +12 -12
  99. package/lib/sort/sort-column/formula.js +21 -12
  100. package/lib/sort/sort-column/link.js +18 -9
  101. package/lib/sort/sort-column/multiple-select.js +25 -26
  102. package/lib/sort/sort-column/number.js +15 -8
  103. package/lib/sort/sort-column/single-select.js +16 -8
  104. package/lib/sort/sort-column/text.js +24 -10
  105. package/lib/sort/sort-row.js +21 -42
  106. package/lib/table/column.js +2 -2
  107. package/lib/table/core.js +2 -2
  108. package/lib/table/row.js +4 -4
  109. package/lib/view/core.js +20 -21
  110. package/lib/view/formula.js +35 -31
  111. package/lib/view/group.js +4 -4
  112. package/lib/view/summaries.js +17 -29
  113. package/package.json +1 -1
  114. package/es/table/index.js +0 -14
  115. package/lib/table/index.js +0 -18
@@ -13,55 +13,64 @@ var cellType = require('../../constants/cell-type.js');
13
13
  var column = require('../../constants/column.js');
14
14
  var formula = require('../../constants/formula.js');
15
15
 
16
- var sortByArrayType = function sortByArrayType(currCellVal, nextCellVal, sortType, _ref) {
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) {
17
26
  var columnData = _ref.columnData,
18
27
  value = _ref.value;
19
28
  var _ref2 = columnData || {},
20
29
  array_type = _ref2.array_type;
21
30
  if (column.NUMERIC_COLUMNS_TYPES.includes(array_type)) {
22
- var currNumber = currCellVal;
23
- var nextNumber = nextCellVal;
24
- if (Array.isArray(currCellVal)) {
25
- currNumber = currCellVal[0];
31
+ var leftNumber = leftArray;
32
+ var rightNumber = rightArray;
33
+ if (Array.isArray(leftArray)) {
34
+ leftNumber = leftArray[0];
26
35
  }
27
- if (Array.isArray(nextCellVal)) {
28
- nextNumber = nextCellVal[0];
36
+ if (Array.isArray(rightArray)) {
37
+ rightNumber = rightArray[0];
29
38
  }
30
- currNumber = currNumber || currNumber === 0 ? currNumber : null;
31
- nextNumber = nextNumber || nextNumber === 0 ? nextNumber : null;
32
- return number.sortNumber(currNumber, nextNumber, sortType);
39
+ leftNumber = leftNumber || leftNumber === 0 ? leftNumber : null;
40
+ rightNumber = rightNumber || rightNumber === 0 ? rightNumber : null;
41
+ return number.sortNumber(leftNumber, rightNumber, sortType);
33
42
  }
34
43
  if (column.DATE_COLUMN_OPTIONS.includes(array_type)) {
35
- var currDate = Array.isArray(currCellVal) ? currCellVal[0] : currCellVal;
36
- var nextDate = Array.isArray(nextCellVal) ? nextCellVal[0] : nextCellVal;
37
- return date.sortDate(currDate, nextDate, sortType);
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);
38
47
  }
39
48
  if (array_type === cellType.CellType.CHECKBOX || array_type === formula.FORMULA_RESULT_TYPE.BOOL) {
40
- var currBoolean = currCellVal;
41
- var nextBoolean = nextCellVal;
42
- if (Array.isArray(currCellVal)) {
43
- currBoolean = currCellVal[0];
49
+ var leftBool = leftArray;
50
+ var rightBool = rightArray;
51
+ if (Array.isArray(leftArray)) {
52
+ leftBool = leftArray[0];
44
53
  }
45
- if (Array.isArray(nextCellVal)) {
46
- nextBoolean = nextCellVal[0];
54
+ if (Array.isArray(rightArray)) {
55
+ rightBool = rightArray[0];
47
56
  }
48
- currBoolean = currBoolean || false;
49
- nextBoolean = nextBoolean || false;
50
- return checkbox.sortCheckbox(currBoolean, nextBoolean, sortType);
57
+ leftBool = leftBool || false;
58
+ rightBool = rightBool || false;
59
+ return checkbox.sortCheckbox(leftBool, rightBool, sortType);
51
60
  }
52
61
  if (array_type === cellType.CellType.COLLABORATOR) {
53
62
  var collaborators = value.collaborators;
54
- var currCollaborators = Array.isArray(currCellVal) ? currCellVal : [currCellVal];
55
- var nextCollaborators = Array.isArray(nextCellVal) ? nextCellVal : [nextCellVal];
63
+ var leftCollaborators = Array.isArray(leftArray) ? leftArray : [leftArray];
64
+ var rightCollaborators = Array.isArray(rightArray) ? rightArray : [rightArray];
56
65
  if (collaborators) {
57
- currCollaborators = collaborator.getCollaboratorsNames(currCollaborators, collaborators);
58
- nextCollaborators = collaborator.getCollaboratorsNames(nextCollaborators, collaborators);
66
+ leftCollaborators = collaborator.getCollaboratorsNames(leftCollaborators, collaborators);
67
+ rightCollaborators = collaborator.getCollaboratorsNames(rightCollaborators, collaborators);
59
68
  }
60
- return collaborator$1.sortCollaborator(currCollaborators, nextCollaborators, sortType);
69
+ return collaborator$1.sortCollaborator(leftCollaborators, rightCollaborators, sortType);
61
70
  }
62
- var currText = cellValue.getFormulaDisplayString(currCellVal, columnData);
63
- var nextText = cellValue.getFormulaDisplayString(nextCellVal, columnData);
64
- return text.sortText(currText, nextText, sortType);
71
+ var leftText = cellValue.getFormulaDisplayString(leftArray, columnData);
72
+ var rightText = cellValue.getFormulaDisplayString(rightArray, columnData);
73
+ return text.sortText(leftText, rightText, sortType);
65
74
  };
66
75
 
67
76
  exports.sortByArrayType = sortByArrayType;
@@ -4,13 +4,20 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var sort = require('../../constants/sort.js');
6
6
 
7
- var sortCheckbox = function sortCheckbox(currCellVal, nextCellVal, sortType) {
8
- var currCellValPart = currCellVal ? 1 : -1;
9
- var nextCellValPart = nextCellVal ? 1 : -1;
10
- if (currCellValPart > nextCellValPart) {
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) {
11
18
  return sortType === sort.SORT_TYPE.UP ? 1 : -1;
12
19
  }
13
- if (currCellValPart < nextCellValPart) {
20
+ if (normalizedCurrChecked < normalizedNextChecked) {
14
21
  return sortType === sort.SORT_TYPE.UP ? -1 : 1;
15
22
  }
16
23
  return 0;
@@ -4,10 +4,17 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var text = require('./text.js');
6
6
 
7
- var sortCollaborator = function sortCollaborator(currCellVal, nextCellVal, sortType) {
8
- var currCellValString = Array.isArray(currCellVal) && currCellVal.length ? currCellVal.join('') : null;
9
- var nextCellValString = Array.isArray(currCellVal) && currCellVal.length ? nextCellVal.join('') : null;
10
- return text.sortText(currCellValString, nextCellValString, sortType);
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);
11
18
  };
12
19
 
13
20
  exports.sortCollaborator = sortCollaborator;
@@ -5,22 +5,22 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var sort = require('../../constants/sort.js');
6
6
 
7
7
  /**
8
- * compare date
9
- * @param {string} currDate date string, e.g. '2023-07-31'
10
- * @param {string} nextDate date string
8
+ * Sort date
9
+ * @param {string} leftDate e.g. '2023-07-31'
10
+ * @param {string} nextDate
11
11
  * @param {string} sortType e.g. 'up' | 'down'
12
- * @returns number, e.g. 1 | -1 | 0
12
+ * @returns number
13
13
  */
14
- var sortDate = function sortDate(currDate, nextDate, sortType) {
15
- var emptyCurrDate = !currDate;
16
- var emptyNextDate = !nextDate;
17
- if (emptyCurrDate && emptyNextDate) return 0;
18
- if (emptyCurrDate) return 1;
19
- if (emptyNextDate) return -1;
20
- if (currDate > nextDate) {
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
21
  return sortType === sort.SORT_TYPE.UP ? 1 : -1;
22
22
  }
23
- if (currDate < nextDate) {
23
+ if (leftDate < rightDate) {
24
24
  return sortType === sort.SORT_TYPE.UP ? -1 : 1;
25
25
  }
26
26
  return 0;
@@ -12,33 +12,42 @@ var column = require('../../constants/column.js');
12
12
  var formula = require('../../constants/formula.js');
13
13
  var sort = require('../../constants/sort.js');
14
14
 
15
- var sortFormula = function sortFormula(currCellVal, nextCellVal, sortType, _ref) {
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) {
16
25
  var columnData = _ref.columnData,
17
26
  value = _ref.value;
18
27
  var _ref2 = columnData || {},
19
28
  result_type = _ref2.result_type;
20
29
  if (sort.NUMBER_SORTER_COLUMN_TYPES.includes(result_type)) {
21
- var currNumber = currCellVal || currCellVal === 0 ? currCellVal - 0 : null;
22
- var nextNumber = nextCellVal || nextCellVal === 0 ? nextCellVal - 0 : null;
23
- return number.sortNumber(currNumber, nextNumber, sortType);
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);
24
33
  }
25
34
  if (column.DATE_COLUMN_OPTIONS.includes(result_type)) {
26
- return date.sortDate(currCellVal, nextCellVal, sortType);
35
+ return date.sortDate(leftComputedValue, rightComputedValue, sortType);
27
36
  }
28
37
  if (result_type === formula.FORMULA_RESULT_TYPE.BOOL) {
29
- var currBoolean = currCellVal || false;
30
- var nextBoolean = nextCellVal || false;
31
- return checkbox.sortCheckbox(currBoolean, nextBoolean);
38
+ var leftBoolean = leftComputedValue || false;
39
+ var rightBoolean = rightComputedValue || false;
40
+ return checkbox.sortCheckbox(leftBoolean, rightBoolean, sortType);
32
41
  }
33
42
  if (result_type === formula.FORMULA_RESULT_TYPE.ARRAY) {
34
- return array.sortByArrayType(currCellVal, nextCellVal, sortType, {
43
+ return array.sortByArrayType(leftComputedValue, rightComputedValue, sortType, {
35
44
  columnData: columnData,
36
45
  value: value
37
46
  });
38
47
  }
39
- var currText = cellValue.getFormulaDisplayString(currCellVal, columnData);
40
- var nextText = cellValue.getFormulaDisplayString(nextCellVal, columnData);
41
- return text.sortText(currText, nextText, sortType);
48
+ var leftText = cellValue.getFormulaDisplayString(leftComputedValue, columnData);
49
+ var rightText = cellValue.getFormulaDisplayString(rightComputedValue, columnData);
50
+ return text.sortText(leftText, rightText, sortType);
42
51
  };
43
52
 
44
53
  exports.sortFormula = sortFormula;
@@ -4,21 +4,30 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var array = require('./array.js');
6
6
 
7
- var sortLink = function sortLink(currCellVal, nextCellVal, sortType, _ref) {
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) {
8
17
  var columnData = _ref.columnData,
9
18
  value = _ref.value;
10
- var emptyCurrCellVal = !Array.isArray(currCellVal) || currCellVal.length === 0;
11
- var emptyNextCellVal = !Array.isArray(nextCellVal) || nextCellVal.length === 0;
12
- if (emptyCurrCellVal && emptyNextCellVal) return 0;
13
- if (emptyCurrCellVal) return 1;
14
- if (emptyNextCellVal) return -1;
15
- var currDisplayValues = currCellVal.map(function (linked) {
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) {
16
25
  return linked.display_value;
17
26
  });
18
- var nextDisplayValues = nextCellVal.map(function (linked) {
27
+ var rightDisplayValues = rightLinkedCellValues.map(function (linked) {
19
28
  return linked.display_value;
20
29
  });
21
- return array.sortByArrayType(currDisplayValues, nextDisplayValues, sortType, {
30
+ return array.sortByArrayType(leftDisplayValues, rightDisplayValues, sortType, {
22
31
  columnData: columnData,
23
32
  value: value
24
33
  });
@@ -2,49 +2,48 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var core = require('../core.js');
5
6
  var sort = require('../../constants/sort.js');
6
7
 
7
- var getMultipleIndexesOrderbyOptions = function getMultipleIndexesOrderbyOptions(cellValue, option_id_index_map) {
8
- var indexArr = [];
9
- cellValue.forEach(function (optionId) {
10
- var index = option_id_index_map[optionId];
11
- if (index > -1) {
12
- indexArr.push(index);
13
- }
14
- });
15
- return indexArr.sort();
16
- };
17
- var sortMultipleSelect = function sortMultipleSelect(currCellVal, nextCellVal, _ref) {
8
+ /**
9
+ * Sort multiple-select
10
+ * @param {array} leftOptionIds the ids of options
11
+ * @param {array} rightOptionIds
12
+ * @param {string} sort_type e.g. 'up' | 'down'
13
+ * @param {object} option_id_index_map e.g. { [option.id]: 0, ... }
14
+ * @returns number
15
+ */
16
+ var sortMultipleSelect = function sortMultipleSelect(leftOptionIds, rightOptionIds, _ref) {
18
17
  var sort_type = _ref.sort_type,
19
18
  option_id_index_map = _ref.option_id_index_map;
20
- var emptyCurrCellVal = !currCellVal || currCellVal.length === 0;
21
- var emptyNextCellVal = !nextCellVal || nextCellVal.length === 0;
22
- if (emptyCurrCellVal && emptyNextCellVal) return 0;
23
- if (emptyCurrCellVal) return 1;
24
- if (emptyNextCellVal) return -1;
25
- var currCellValIndexes = getMultipleIndexesOrderbyOptions(currCellVal, option_id_index_map);
26
- var nextCellValIndexes = getMultipleIndexesOrderbyOptions(nextCellVal, option_id_index_map);
27
- var currLen = currCellValIndexes.length;
28
- var nextLen = nextCellValIndexes.length;
19
+ var emptyLeftOptionIds = !leftOptionIds || leftOptionIds.length === 0;
20
+ var emptyRightOptionIds = !rightOptionIds || rightOptionIds.length === 0;
21
+ if (emptyLeftOptionIds && emptyRightOptionIds) return 0;
22
+ if (emptyLeftOptionIds) return 1;
23
+ if (emptyRightOptionIds) return -1;
24
+ var leftOptionIndexes = core.getMultipleIndexesOrderbyOptions(leftOptionIds, option_id_index_map);
25
+ var rightOptionIndexes = core.getMultipleIndexesOrderbyOptions(rightOptionIds, option_id_index_map);
26
+ var leftOptionsLen = leftOptionIndexes.length;
27
+ var rightOptionsLen = rightOptionIndexes.length;
29
28
 
30
29
  // current multiple select equal to next multiple select.
31
- if (currLen === nextLen && (currLen === 0 || currCellValIndexes.join('') === nextCellValIndexes.join(''))) {
30
+ if (leftOptionsLen === rightOptionsLen && (leftOptionsLen === 0 || leftOptionIndexes.join('') === rightOptionIndexes.join(''))) {
32
31
  return 0;
33
32
  }
34
- var len = Math.min(currLen, nextLen);
33
+ var len = Math.min(leftOptionsLen, rightOptionsLen);
35
34
  for (var i = 0; i < len; i++) {
36
- if (currCellValIndexes[i] > nextCellValIndexes[i]) {
35
+ if (leftOptionIndexes[i] > rightOptionIndexes[i]) {
37
36
  return sort_type === sort.SORT_TYPE.UP ? 1 : -1;
38
37
  }
39
- if (currCellValIndexes[i] < nextCellValIndexes[i]) {
38
+ if (leftOptionIndexes[i] < rightOptionIndexes[i]) {
40
39
  return sort_type === sort.SORT_TYPE.UP ? -1 : 1;
41
40
  }
42
41
  }
43
- if (currLen > nextLen) {
42
+ if (leftOptionsLen > rightOptionsLen) {
44
43
  return sort_type === sort.SORT_TYPE.UP ? 1 : -1;
45
44
  }
46
45
  return sort_type === sort.SORT_TYPE.UP ? -1 : 1;
47
46
  };
48
47
 
49
- exports.getMultipleIndexesOrderbyOptions = getMultipleIndexesOrderbyOptions;
48
+ exports.getMultipleIndexesOrderbyOptions = core.getMultipleIndexesOrderbyOptions;
50
49
  exports.sortMultipleSelect = sortMultipleSelect;
@@ -4,16 +4,23 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var sort = require('../../constants/sort.js');
6
6
 
7
- var sortNumber = function sortNumber(currNum, nextNum, sortType) {
8
- var emptyCurrNum = !currNum && currNum !== 0;
9
- var emptyNextNum = !nextNum && nextNum !== 0;
10
- if (emptyCurrNum && emptyNextNum) return 0;
11
- if (emptyCurrNum) return 1;
12
- if (emptyNextNum) return -1;
13
- if (currNum > nextNum) {
7
+ /**
8
+ * Sort number
9
+ * @param {number} leftNumber
10
+ * @param {number} rightNumber
11
+ * @param {string} sortType e.g. 'up' | 'down'
12
+ * @returns number
13
+ */
14
+ var sortNumber = function sortNumber(leftNumber, rightNumber, sortType) {
15
+ var emptyLeftNumber = !leftNumber && leftNumber !== 0;
16
+ var emptyRightNumber = !rightNumber && rightNumber !== 0;
17
+ if (emptyLeftNumber && emptyRightNumber) return 0;
18
+ if (emptyLeftNumber) return 1;
19
+ if (emptyRightNumber) return -1;
20
+ if (leftNumber > rightNumber) {
14
21
  return sortType === sort.SORT_TYPE.UP ? 1 : -1;
15
22
  }
16
- if (currNum < nextNum) {
23
+ if (leftNumber < rightNumber) {
17
24
  return sortType === sort.SORT_TYPE.UP ? -1 : 1;
18
25
  }
19
26
  return 0;
@@ -4,16 +4,24 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var sort = require('../../constants/sort.js');
6
6
 
7
- var sortSingleSelect = function sortSingleSelect(currCellVal, nextCellVal, _ref) {
7
+ /**
8
+ * Sort single-select
9
+ * @param {string} leftOptionId the id of option
10
+ * @param {string} rightOptionId
11
+ * @param {string} sort_type e.g. 'up' | 'down'
12
+ * @param {object} option_id_index_map e.g. { [option.id]: 0, ... }
13
+ * @returns number
14
+ */
15
+ var sortSingleSelect = function sortSingleSelect(leftOptionId, rightOptionId, _ref) {
8
16
  var sort_type = _ref.sort_type,
9
17
  option_id_index_map = _ref.option_id_index_map;
10
- var currentOptionIdIndex = option_id_index_map[currCellVal];
11
- var nextOptionIdIndex = option_id_index_map[nextCellVal];
12
- var emptyCurrCellVal = !currentOptionIdIndex && currentOptionIdIndex !== 0;
13
- var emptyNextCellVal = !nextOptionIdIndex && nextOptionIdIndex !== 0;
14
- if (emptyCurrCellVal && emptyNextCellVal) return 0;
15
- if (emptyCurrCellVal) return 1;
16
- if (emptyNextCellVal) return -1;
18
+ var currentOptionIdIndex = option_id_index_map[leftOptionId];
19
+ var nextOptionIdIndex = option_id_index_map[rightOptionId];
20
+ var emptyLeftOptionId = !currentOptionIdIndex && currentOptionIdIndex !== 0;
21
+ var emptyRightOptionId = !nextOptionIdIndex && nextOptionIdIndex !== 0;
22
+ if (emptyLeftOptionId && emptyRightOptionId) return 0;
23
+ if (emptyLeftOptionId) return 1;
24
+ if (emptyRightOptionId) return -1;
17
25
  if (currentOptionIdIndex > nextOptionIdIndex) {
18
26
  return sort_type === sort.SORT_TYPE.UP ? 1 : -1;
19
27
  }
@@ -5,6 +5,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var reg = require('../../constants/reg.js');
6
6
  var sort = require('../../constants/sort.js');
7
7
 
8
+ /**
9
+ * Compare strings
10
+ * @param {string} leftString
11
+ * @param {string} rightString
12
+ * @returns number
13
+ */
8
14
  var compareString = function compareString(leftString, rightString) {
9
15
  if (!leftString && !rightString) return 0;
10
16
  if (!leftString) return -1;
@@ -23,8 +29,8 @@ var compareString = function compareString(leftString, rightString) {
23
29
  rightStringPart = rightStringParts[i];
24
30
  isDigitPart = reg.REG_NUMBER_DIGIT.test(leftStringPart) && reg.REG_NUMBER_DIGIT.test(rightStringPart);
25
31
  if (isDigitPart) {
26
- leftStringPart = parseInt(leftStringPart, 10);
27
- rightStringPart = parseInt(rightStringPart, 10);
32
+ leftStringPart = parseInt(leftStringPart);
33
+ rightStringPart = parseInt(rightStringPart);
28
34
  if (leftStringPart > rightStringPart) {
29
35
  return 1;
30
36
  }
@@ -38,14 +44,22 @@ var compareString = function compareString(leftString, rightString) {
38
44
  }
39
45
  return leftString.localeCompare(rightString);
40
46
  };
41
- var sortText = function sortText(currCellVal, nextCellVal, sortType) {
42
- var emptyCurrCellVal = !currCellVal;
43
- var emptyNextCellVal = !nextCellVal;
44
- if (emptyCurrCellVal && emptyNextCellVal) return 0;
45
- if (emptyCurrCellVal) return 1;
46
- if (emptyNextCellVal) return -1;
47
- if (nextCellVal === currCellVal) return 0;
48
- return sortType === sort.SORT_TYPE.UP ? compareString(currCellVal, nextCellVal) : -1 * compareString(currCellVal, nextCellVal);
47
+
48
+ /**
49
+ * Sort text
50
+ * @param {string} leftText
51
+ * @param {string} rightText
52
+ * @param {string} sortType e.g. 'up' | 'down
53
+ * @returns number
54
+ */
55
+ var sortText = function sortText(leftText, rightText, sortType) {
56
+ var emptyLeftText = !leftText;
57
+ var emptyRightText = !rightText;
58
+ if (emptyLeftText && emptyRightText) return 0;
59
+ if (emptyLeftText) return 1;
60
+ if (emptyRightText) return -1;
61
+ if (rightText === leftText) return 0;
62
+ return sortType === sort.SORT_TYPE.UP ? compareString(leftText, rightText) : -1 * compareString(leftText, rightText);
49
63
  };
50
64
 
51
65
  exports.compareString = compareString;
@@ -2,7 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
5
  var core = require('./core.js');
7
6
  var checkbox = require('./sort-column/checkbox.js');
8
7
  var collaborator$1 = require('./sort-column/collaborator.js');
@@ -18,49 +17,20 @@ var formula$1 = require('./sort-column/formula.js');
18
17
  var link = require('./sort-column/link.js');
19
18
  var multipleSelect = require('./sort-column/multiple-select.js');
20
19
  var singleSelect = require('./sort-column/single-select.js');
21
- var option = require('../column/option.js');
22
20
  var sort = require('../constants/sort.js');
23
21
 
24
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
-
26
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
27
-
28
- 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; }
29
- 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; }
30
- var deleteInvalidSort = function deleteInvalidSort(sorts, columns) {
31
- var validSorts = core.getValidSorts(sorts, columns);
32
- var cleanSorts = [];
33
- validSorts.forEach(function (sort) {
34
- var column_key = sort.column_key;
35
- var sortColumn = columns.find(function (column) {
36
- return column.key === column_key;
37
- });
38
- var columnType = sortColumn.type;
39
- var newSort = _objectSpread(_objectSpread({}, sort), {}, {
40
- column: sortColumn
41
- });
42
- switch (columnType) {
43
- case cellType.CellType.SINGLE_SELECT:
44
- case cellType.CellType.MULTIPLE_SELECT:
45
- {
46
- var options = option.getColumnOptions(sortColumn);
47
- var option_id_index_map = {};
48
- options.forEach(function (option, index) {
49
- option_id_index_map[option.id] = index;
50
- });
51
- newSort.option_id_index_map = option_id_index_map;
52
- break;
53
- }
54
- }
55
- cleanSorts.push(newSort);
56
- });
57
- return cleanSorts;
58
- };
59
- var sortRowsWithMultiSorts = function sortRowsWithMultiSorts(sortRows, sorts, _ref) {
22
+ /**
23
+ * Sort rows with multiple sorts
24
+ * @param {array} tableRows e.g. [{ _id, [column.key]: '', ...}, ...]
25
+ * @param {array} sorts e.g. [{ column_key, sort_type, column, ... }, ...]
26
+ * @param {object} formulaRows computed value of formula, link-formula, link etc.
27
+ * @param {object} value e.g. { collaborators, ... }
28
+ */
29
+ var sortRowsWithMultiSorts = function sortRowsWithMultiSorts(tableRows, sorts, _ref) {
60
30
  var _ref$formulaRows = _ref.formulaRows,
61
31
  formulaRows = _ref$formulaRows === void 0 ? {} : _ref$formulaRows,
62
32
  value = _ref.value;
63
- sortRows.sort(function (currentRow, nextRow) {
33
+ tableRows.sort(function (currentRow, nextRow) {
64
34
  var initValue = 0;
65
35
  sorts.forEach(function (sort$1) {
66
36
  var column_key = sort$1.column_key,
@@ -114,13 +84,23 @@ var sortRowsWithMultiSorts = function sortRowsWithMultiSorts(sortRows, sorts, _r
114
84
  return initValue;
115
85
  });
116
86
  };
87
+
88
+ /**
89
+ * Get sorted rows ids from table rows with multiple sorts
90
+ * @param {array} sorts e.g. [{ column_key, sort_type, column, ... }, ...]
91
+ * @param {array} rows e.g. [{ _id, [column.key]: '', ...}, ...]
92
+ * @param {array} columns e.g. [{ key, type, ... }, ...]
93
+ * @param {object} formulaRows computed value of formula, link-formula, link etc.
94
+ * @param {object} value e.g. { collaborators, ... }
95
+ * @returns sorted rows ids, array
96
+ */
117
97
  var sortTableRows = function sortTableRows(sorts, rows, columns) {
118
98
  var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
119
99
  formulaRows = _ref2.formulaRows,
120
100
  value = _ref2.value;
121
- if (!Array.isArray(rows)) return [];
101
+ if (!Array.isArray(rows) || rows.length === 0) return [];
122
102
  var sortRows = rows.slice(0);
123
- var validSorts = deleteInvalidSort(sorts, columns);
103
+ var validSorts = core.deleteInvalidSort(sorts, columns);
124
104
  var normalizedFormulaRows = formulaRows || {};
125
105
  sortRowsWithMultiSorts(sortRows, validSorts, {
126
106
  formulaRows: normalizedFormulaRows,
@@ -131,6 +111,5 @@ var sortTableRows = function sortTableRows(sorts, rows, columns) {
131
111
  });
132
112
  };
133
113
 
134
- exports.deleteInvalidSort = deleteInvalidSort;
135
114
  exports.sortRowsWithMultiSorts = sortRowsWithMultiSorts;
136
115
  exports.sortTableRows = sortTableRows;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * get column by key from table
6
+ * Get column by key from table
7
7
  * @param {object} table
8
8
  * @param {string} columnKey
9
9
  * @returns column, object
@@ -16,7 +16,7 @@ var getTableColumnByKey = function getTableColumnByKey(table, columnKey) {
16
16
  };
17
17
 
18
18
  /**
19
- * get column by name from table
19
+ * Get table column by name
20
20
  * @param {object} table
21
21
  * @param {string} columnName
22
22
  * @returns column, object
package/lib/table/core.js CHANGED
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * get table by id
6
+ * Get table by id
7
7
  * @param {array} tables
8
8
  * @param {string} tableId
9
- * @returns object
9
+ * @returns table, object
10
10
  */
11
11
  var getTableById = function getTableById(tables, tableId) {
12
12
  if (!Array.isArray(tables) || !tableId) return null;
package/lib/table/row.js CHANGED
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /**
6
- * get row by id from table
6
+ * Get table row by id
7
7
  * @param {object} table
8
8
  * @param {string} rowId the id of row
9
- * @returns object
9
+ * @returns row, object
10
10
  */
11
11
  var getRowById = function getRowById(table, rowId) {
12
12
  if (!table || !table.id_row_map || !rowId) return null;
@@ -14,10 +14,10 @@ var getRowById = function getRowById(table, rowId) {
14
14
  };
15
15
 
16
16
  /**
17
- * get rows by ids from table
17
+ * Get table rows by ids
18
18
  * @param {object} table { id_row_map, ... }
19
19
  * @param {array} rowsIds [ row._id, ... ]
20
- * @returns array, rows: [ row, ... ]
20
+ * @returns rows, array
21
21
  */
22
22
  var getRowsByIds = function getRowsByIds(table, rowsIds) {
23
23
  if (!table || !table.id_row_map || !Array.isArray(rowsIds)) return [];