@sisense/sdk-pivot-query-client 2.17.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 (189) hide show
  1. package/LICENSE.md +35 -0
  2. package/README.md +2 -0
  3. package/dist/__test-helpers__/testUtils.d.ts +30 -0
  4. package/dist/__test-helpers__/testUtils.js +89 -0
  5. package/dist/builders/index.d.ts +2 -0
  6. package/dist/builders/index.js +2 -0
  7. package/dist/builders/pivot-data-builder.d.ts +34 -0
  8. package/dist/builders/pivot-data-builder.js +182 -0
  9. package/dist/builders/socket-builder.d.ts +18 -0
  10. package/dist/builders/socket-builder.js +72 -0
  11. package/dist/cjs/__test-helpers__/testUtils.d.ts +30 -0
  12. package/dist/cjs/__test-helpers__/testUtils.js +104 -0
  13. package/dist/cjs/builders/index.d.ts +2 -0
  14. package/dist/cjs/builders/index.js +7 -0
  15. package/dist/cjs/builders/pivot-data-builder.d.ts +34 -0
  16. package/dist/cjs/builders/pivot-data-builder.js +186 -0
  17. package/dist/cjs/builders/socket-builder.d.ts +18 -0
  18. package/dist/cjs/builders/socket-builder.js +79 -0
  19. package/dist/cjs/data-handling/DataService.d.ts +672 -0
  20. package/dist/cjs/data-handling/DataService.js +1364 -0
  21. package/dist/cjs/data-handling/DivergenceComparator.d.ts +7 -0
  22. package/dist/cjs/data-handling/DivergenceComparator.js +20 -0
  23. package/dist/cjs/data-handling/constants.d.ts +44 -0
  24. package/dist/cjs/data-handling/constants.js +43 -0
  25. package/dist/cjs/data-handling/index.d.ts +3 -0
  26. package/dist/cjs/data-handling/index.js +23 -0
  27. package/dist/cjs/data-handling/types.d.ts +104 -0
  28. package/dist/cjs/data-handling/types.js +2 -0
  29. package/dist/cjs/data-handling/utils/createPivotTreeNode.d.ts +13 -0
  30. package/dist/cjs/data-handling/utils/createPivotTreeNode.js +21 -0
  31. package/dist/cjs/data-handling/utils/index.d.ts +4 -0
  32. package/dist/cjs/data-handling/utils/index.js +14 -0
  33. package/dist/cjs/data-handling/utils/jaqlProcessor.d.ts +122 -0
  34. package/dist/cjs/data-handling/utils/jaqlProcessor.js +661 -0
  35. package/dist/cjs/data-handling/utils/pivotTransforms.d.ts +74 -0
  36. package/dist/cjs/data-handling/utils/pivotTransforms.js +373 -0
  37. package/dist/cjs/data-handling/utils/plugins/PluginService.d.ts +135 -0
  38. package/dist/cjs/data-handling/utils/plugins/PluginService.js +383 -0
  39. package/dist/cjs/data-handling/utils/plugins/getters.d.ts +23 -0
  40. package/dist/cjs/data-handling/utils/plugins/getters.js +70 -0
  41. package/dist/cjs/data-handling/utils/plugins/types.d.ts +75 -0
  42. package/dist/cjs/data-handling/utils/plugins/types.js +2 -0
  43. package/dist/cjs/data-handling/utils/plugins/validator.d.ts +13 -0
  44. package/dist/cjs/data-handling/utils/plugins/validator.js +169 -0
  45. package/dist/cjs/data-load/AbstractDataLoadService.d.ts +256 -0
  46. package/dist/cjs/data-load/AbstractDataLoadService.js +473 -0
  47. package/dist/cjs/data-load/DataLoadService.d.ts +63 -0
  48. package/dist/cjs/data-load/DataLoadService.js +152 -0
  49. package/dist/cjs/data-load/SisenseDataLoadService.d.ts +44 -0
  50. package/dist/cjs/data-load/SisenseDataLoadService.js +87 -0
  51. package/dist/cjs/data-load/TestDataLoadService.d.ts +27 -0
  52. package/dist/cjs/data-load/TestDataLoadService.js +76 -0
  53. package/dist/cjs/data-load/constants.d.ts +13 -0
  54. package/dist/cjs/data-load/constants.js +28 -0
  55. package/dist/cjs/data-load/index.d.ts +6 -0
  56. package/dist/cjs/data-load/index.js +14 -0
  57. package/dist/cjs/data-load/sockets/SisenseSocket.d.ts +81 -0
  58. package/dist/cjs/data-load/sockets/SisenseSocket.js +162 -0
  59. package/dist/cjs/data-load/sockets/TestSocket.d.ts +61 -0
  60. package/dist/cjs/data-load/sockets/TestSocket.js +90 -0
  61. package/dist/cjs/data-load/sockets/helpers.d.ts +4 -0
  62. package/dist/cjs/data-load/sockets/helpers.js +27 -0
  63. package/dist/cjs/data-load/sockets/index.d.ts +2 -0
  64. package/dist/cjs/data-load/sockets/index.js +8 -0
  65. package/dist/cjs/data-load/types.d.ts +90 -0
  66. package/dist/cjs/data-load/types.js +2 -0
  67. package/dist/cjs/errors/LoadingCanceledError.d.ts +7 -0
  68. package/dist/cjs/errors/LoadingCanceledError.js +24 -0
  69. package/dist/cjs/errors/index.d.ts +1 -0
  70. package/dist/cjs/errors/index.js +6 -0
  71. package/dist/cjs/index.d.ts +17 -0
  72. package/dist/cjs/index.js +32 -0
  73. package/dist/cjs/package.json +12 -0
  74. package/dist/cjs/pivot-query-client.d.ts +13 -0
  75. package/dist/cjs/pivot-query-client.js +26 -0
  76. package/dist/cjs/tree-structure/AbstractTreeService.d.ts +308 -0
  77. package/dist/cjs/tree-structure/AbstractTreeService.js +716 -0
  78. package/dist/cjs/tree-structure/HeaderTreeService.d.ts +180 -0
  79. package/dist/cjs/tree-structure/HeaderTreeService.js +280 -0
  80. package/dist/cjs/tree-structure/TreeCellMap.d.ts +104 -0
  81. package/dist/cjs/tree-structure/TreeCellMap.js +145 -0
  82. package/dist/cjs/tree-structure/TreeService.d.ts +8 -0
  83. package/dist/cjs/tree-structure/TreeService.js +12 -0
  84. package/dist/cjs/tree-structure/constants.d.ts +6 -0
  85. package/dist/cjs/tree-structure/constants.js +10 -0
  86. package/dist/cjs/tree-structure/index.d.ts +5 -0
  87. package/dist/cjs/tree-structure/index.js +10 -0
  88. package/dist/cjs/tree-structure/types.d.ts +93 -0
  89. package/dist/cjs/tree-structure/types.js +2 -0
  90. package/dist/cjs/tree-structure/utils/index.d.ts +1 -0
  91. package/dist/cjs/tree-structure/utils/index.js +9 -0
  92. package/dist/cjs/tree-structure/utils/treeNode.d.ts +147 -0
  93. package/dist/cjs/tree-structure/utils/treeNode.js +534 -0
  94. package/dist/cjs/utils/array.d.ts +13 -0
  95. package/dist/cjs/utils/array.js +25 -0
  96. package/dist/cjs/utils/cloneObject.d.ts +30 -0
  97. package/dist/cjs/utils/cloneObject.js +225 -0
  98. package/dist/cjs/utils/index.d.ts +3 -0
  99. package/dist/cjs/utils/index.js +9 -0
  100. package/dist/cjs/utils/throttle.d.ts +12 -0
  101. package/dist/cjs/utils/throttle.js +39 -0
  102. package/dist/cjs/utils/types.d.ts +12 -0
  103. package/dist/cjs/utils/types.js +2 -0
  104. package/dist/data-handling/DataService.d.ts +672 -0
  105. package/dist/data-handling/DataService.js +1357 -0
  106. package/dist/data-handling/DivergenceComparator.d.ts +7 -0
  107. package/dist/data-handling/DivergenceComparator.js +16 -0
  108. package/dist/data-handling/constants.d.ts +44 -0
  109. package/dist/data-handling/constants.js +40 -0
  110. package/dist/data-handling/index.d.ts +3 -0
  111. package/dist/data-handling/index.js +4 -0
  112. package/dist/data-handling/types.d.ts +104 -0
  113. package/dist/data-handling/types.js +1 -0
  114. package/dist/data-handling/utils/createPivotTreeNode.d.ts +13 -0
  115. package/dist/data-handling/utils/createPivotTreeNode.js +17 -0
  116. package/dist/data-handling/utils/index.d.ts +4 -0
  117. package/dist/data-handling/utils/index.js +4 -0
  118. package/dist/data-handling/utils/jaqlProcessor.d.ts +122 -0
  119. package/dist/data-handling/utils/jaqlProcessor.js +621 -0
  120. package/dist/data-handling/utils/pivotTransforms.d.ts +74 -0
  121. package/dist/data-handling/utils/pivotTransforms.js +335 -0
  122. package/dist/data-handling/utils/plugins/PluginService.d.ts +135 -0
  123. package/dist/data-handling/utils/plugins/PluginService.js +379 -0
  124. package/dist/data-handling/utils/plugins/getters.d.ts +23 -0
  125. package/dist/data-handling/utils/plugins/getters.js +65 -0
  126. package/dist/data-handling/utils/plugins/types.d.ts +75 -0
  127. package/dist/data-handling/utils/plugins/types.js +1 -0
  128. package/dist/data-handling/utils/plugins/validator.d.ts +13 -0
  129. package/dist/data-handling/utils/plugins/validator.js +165 -0
  130. package/dist/data-load/AbstractDataLoadService.d.ts +256 -0
  131. package/dist/data-load/AbstractDataLoadService.js +466 -0
  132. package/dist/data-load/DataLoadService.d.ts +63 -0
  133. package/dist/data-load/DataLoadService.js +148 -0
  134. package/dist/data-load/SisenseDataLoadService.d.ts +44 -0
  135. package/dist/data-load/SisenseDataLoadService.js +83 -0
  136. package/dist/data-load/TestDataLoadService.d.ts +27 -0
  137. package/dist/data-load/TestDataLoadService.js +69 -0
  138. package/dist/data-load/constants.d.ts +13 -0
  139. package/dist/data-load/constants.js +25 -0
  140. package/dist/data-load/index.d.ts +6 -0
  141. package/dist/data-load/index.js +6 -0
  142. package/dist/data-load/sockets/SisenseSocket.d.ts +81 -0
  143. package/dist/data-load/sockets/SisenseSocket.js +155 -0
  144. package/dist/data-load/sockets/TestSocket.d.ts +61 -0
  145. package/dist/data-load/sockets/TestSocket.js +83 -0
  146. package/dist/data-load/sockets/helpers.d.ts +4 -0
  147. package/dist/data-load/sockets/helpers.js +23 -0
  148. package/dist/data-load/sockets/index.d.ts +2 -0
  149. package/dist/data-load/sockets/index.js +3 -0
  150. package/dist/data-load/types.d.ts +90 -0
  151. package/dist/data-load/types.js +1 -0
  152. package/dist/errors/LoadingCanceledError.d.ts +7 -0
  153. package/dist/errors/LoadingCanceledError.js +20 -0
  154. package/dist/errors/index.d.ts +1 -0
  155. package/dist/errors/index.js +2 -0
  156. package/dist/index.d.ts +17 -0
  157. package/dist/index.js +9 -0
  158. package/dist/pivot-query-client.d.ts +13 -0
  159. package/dist/pivot-query-client.js +22 -0
  160. package/dist/tree-structure/AbstractTreeService.d.ts +308 -0
  161. package/dist/tree-structure/AbstractTreeService.js +712 -0
  162. package/dist/tree-structure/HeaderTreeService.d.ts +180 -0
  163. package/dist/tree-structure/HeaderTreeService.js +276 -0
  164. package/dist/tree-structure/TreeCellMap.d.ts +104 -0
  165. package/dist/tree-structure/TreeCellMap.js +141 -0
  166. package/dist/tree-structure/TreeService.d.ts +8 -0
  167. package/dist/tree-structure/TreeService.js +8 -0
  168. package/dist/tree-structure/constants.d.ts +6 -0
  169. package/dist/tree-structure/constants.js +7 -0
  170. package/dist/tree-structure/index.d.ts +5 -0
  171. package/dist/tree-structure/index.js +4 -0
  172. package/dist/tree-structure/types.d.ts +93 -0
  173. package/dist/tree-structure/types.js +1 -0
  174. package/dist/tree-structure/utils/index.d.ts +1 -0
  175. package/dist/tree-structure/utils/index.js +1 -0
  176. package/dist/tree-structure/utils/treeNode.d.ts +147 -0
  177. package/dist/tree-structure/utils/treeNode.js +515 -0
  178. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  179. package/dist/utils/array.d.ts +13 -0
  180. package/dist/utils/array.js +21 -0
  181. package/dist/utils/cloneObject.d.ts +30 -0
  182. package/dist/utils/cloneObject.js +221 -0
  183. package/dist/utils/index.d.ts +3 -0
  184. package/dist/utils/index.js +3 -0
  185. package/dist/utils/throttle.d.ts +12 -0
  186. package/dist/utils/throttle.js +35 -0
  187. package/dist/utils/types.d.ts +12 -0
  188. package/dist/utils/types.js +1 -0
  189. package/package.json +61 -0
@@ -0,0 +1,379 @@
1
+ import { PanelType, PluginsTypesFields } from '../../constants.js';
2
+ import { getDimensionMetadata, getMeasureMetadata } from './getters.js';
3
+ import { validate } from './validator.js';
4
+ /**
5
+ * Removes not related styles from cell styles object,
6
+ * borders for example are not configured on cell level
7
+ *
8
+ * @param {object} style - removes border related styles from cell styles
9
+ * @returns {object} - clear styles
10
+ */
11
+ const clearGlobal = (style) => {
12
+ const clone = {};
13
+ Object.keys(style).forEach((key) => {
14
+ // remove specific styles from cell
15
+ if (!key.startsWith('border') || key === 'borderColor') {
16
+ // @ts-ignore
17
+ clone[key] = style[key];
18
+ }
19
+ });
20
+ return clone;
21
+ };
22
+ const DEFAULT_CONTENT_TYPE = 'text';
23
+ export class PluginService {
24
+ constructor(plugins, jaql, globalStyles) {
25
+ /**
26
+ * Handlers to apply for pivot cells
27
+ *
28
+ * @private
29
+ * */
30
+ this.plugins = [];
31
+ /**
32
+ * Cache columns metadata after handling column tree node
33
+ *
34
+ * @private
35
+ * */
36
+ this.columnsMetadata = [];
37
+ this.metadataCache = new Map();
38
+ this.plugins = plugins;
39
+ this.jaql = jaql;
40
+ this.globalStyles = globalStyles;
41
+ this.indexHelper = {
42
+ measuresLevel: this.getMeasuresLevel(),
43
+ columnStartFrom: 0,
44
+ rowStartFrom: 0,
45
+ };
46
+ if (this.globalStyles) {
47
+ this.globalStyles = clearGlobal(this.globalStyles);
48
+ }
49
+ }
50
+ /**
51
+ * Get array of panels by type
52
+ *
53
+ * @param {ListOfPanelTypes} jaqlPanel - type of panels to return measures|columns|rows
54
+ * @returns {Array<any>} row level of measures in column tree
55
+ */
56
+ getJaqlPanels(jaqlPanel) {
57
+ if (!this.jaql) {
58
+ throw new Error('No Jaql in Plugin service!');
59
+ }
60
+ return this.jaql.metadata.filter((el) => el.panel === jaqlPanel);
61
+ }
62
+ /**
63
+ * Calculate level of measures in column tree
64
+ *
65
+ * @returns {number} row level of measures in column tree
66
+ */
67
+ getMeasuresLevel() {
68
+ const columnPanels = this.getJaqlPanels(PanelType.COLUMNS);
69
+ const measurePanels = this.getJaqlPanels(PanelType.MEASURES);
70
+ return measurePanels.length > 1 ? columnPanels.length : 0;
71
+ }
72
+ /**
73
+ * Get count of row panels
74
+ *
75
+ * @returns {void}
76
+ */
77
+ getRowsColumnLength() {
78
+ const rowsPanels = this.getJaqlPanels(PanelType.ROWS);
79
+ return rowsPanels.length;
80
+ }
81
+ /**
82
+ * Get count of row panels
83
+ *
84
+ * @param {Array<string>} types - array of types from current cell
85
+ * @returns {void}
86
+ */
87
+ // eslint-disable-next-line class-methods-use-this
88
+ getTotalTypes(types) {
89
+ const totalTypes = types.filter((el) => el === PluginsTypesFields.SUB_TOTAL || el === PluginsTypesFields.GRAND_TOTAL);
90
+ // make array of unique types
91
+ if (totalTypes && totalTypes.length) {
92
+ return totalTypes.filter((value, index, self) => self.indexOf(value) === index);
93
+ }
94
+ return [];
95
+ }
96
+ /**
97
+ * Calculate measure index and get panel metadata
98
+ *
99
+ * @param {number} index - measure index in row
100
+ * @returns {MeasureMetadata} measure metadata
101
+ */
102
+ getMeasureMetaByIndex(index) {
103
+ const measurePanels = this.getJaqlPanels(PanelType.MEASURES);
104
+ if (measurePanels.length === 1) {
105
+ return getMeasureMetadata(measurePanels[0]);
106
+ }
107
+ const measureIndex = index % measurePanels.length;
108
+ return getMeasureMetadata(measurePanels[measureIndex]);
109
+ }
110
+ resetRowStartFrom() {
111
+ this.indexHelper.rowStartFrom = 1;
112
+ }
113
+ applyToColumns(columnTreeChildren) {
114
+ if (columnTreeChildren.length === 0) {
115
+ return;
116
+ }
117
+ if (this.indexHelper.columnStartFrom === 0) {
118
+ this.indexHelper.columnStartFrom = this.getRowsColumnLength();
119
+ }
120
+ this._applyToColumns(columnTreeChildren, { row: -1 });
121
+ }
122
+ /**
123
+ * Apply plugins to columns values and cache metadata for measure handler
124
+ *
125
+ * @param {Array<any>} columnTreeChildren - measure index in row
126
+ * @param {object} indexes - measure index in row
127
+ * @returns {void}
128
+ */
129
+ _applyToColumns(columnTreeChildren, indexes) {
130
+ columnTreeChildren.forEach((item, index) => {
131
+ const { dimensionsMeta, type } = getDimensionMetadata(item, this.jaql);
132
+ type.push(PluginsTypesFields.MEMBER);
133
+ let rowIndex = indexes.row >= 0 ? indexes.row + 1 : 0;
134
+ if (rowIndex >= this.indexHelper.rowStartFrom) {
135
+ this.indexHelper.rowStartFrom = rowIndex + 1;
136
+ }
137
+ if (item.metadataType === PanelType.MEASURES) {
138
+ rowIndex = this.indexHelper.measuresLevel;
139
+ }
140
+ let colIndex = index === 0 ? 0 : 1;
141
+ colIndex += this.indexHelper.columnStartFrom;
142
+ const metadata = {
143
+ type,
144
+ rowIndex,
145
+ colIndex,
146
+ index: item.jaqlIndex,
147
+ columns: dimensionsMeta,
148
+ };
149
+ if (item.metadataType === PanelType.MEASURES) {
150
+ metadata.measure = this.getMeasureMetaByIndex(item.index || 0);
151
+ }
152
+ const cellItem = {
153
+ value: item.value || '',
154
+ content: item.content || '',
155
+ contentType: item.contentType || DEFAULT_CONTENT_TYPE,
156
+ style: item.style || {},
157
+ store: item.store || {},
158
+ state: item.state,
159
+ };
160
+ this.applyGlobal(cellItem);
161
+ this.apply(metadata, cellItem);
162
+ this.addToMetadata(metadata, cellItem, metadata.rowIndex, metadata.colIndex);
163
+ Object.assign(item, cellItem);
164
+ this.indexHelper.columnStartFrom = colIndex;
165
+ if (item.children) {
166
+ const parentIndex = {
167
+ row: rowIndex,
168
+ column: colIndex,
169
+ };
170
+ this._applyToColumns(item.children, parentIndex);
171
+ }
172
+ else {
173
+ this.columnsMetadata.push({ type, metadata: dimensionsMeta });
174
+ }
175
+ return true;
176
+ });
177
+ }
178
+ /**
179
+ * Apply plugins to corner tree headers
180
+ *
181
+ * @param {any} cornerTree - measure index in row
182
+ * @returns {void}
183
+ */
184
+ applyToHeaders(cornerTree) {
185
+ if (!cornerTree || !cornerTree.children || cornerTree.children.length === 0) {
186
+ return;
187
+ }
188
+ cornerTree.children.forEach((item) => {
189
+ const { dimensionsMeta } = getDimensionMetadata(item, this.jaql);
190
+ const metadata = {
191
+ type: [PluginsTypesFields.MEMBER],
192
+ rowIndex: 0,
193
+ colIndex: item.index || 0,
194
+ index: item.jaqlIndex,
195
+ rows: dimensionsMeta,
196
+ };
197
+ const cellItem = {
198
+ value: item.value,
199
+ content: item.content || '',
200
+ contentType: item.contentType || DEFAULT_CONTENT_TYPE,
201
+ style: item.style ? item.style : {},
202
+ store: item.store || {},
203
+ // eslint-disable-next-line max-lines
204
+ state: item.state,
205
+ };
206
+ this.applyGlobal(cellItem);
207
+ this.apply(metadata, cellItem);
208
+ this.addToMetadata(metadata, cellItem, metadata.rowIndex, metadata.colIndex);
209
+ Object.assign(item, cellItem);
210
+ });
211
+ }
212
+ applyToRows(rowTreeChildren) {
213
+ if (rowTreeChildren.length === 0) {
214
+ return;
215
+ }
216
+ const rows = this.getJaqlPanels(PanelType.ROWS);
217
+ const measures = this.getJaqlPanels(PanelType.MEASURES);
218
+ const columns = this.getJaqlPanels(PanelType.COLUMNS);
219
+ this.indexHelper.rowStartFrom = PluginService.getRowStartFromForPage(rows.length, measures.length, columns.length);
220
+ this._applyToRows(rowTreeChildren);
221
+ }
222
+ static getRowStartFromForPage(numberOfRows, numberOfMeasures, numberOfColumns) {
223
+ if (numberOfRows === 0 && numberOfColumns === 0) {
224
+ return 0;
225
+ }
226
+ const result = numberOfColumns + (numberOfMeasures === 0 ? 0 : 1);
227
+ if (result === 0) {
228
+ return 1;
229
+ }
230
+ return result;
231
+ }
232
+ /**
233
+ * Apply plugins to rows panels
234
+ *
235
+ * @param {Array<PivotTreeNode>} rowTreeChildren - measure index in row
236
+ * @returns {void}
237
+ */
238
+ _applyToRows(rowTreeChildren) {
239
+ rowTreeChildren.forEach((item, index) => {
240
+ const { dimensionsMeta, type } = getDimensionMetadata(item, this.jaql);
241
+ type.push(PluginsTypesFields.MEMBER);
242
+ const colIndex = item.level ? item.level : 0;
243
+ const rowIndex = index === 0 ? this.indexHelper.rowStartFrom : this.indexHelper.rowStartFrom + 1;
244
+ const metadata = {
245
+ type,
246
+ rowIndex,
247
+ colIndex,
248
+ index: item.jaqlIndex,
249
+ rows: dimensionsMeta,
250
+ };
251
+ const cellItem = {
252
+ value: item.value,
253
+ content: item.content || '',
254
+ contentType: item.contentType || DEFAULT_CONTENT_TYPE,
255
+ style: item.style || {},
256
+ store: item.store || {},
257
+ state: item.state,
258
+ };
259
+ this.applyGlobal(cellItem);
260
+ this.apply(metadata, cellItem);
261
+ this.addToMetadata(metadata, cellItem, metadata.rowIndex, metadata.colIndex);
262
+ this.indexHelper.rowStartFrom = rowIndex;
263
+ if (item.children) {
264
+ this._applyToRows(item.children);
265
+ }
266
+ else if (item.data && item.data.length) {
267
+ this.applyToValues(item.data, { type, metadata: dimensionsMeta }, { rowIndex, colIndex: this.getRowsColumnLength() });
268
+ }
269
+ Object.assign(item, cellItem);
270
+ return true;
271
+ });
272
+ }
273
+ /**
274
+ * Apply plugins to value panels
275
+ *
276
+ * @param {Array<any>} values - measure index in row
277
+ * @param {object} rowData - row data
278
+ * @param {Array<string>} rowData.type - row types
279
+ * @param {Array<DimensionMetadata>} rowData.metadata - metadata of current row
280
+ * @param {object} indexes - parent indexes in tree
281
+ * @param {number} indexes.rowIndex - current row index
282
+ * @param {number} indexes.colIndex - colIndex of last row cell to calculate value cell index
283
+ * @returns {void}
284
+ */
285
+ // eslint-disable-next-line sonarjs/cognitive-complexity
286
+ applyToValues(values, rowData, indexes) {
287
+ if (!values.length) {
288
+ return;
289
+ }
290
+ values.forEach((item, index) => {
291
+ const type = [PluginsTypesFields.VALUE];
292
+ const colData = this.columnsMetadata[index];
293
+ if (!colData) {
294
+ return;
295
+ }
296
+ const totalTypes = this.getTotalTypes([...rowData.type, ...colData.type]);
297
+ const measureMetadata = this.getMeasureMetaByIndex(index);
298
+ const metadata = {
299
+ type: type.concat(totalTypes),
300
+ rows: rowData.metadata,
301
+ columns: colData.metadata,
302
+ measure: measureMetadata,
303
+ colIndex: index + indexes.colIndex,
304
+ rowIndex: indexes.rowIndex,
305
+ index: measureMetadata && measureMetadata.index ? measureMetadata.index : 0,
306
+ };
307
+ let cellItem = {
308
+ value: item,
309
+ content: item,
310
+ contentType: DEFAULT_CONTENT_TYPE,
311
+ style: {},
312
+ store: (item && item.store) || {},
313
+ state: (item && item.state) || undefined,
314
+ };
315
+ if (item !== null && item !== undefined && typeof item === 'object') {
316
+ cellItem = {
317
+ value: item.value ? item.value : null,
318
+ content: item.content || '',
319
+ contentType: item.contentType || DEFAULT_CONTENT_TYPE,
320
+ style: item.style || {},
321
+ store: item.store || {},
322
+ state: item.state,
323
+ };
324
+ }
325
+ this.applyGlobal(cellItem);
326
+ this.apply(metadata, cellItem);
327
+ this.addToMetadata(metadata, cellItem, metadata.rowIndex, metadata.colIndex);
328
+ values[index] = cellItem;
329
+ });
330
+ }
331
+ /**
332
+ * Add cell metadata to map for click/hover APIs
333
+ *
334
+ * @param {Metadata} metadata - cell metadata
335
+ * @param {CellItem} cellItem - cell content
336
+ * @param {number} rowIndex - cell row index
337
+ * @param {number} colIndex - cell column index
338
+ * @returns {void}
339
+ */
340
+ addToMetadata(metadata, cellItem, rowIndex, colIndex) {
341
+ const cacheMeta = Object.assign({ cellData: {
342
+ value: cellItem.value,
343
+ content: cellItem.content,
344
+ } }, metadata);
345
+ this.metadataCache.set(`${rowIndex}-${colIndex}`, cacheMeta);
346
+ }
347
+ /**
348
+ * Apply global config to cells
349
+ *
350
+ * @param {CellItem} item - cell item to update by plugin
351
+ * @returns {void}
352
+ */
353
+ applyGlobal(item) {
354
+ const { globalStyles } = this;
355
+ if (!globalStyles) {
356
+ return;
357
+ }
358
+ item.style = Object.assign(Object.assign({}, item.style), globalStyles);
359
+ }
360
+ /**
361
+ * Apply plugins to rows panels
362
+ *
363
+ * @param {Metadata} metadata - cell metadata
364
+ * @param {CellItem} item - cell item to update by plugin
365
+ * @returns {void}
366
+ */
367
+ apply(metadata, item) {
368
+ if (this.plugins && this.plugins.length) {
369
+ this.plugins.forEach((plugin) => {
370
+ const valid = validate(plugin.target, metadata);
371
+ if (valid) {
372
+ const pluginHandler = plugin.handler;
373
+ pluginHandler(metadata, item);
374
+ }
375
+ });
376
+ }
377
+ }
378
+ }
379
+ export default PluginService;
@@ -0,0 +1,23 @@
1
+ import { JaqlPanel, JaqlRequest } from '../../../data-load/types.js';
2
+ import { PivotTreeNode } from '../../types.js';
3
+ import { MeasureMetadata } from './types.js';
4
+ /**
5
+ * Collect and return rows or columns group metadata
6
+ *
7
+ * @param {PivotTreeNode} dimensionItem - PivotTreeNode item
8
+ * @param {JaqlRequest} jaql - jaql with metadata
9
+ * @param {Array} dimensionsMeta - array of child dimensions for group
10
+ * @param {Array} type - array of cell types
11
+ * @returns {{ dimensionsMeta: Array<any>, type: Array<string> }} of dimensions metadata
12
+ */
13
+ export declare const getDimensionMetadata: (dimensionItem: PivotTreeNode, jaql?: JaqlRequest, dimensionsMeta?: Array<any>, type?: Array<string>) => {
14
+ dimensionsMeta: Array<any>;
15
+ type: Array<string>;
16
+ };
17
+ /**
18
+ * Copy and clean info about measure
19
+ *
20
+ * @param {JaqlPanel} measurePanel - current measure item
21
+ * @returns {MeasureMetadata} measure metadata
22
+ */
23
+ export declare const getMeasureMetadata: (measurePanel?: JaqlPanel) => MeasureMetadata;
@@ -0,0 +1,65 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { PanelType, UserType } from '../../constants.js';
13
+ const getJaqlItemByIndex = (jaql, index) => jaql.metadata.find((el) => el.field && el.field.index === index);
14
+ /**
15
+ * Collect and return rows or columns group metadata
16
+ *
17
+ * @param {PivotTreeNode} dimensionItem - PivotTreeNode item
18
+ * @param {JaqlRequest} jaql - jaql with metadata
19
+ * @param {Array} dimensionsMeta - array of child dimensions for group
20
+ * @param {Array} type - array of cell types
21
+ * @returns {{ dimensionsMeta: Array<any>, type: Array<string> }} of dimensions metadata
22
+ */
23
+ export const getDimensionMetadata = (dimensionItem, jaql, dimensionsMeta = [], type = []) => {
24
+ if (!jaql || !dimensionItem || typeof dimensionItem.jaqlIndex === 'undefined') {
25
+ return { dimensionsMeta, type };
26
+ }
27
+ const dimension = getJaqlItemByIndex(jaql, dimensionItem.jaqlIndex);
28
+ if (dimension && dimension.jaql && dimensionItem.metadataType !== PanelType.MEASURES) {
29
+ dimensionsMeta.unshift({
30
+ title: dimension.jaql.title,
31
+ name: dimension.jaql.dim,
32
+ member: dimensionItem.value,
33
+ index: dimensionItem.jaqlIndex,
34
+ });
35
+ }
36
+ if (dimensionItem &&
37
+ dimensionItem.userType &&
38
+ (dimensionItem.userType === UserType.SUB_TOTAL ||
39
+ dimensionItem.userType === UserType.GRAND_TOTAL)) {
40
+ const itemType = dimensionItem.userType.toLowerCase();
41
+ type.push(itemType);
42
+ }
43
+ if (dimensionItem.parent && dimensionItem.parent.metadataType !== PanelType.MEASURES) {
44
+ return getDimensionMetadata(dimensionItem.parent, jaql, dimensionsMeta, type);
45
+ }
46
+ return { dimensionsMeta, type };
47
+ };
48
+ /**
49
+ * Copy and clean info about measure
50
+ *
51
+ * @param {JaqlPanel} measurePanel - current measure item
52
+ * @returns {MeasureMetadata} measure metadata
53
+ */
54
+ export const getMeasureMetadata = (measurePanel) => {
55
+ let measureMetadata = {};
56
+ if (measurePanel) {
57
+ // eslint-disable-next-line no-unused-vars
58
+ const _a = measurePanel.jaql, { type, datatype, table, column } = _a, panelCopy = __rest(_a, ["type", "datatype", "table", "column"]);
59
+ measureMetadata = panelCopy;
60
+ if (measurePanel.field) {
61
+ measureMetadata.index = measurePanel.field.index;
62
+ }
63
+ }
64
+ return measureMetadata;
65
+ };
@@ -0,0 +1,75 @@
1
+ import { Defer, InputStyles, Styles } from '../../../utils/types.js';
2
+ export declare type DimensionTarget = {
3
+ index?: Array<number | any>;
4
+ dim?: string;
5
+ name?: string;
6
+ member?: Array<string | any>;
7
+ members?: Array<string | any>;
8
+ title?: Array<string | any>;
9
+ };
10
+ export declare type ValueTarget = {
11
+ index?: Array<number | any>;
12
+ dim?: string;
13
+ name?: string;
14
+ agg?: string;
15
+ title?: Array<string | any>;
16
+ };
17
+ export declare type Target = {
18
+ type?: Array<string>;
19
+ rows?: Array<DimensionTarget>;
20
+ columns?: Array<DimensionTarget>;
21
+ values?: Array<ValueTarget>;
22
+ index?: Array<number>;
23
+ };
24
+ export declare type DimensionMetadata = {
25
+ title: string;
26
+ name: string;
27
+ member: string;
28
+ index: number;
29
+ };
30
+ export declare type MeasureMetadata = {
31
+ title?: string;
32
+ dim?: string;
33
+ agg?: string;
34
+ formula?: string;
35
+ context?: string;
36
+ index?: number;
37
+ };
38
+ export declare type Metadata = {
39
+ type: Array<string>;
40
+ rows?: Array<DimensionMetadata>;
41
+ columns?: Array<DimensionMetadata>;
42
+ measure?: MeasureMetadata;
43
+ index?: number;
44
+ colIndex: number;
45
+ rowIndex: number;
46
+ cellData?: {
47
+ value: any;
48
+ content: any;
49
+ };
50
+ };
51
+ export declare type DimensionOptions = {
52
+ fields: Array<string>;
53
+ };
54
+ export declare type MeasureOptions = {
55
+ fields: Array<string>;
56
+ };
57
+ export declare type CellItem = {
58
+ value: string | undefined;
59
+ content: string;
60
+ contentType: string;
61
+ style: InputStyles | undefined;
62
+ store?: {
63
+ domReadyDefer?: Defer;
64
+ [key: string]: any;
65
+ };
66
+ state?: {
67
+ isSelected?: boolean;
68
+ isDrilled?: boolean;
69
+ };
70
+ };
71
+ export declare type GlobalStyles = Styles;
72
+ export declare type PluginConfig = {
73
+ target: Target;
74
+ handler: (metadata: Metadata, cellItem: CellItem) => void;
75
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { Metadata, Target } from './types.js';
2
+ /**
3
+ * Collect and return rows or columns group metadata
4
+ *
5
+ * @param {Target} target - target rows
6
+ * @param {Metadata} metadata - array of rows in metadata
7
+ * @returns {boolean} validation result
8
+ */
9
+ export declare const validate: (target: Target, metadata: Metadata) => boolean;
10
+ declare const _default: {
11
+ validate: (target: Target, metadata: Metadata) => boolean;
12
+ };
13
+ export default _default;