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