dtable-utils 0.0.3-beta.1 → 0.0.3

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 +2 -30
  2. package/dist/index.js +1 -1
  3. package/es/cell-value-get/cell-value.js +19 -227
  4. package/es/cell-value-get/collaborator.js +3 -9
  5. package/es/cell-value-get/digital-sign.js +1 -1
  6. package/es/cell-value-get/duration.js +1 -1
  7. package/es/cell-value-get/geolocation.js +5 -29
  8. package/es/cell-value-get/long-text.js +1 -1
  9. package/es/cell-value-get/number.js +18 -42
  10. package/es/cell-value-get/option.js +7 -17
  11. package/es/cell-value-set/number.js +1 -53
  12. package/es/column/{core.js → common.js} +14 -2
  13. package/es/column/date.js +1 -1
  14. package/es/column/number.js +1 -1
  15. package/es/common.js +10 -9
  16. package/es/constants/column.js +2 -127
  17. package/es/constants/filter/index.js +1 -5
  18. package/es/date.js +1 -1
  19. package/es/index.js +10 -62
  20. package/es/validate/filter.js +1 -1
  21. package/lib/cell-value-get/cell-value.js +18 -231
  22. package/lib/cell-value-get/collaborator.js +2 -9
  23. package/lib/cell-value-get/digital-sign.js +1 -1
  24. package/lib/cell-value-get/duration.js +1 -0
  25. package/lib/cell-value-get/geolocation.js +5 -30
  26. package/lib/cell-value-get/long-text.js +1 -1
  27. package/lib/cell-value-get/number.js +17 -42
  28. package/lib/cell-value-get/option.js +6 -18
  29. package/lib/cell-value-set/number.js +0 -53
  30. package/lib/column/{core.js → common.js} +14 -1
  31. package/lib/column/date.js +2 -2
  32. package/lib/column/number.js +3 -3
  33. package/lib/common.js +11 -13
  34. package/lib/constants/column.js +1 -134
  35. package/lib/constants/filter/index.js +0 -5
  36. package/lib/index.js +8 -176
  37. package/lib/validate/filter.js +3 -3
  38. package/package.json +3 -5
  39. package/es/cell-value-get/rate.js +0 -6
  40. package/es/cell-value-set/date.js +0 -20
  41. package/es/color/gradient-color.js +0 -100
  42. package/es/column/color.js +0 -415
  43. package/es/column/option.js +0 -115
  44. package/es/constants/color.js +0 -16
  45. package/es/constants/column-permission.js +0 -7
  46. package/es/constants/grid-header.js +0 -6
  47. package/es/constants/group.js +0 -23
  48. package/es/constants/limit.js +0 -3
  49. package/es/constants/reg.js +0 -4
  50. package/es/constants/row-color.js +0 -11
  51. package/es/constants/sort.js +0 -11
  52. package/es/filter/core.js +0 -287
  53. package/es/filter/filter-column/array.js +0 -82
  54. package/es/filter/filter-column/checkbox.js +0 -8
  55. package/es/filter/filter-column/collaborator.js +0 -67
  56. package/es/filter/filter-column/creator.js +0 -50
  57. package/es/filter/filter-column/date.js +0 -59
  58. package/es/filter/filter-column/digital-sign.js +0 -26
  59. package/es/filter/filter-column/file.js +0 -24
  60. package/es/filter/filter-column/formula.js +0 -49
  61. package/es/filter/filter-column/geolocation.js +0 -53
  62. package/es/filter/filter-column/link.js +0 -12
  63. package/es/filter/filter-column/long-text.js +0 -25
  64. package/es/filter/filter-column/multiple-select.js +0 -60
  65. package/es/filter/filter-column/number.js +0 -93
  66. package/es/filter/filter-column/single-select.js +0 -41
  67. package/es/filter/filter-column/text.js +0 -55
  68. package/es/filter/filter-row.js +0 -198
  69. package/es/group/core.js +0 -107
  70. package/es/group/group-row.js +0 -366
  71. package/es/link/core.js +0 -78
  72. package/es/number.js +0 -13
  73. package/es/row/color.js +0 -278
  74. package/es/row/core.js +0 -161
  75. package/es/sort/core.js +0 -32
  76. package/es/sort/sort-column/array.js +0 -63
  77. package/es/sort/sort-column/checkbox.js +0 -15
  78. package/es/sort/sort-column/collaborator.js +0 -9
  79. package/es/sort/sort-column/date.js +0 -25
  80. package/es/sort/sort-column/formula.js +0 -40
  81. package/es/sort/sort-column/link.js +0 -23
  82. package/es/sort/sort-column/multiple-select.js +0 -45
  83. package/es/sort/sort-column/number.js +0 -18
  84. package/es/sort/sort-column/single-select.js +0 -22
  85. package/es/sort/sort-column/text.js +0 -47
  86. package/es/sort/sort-row.js +0 -126
  87. package/es/table/column.js +0 -27
  88. package/es/table/core.js +0 -14
  89. package/es/table/index.js +0 -14
  90. package/es/table/row.js +0 -25
  91. package/es/validate/geolocation.js +0 -5
  92. package/es/view/core.js +0 -135
  93. package/es/view/formula.js +0 -143
  94. package/es/view/group.js +0 -32
  95. package/es/view/summaries.js +0 -179
  96. package/lib/cell-value-get/rate.js +0 -10
  97. package/lib/cell-value-set/date.js +0 -24
  98. package/lib/color/gradient-color.js +0 -110
  99. package/lib/column/color.js +0 -424
  100. package/lib/column/option.js +0 -123
  101. package/lib/constants/color.js +0 -20
  102. package/lib/constants/column-permission.js +0 -11
  103. package/lib/constants/grid-header.js +0 -10
  104. package/lib/constants/group.js +0 -36
  105. package/lib/constants/limit.js +0 -7
  106. package/lib/constants/reg.js +0 -9
  107. package/lib/constants/row-color.js +0 -17
  108. package/lib/constants/sort.js +0 -18
  109. package/lib/filter/core.js +0 -301
  110. package/lib/filter/filter-column/array.js +0 -86
  111. package/lib/filter/filter-column/checkbox.js +0 -12
  112. package/lib/filter/filter-column/collaborator.js +0 -75
  113. package/lib/filter/filter-column/creator.js +0 -54
  114. package/lib/filter/filter-column/date.js +0 -63
  115. package/lib/filter/filter-column/digital-sign.js +0 -30
  116. package/lib/filter/filter-column/file.js +0 -28
  117. package/lib/filter/filter-column/formula.js +0 -53
  118. package/lib/filter/filter-column/geolocation.js +0 -57
  119. package/lib/filter/filter-column/link.js +0 -16
  120. package/lib/filter/filter-column/long-text.js +0 -29
  121. package/lib/filter/filter-column/multiple-select.js +0 -68
  122. package/lib/filter/filter-column/number.js +0 -97
  123. package/lib/filter/filter-column/single-select.js +0 -45
  124. package/lib/filter/filter-column/text.js +0 -59
  125. package/lib/filter/filter-row.js +0 -204
  126. package/lib/group/core.js +0 -117
  127. package/lib/group/group-row.js +0 -377
  128. package/lib/link/core.js +0 -90
  129. package/lib/number.js +0 -18
  130. package/lib/row/color.js +0 -286
  131. package/lib/row/core.js +0 -170
  132. package/lib/sort/core.js +0 -37
  133. package/lib/sort/sort-column/array.js +0 -67
  134. package/lib/sort/sort-column/checkbox.js +0 -19
  135. package/lib/sort/sort-column/collaborator.js +0 -13
  136. package/lib/sort/sort-column/date.js +0 -29
  137. package/lib/sort/sort-column/formula.js +0 -44
  138. package/lib/sort/sort-column/link.js +0 -27
  139. package/lib/sort/sort-column/multiple-select.js +0 -50
  140. package/lib/sort/sort-column/number.js +0 -22
  141. package/lib/sort/sort-column/single-select.js +0 -26
  142. package/lib/sort/sort-column/text.js +0 -52
  143. package/lib/sort/sort-row.js +0 -136
  144. package/lib/table/column.js +0 -32
  145. package/lib/table/core.js +0 -18
  146. package/lib/table/index.js +0 -18
  147. package/lib/table/row.js +0 -30
  148. package/lib/validate/geolocation.js +0 -9
  149. package/lib/view/core.js +0 -144
  150. package/lib/view/formula.js +0 -150
  151. package/lib/view/group.js +0 -36
  152. package/lib/view/summaries.js +0 -185
@@ -1,150 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var cellType = require('../constants/cell-type.js');
6
- var formula = require('../constants/formula.js');
7
-
8
- /**
9
- * transform the formats of link column to link-formula's
10
- * @param {object} linkColumn { key, data: { display_column_key, ... }, ... }
11
- * @returns object
12
- */
13
- var transLink2LinkFormula = function transLink2LinkFormula(linkColumn) {
14
- var key = linkColumn.key,
15
- name = linkColumn.name,
16
- data = linkColumn.data;
17
- var display_column_key = data.display_column_key;
18
- return {
19
- key: key,
20
- name: name,
21
- type: cellType.CellType.LINK_FORMULA,
22
- data: {
23
- formula: 'lookup',
24
- link_column_key: key,
25
- level1_linked_table_column_key: display_column_key,
26
- level2_linked_table_column_key: null,
27
- operated_columns: []
28
- }
29
- };
30
- };
31
-
32
- /**
33
- * get sorted formula columns
34
- * @param {array} formulaColumns
35
- * @param {object} table
36
- * @returns array
37
- */
38
- var getSortedFormulaColumns = function getSortedFormulaColumns(formulaColumns, table) {
39
- if (!Array.isArray(formulaColumns) || !table || !Array.isArray(table.columns)) return [];
40
- var keyColumnMap = {};
41
- table.columns.forEach(function (column) {
42
- var key = column.key,
43
- type = column.type;
44
- if (formula.FORMULA_COLUMN_TYPES_MAP[type]) {
45
- keyColumnMap[key] = column;
46
- } else if (type === cellType.CellType.LINK && column.data) {
47
- keyColumnMap[key] = transLink2LinkFormula(column);
48
- }
49
- });
50
-
51
- // get none-repeating formulas
52
- var key_sorting_formula_column = {};
53
- var sorting_formula_column_keys = [];
54
- formulaColumns.forEach(function (column) {
55
- var columnKey = column.key;
56
- if (!key_sorting_formula_column[columnKey]) {
57
- key_sorting_formula_column[columnKey] = column;
58
- sorting_formula_column_keys.push(columnKey);
59
- }
60
- });
61
-
62
- /**
63
- * e.g. formula1 = formula2 + formula3
64
- * e.g. formula2 = 1 + 2
65
- * e.g. formula3 = formula2 + 3
66
- * edges: formula2 --> formula1, formula2 --> formula3; formula3 --> formula1
67
- * keyInDegreeMap, the total number of formula columns that depend on: { formula1_key: 2, formula2_key: 0, formula3_key: 1 }
68
- * keyEdgesMap: { formula2_key: [formula1_key, formula3_key], formula3_kye: [formula1_key]}
69
- */
70
- var keyInDegreeMap = {};
71
- var keyEdgesMap = {};
72
- sorting_formula_column_keys.forEach(function (formulaColumnKey) {
73
- var formulaColumn = key_sorting_formula_column[formulaColumnKey];
74
- var data = formulaColumn.data;
75
- var operated_columns = data.operated_columns;
76
- keyInDegreeMap[formulaColumnKey] = 0;
77
- Array.isArray(operated_columns) && operated_columns.forEach(function (dependColumnKey) {
78
- var dependColumn = keyColumnMap[dependColumnKey];
79
- if (!dependColumn) {
80
- return;
81
- }
82
- keyInDegreeMap[formulaColumnKey]++;
83
- if (keyEdgesMap[dependColumnKey]) {
84
- keyEdgesMap[dependColumnKey].push(formulaColumnKey);
85
- } else {
86
- keyEdgesMap[dependColumnKey] = [formulaColumnKey];
87
- }
88
- });
89
- });
90
- var sortedList = [];
91
- var waitingQueue = [];
92
- sorting_formula_column_keys.forEach(function (formulaColumnKey) {
93
- if (keyInDegreeMap[formulaColumnKey] === 0) {
94
- waitingQueue.push(formulaColumnKey);
95
- }
96
- });
97
- while (waitingQueue.length) {
98
- var columnKey = waitingQueue.shift();
99
- var edges = keyEdgesMap[columnKey];
100
- sortedList.push(columnKey);
101
- Array.isArray(edges) && edges.forEach(function (edge) {
102
- keyInDegreeMap[edge]--;
103
- if (keyInDegreeMap[edge] === 0) {
104
- waitingQueue.push(edge);
105
- }
106
- });
107
- }
108
- return sortedList.map(function (columnKey) {
109
- return keyColumnMap[columnKey];
110
- });
111
- };
112
-
113
- /**
114
- * get formula columns and link columns from table
115
- * @param {object} table { columns: [], ... }
116
- * @returns array
117
- */
118
- var getFormulaColumnsContainLinks = function getFormulaColumnsContainLinks(table) {
119
- var columns = table.columns;
120
- var formulaColumns = columns.filter(function (column) {
121
- var type = column.type,
122
- data = column.data;
123
- if (type === cellType.CellType.LINK) {
124
- return !!data;
125
- }
126
- return formula.FORMULA_COLUMN_TYPES_MAP[type] && data;
127
- });
128
- return formulaColumns.map(function (column) {
129
- if (column.type === cellType.CellType.LINK) {
130
- return transLink2LinkFormula(column);
131
- }
132
- return column;
133
- });
134
- };
135
-
136
- /**
137
- * get sorted formula columns and link columns from table
138
- * @param {object} table { columns: [], ... }
139
- * @returns array
140
- */
141
- var getSortedFormulaColumnsContainLinks = function getSortedFormulaColumnsContainLinks(table) {
142
- var formulaColumns = getFormulaColumnsContainLinks(table);
143
- if (formulaColumns.length === 0) return [];
144
- return getSortedFormulaColumns(formulaColumns, table);
145
- };
146
-
147
- exports.getFormulaColumnsContainLinks = getFormulaColumnsContainLinks;
148
- exports.getSortedFormulaColumns = getSortedFormulaColumns;
149
- exports.getSortedFormulaColumnsContainLinks = getSortedFormulaColumnsContainLinks;
150
- exports.transLink2LinkFormula = transLink2LinkFormula;
package/lib/view/group.js DELETED
@@ -1,36 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- /**
6
- * get group by paths.
7
- * @param {array} paths e.g. [0, 1, 2]
8
- * @param {array} groups
9
- * @returns object
10
- */
11
- var getGroupByPath = function getGroupByPath(paths, groups) {
12
- if (!Array.isArray(paths) || !Array.isArray(groups)) {
13
- return null;
14
- }
15
- var level0GroupIndex = paths[0];
16
- if (level0GroupIndex < 0 || level0GroupIndex >= groups.length) {
17
- return null;
18
- }
19
- var level = 1;
20
- var foundGroup = groups[level0GroupIndex];
21
- while (level < paths.length) {
22
- if (!foundGroup) {
23
- break;
24
- }
25
- var subGroups = foundGroup.subgroups;
26
- var currentLevelGroupIndex = paths[level];
27
- if (!Array.isArray(subGroups) || currentLevelGroupIndex < 0 || currentLevelGroupIndex >= subGroups.length) {
28
- break;
29
- }
30
- foundGroup = subGroups[currentLevelGroupIndex];
31
- level += 1;
32
- }
33
- return foundGroup;
34
- };
35
-
36
- exports.getGroupByPath = getGroupByPath;
@@ -1,185 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var row = require('../table/row.js');
6
- var core = require('../row/core.js');
7
- require('@babel/runtime/helpers/defineProperty');
8
- require('../constants/group.js');
9
- require('../validate/filter.js');
10
- require('../filter/core.js');
11
- require('@babel/runtime/helpers/toConsumableArray');
12
- require('../constants/filter/filter-column-options.js');
13
- require('../constants/filter/filter-modifier.js');
14
- require('../constants/filter/filter-predicate.js');
15
- require('../constants/filter/filter-is-within.js');
16
- require('../date.js');
17
- var number$1 = require('../number.js');
18
- require('../cell-value-get/cell-value.js');
19
- var number = require('../column/number.js');
20
- require('../constants/column.js');
21
- var formula = require('../constants/formula.js');
22
- require('../constants/row-color.js');
23
-
24
- /**
25
- * calculate summaries of numeric columns from table
26
- * @param {object} table
27
- * @param {array} rows table's rows or rows ids
28
- * @param {object} formulaRows support numeric formula columns
29
- * @returns object, { [column.key]: { sum, average, median, max, min, ... }, ... }
30
- */
31
- var getSummaries = function getSummaries(table, rows, formulaRows) {
32
- var numericColumns = table.columns.filter(function (column) {
33
- return number.isNumericColumn(column);
34
- });
35
- if (numericColumns.length === 0) {
36
- return {};
37
- }
38
- var summaryRows = core.isTableRows(rows) ? rows : row.getRowsByIds(table, rows);
39
- var summaries = {};
40
- numericColumns.forEach(function (column) {
41
- var type = column.type,
42
- key = column.key;
43
- var validNumbersCount = 0;
44
- var medianArr = [];
45
- var sum = 0;
46
- var min;
47
- var max;
48
- var median;
49
- summaryRows.forEach(function (row) {
50
- var cellValue = row[key];
51
- if (formula.FORMULA_COLUMN_TYPES_MAP[type]) {
52
- var formulaRow = formulaRows && formulaRows[row._id];
53
- cellValue = formulaRow && formulaRow[key];
54
- if (Array.isArray(cellValue) && cellValue.length === 1) {
55
- cellValue = cellValue[0];
56
- }
57
- }
58
- if (number$1.isNumber(cellValue)) {
59
- medianArr.push(cellValue);
60
- validNumbersCount += 1;
61
- sum += cellValue;
62
- if (min === undefined) {
63
- min = cellValue;
64
- } else {
65
- min = cellValue < min ? cellValue : min;
66
- }
67
- if (max === undefined) {
68
- max = cellValue;
69
- } else {
70
- max = cellValue > max ? cellValue : max;
71
- }
72
- }
73
- });
74
- if (validNumbersCount > 0) {
75
- medianArr.sort();
76
- if (medianArr.length % 2 === 0) {
77
- median = (medianArr[medianArr.length / 2 - 1] + medianArr[medianArr.length / 2]) / 2;
78
- } else {
79
- median = medianArr[parseInt(medianArr.length / 2)];
80
- }
81
- }
82
- var average = validNumbersCount === 0 ? 0 : sum / validNumbersCount;
83
- summaries[key] = {
84
- sum: sum,
85
- average: average,
86
- median: median,
87
- max: max,
88
- min: min
89
- };
90
- });
91
- return summaries;
92
- };
93
-
94
- /**
95
- * calculate sub-group's summaries of numeric columns
96
- * @param {array} subgroups { summaries, ... }
97
- * @param {array} numericColumns
98
- * @returns object, { [column.key]: { sum, average, median, max, min, ... } }
99
- */
100
- var getSummariesWithSubgroups = function getSummariesWithSubgroups(subgroups, numericColumns) {
101
- var subgroupsLen = subgroups.length;
102
- var summaries = {};
103
- numericColumns.forEach(function (column) {
104
- var medianArr = [];
105
- var sum = 0;
106
- var average = 0;
107
- var median;
108
- var max;
109
- var min;
110
- subgroups.forEach(function (subgroup) {
111
- var summaries = subgroup.summaries;
112
- var summary = summaries[column.key];
113
- var subgroupSum = summary.sum,
114
- subgroupAverage = summary.average,
115
- subgroupMedian = summary.median,
116
- subgroupMax = summary.max,
117
- subgroupMin = summary.min;
118
- sum += subgroupSum || 0;
119
- average += subgroupAverage || 0;
120
- if (number$1.isNumber(subgroupMedian)) {
121
- medianArr.push(subgroupMedian);
122
- }
123
- if (number$1.isNumber(subgroupMax)) {
124
- if (max === undefined) {
125
- max = subgroupMax;
126
- } else {
127
- max = subgroupMax > max ? subgroupMax : max;
128
- }
129
- }
130
- if (number$1.isNumber(subgroupMin)) {
131
- if (min === undefined) {
132
- min = subgroupMin;
133
- } else {
134
- min = subgroupMin < min ? subgroupMin : min;
135
- }
136
- }
137
- });
138
- if (medianArr.length > 0) {
139
- medianArr.sort();
140
- if (medianArr.length % 2 === 0) {
141
- median = (medianArr[medianArr.length / 2 - 1] + medianArr[medianArr.length / 2]) / 2;
142
- } else {
143
- median = medianArr[parseInt(medianArr.length / 2)];
144
- }
145
- }
146
- average = average / subgroupsLen;
147
- summaries[column.key] = {
148
- sum: sum,
149
- average: average,
150
- median: median,
151
- max: max,
152
- min: min
153
- };
154
- });
155
- return summaries;
156
- };
157
-
158
- /**
159
- * calculate group's summaries of numeric columns from table
160
- * @param {array} groups { subgroups, row_ids, ... }
161
- * @param {object} table
162
- * @param {object} formulaRows support numeric formula columns
163
- */
164
- var updateGroupSummaries = function updateGroupSummaries(groups, table, formulaRows) {
165
- var numericColumns = table.columns.filter(function (column) {
166
- return number.isNumericColumn(column);
167
- });
168
- if (!Array.isArray(groups) || numericColumns.length === 0) {
169
- return;
170
- }
171
- groups.forEach(function (group) {
172
- var subgroups = group.subgroups,
173
- row_ids = group.row_ids;
174
- if (Array.isArray(subgroups) && subgroups.length > 0) {
175
- updateGroupSummaries(subgroups, table, formulaRows);
176
- group.summaries = getSummariesWithSubgroups(subgroups, numericColumns);
177
- } else if (row_ids) {
178
- group.summaries = getSummaries(table, row_ids, formulaRows);
179
- }
180
- });
181
- };
182
-
183
- exports.getSummaries = getSummaries;
184
- exports.getSummariesWithSubgroups = getSummariesWithSubgroups;
185
- exports.updateGroupSummaries = updateGroupSummaries;