@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.
- package/LICENSE.md +35 -0
- package/README.md +2 -0
- package/dist/__test-helpers__/testUtils.d.ts +30 -0
- package/dist/__test-helpers__/testUtils.js +89 -0
- package/dist/builders/index.d.ts +2 -0
- package/dist/builders/index.js +2 -0
- package/dist/builders/pivot-data-builder.d.ts +34 -0
- package/dist/builders/pivot-data-builder.js +182 -0
- package/dist/builders/socket-builder.d.ts +18 -0
- package/dist/builders/socket-builder.js +72 -0
- package/dist/cjs/__test-helpers__/testUtils.d.ts +30 -0
- package/dist/cjs/__test-helpers__/testUtils.js +104 -0
- package/dist/cjs/builders/index.d.ts +2 -0
- package/dist/cjs/builders/index.js +7 -0
- package/dist/cjs/builders/pivot-data-builder.d.ts +34 -0
- package/dist/cjs/builders/pivot-data-builder.js +186 -0
- package/dist/cjs/builders/socket-builder.d.ts +18 -0
- package/dist/cjs/builders/socket-builder.js +79 -0
- package/dist/cjs/data-handling/DataService.d.ts +672 -0
- package/dist/cjs/data-handling/DataService.js +1364 -0
- package/dist/cjs/data-handling/DivergenceComparator.d.ts +7 -0
- package/dist/cjs/data-handling/DivergenceComparator.js +20 -0
- package/dist/cjs/data-handling/constants.d.ts +44 -0
- package/dist/cjs/data-handling/constants.js +43 -0
- package/dist/cjs/data-handling/index.d.ts +3 -0
- package/dist/cjs/data-handling/index.js +23 -0
- package/dist/cjs/data-handling/types.d.ts +104 -0
- package/dist/cjs/data-handling/types.js +2 -0
- package/dist/cjs/data-handling/utils/createPivotTreeNode.d.ts +13 -0
- package/dist/cjs/data-handling/utils/createPivotTreeNode.js +21 -0
- package/dist/cjs/data-handling/utils/index.d.ts +4 -0
- package/dist/cjs/data-handling/utils/index.js +14 -0
- package/dist/cjs/data-handling/utils/jaqlProcessor.d.ts +122 -0
- package/dist/cjs/data-handling/utils/jaqlProcessor.js +661 -0
- package/dist/cjs/data-handling/utils/pivotTransforms.d.ts +74 -0
- package/dist/cjs/data-handling/utils/pivotTransforms.js +373 -0
- package/dist/cjs/data-handling/utils/plugins/PluginService.d.ts +135 -0
- package/dist/cjs/data-handling/utils/plugins/PluginService.js +383 -0
- package/dist/cjs/data-handling/utils/plugins/getters.d.ts +23 -0
- package/dist/cjs/data-handling/utils/plugins/getters.js +70 -0
- package/dist/cjs/data-handling/utils/plugins/types.d.ts +75 -0
- package/dist/cjs/data-handling/utils/plugins/types.js +2 -0
- package/dist/cjs/data-handling/utils/plugins/validator.d.ts +13 -0
- package/dist/cjs/data-handling/utils/plugins/validator.js +169 -0
- package/dist/cjs/data-load/AbstractDataLoadService.d.ts +256 -0
- package/dist/cjs/data-load/AbstractDataLoadService.js +473 -0
- package/dist/cjs/data-load/DataLoadService.d.ts +63 -0
- package/dist/cjs/data-load/DataLoadService.js +152 -0
- package/dist/cjs/data-load/SisenseDataLoadService.d.ts +44 -0
- package/dist/cjs/data-load/SisenseDataLoadService.js +87 -0
- package/dist/cjs/data-load/TestDataLoadService.d.ts +27 -0
- package/dist/cjs/data-load/TestDataLoadService.js +76 -0
- package/dist/cjs/data-load/constants.d.ts +13 -0
- package/dist/cjs/data-load/constants.js +28 -0
- package/dist/cjs/data-load/index.d.ts +6 -0
- package/dist/cjs/data-load/index.js +14 -0
- package/dist/cjs/data-load/sockets/SisenseSocket.d.ts +81 -0
- package/dist/cjs/data-load/sockets/SisenseSocket.js +162 -0
- package/dist/cjs/data-load/sockets/TestSocket.d.ts +61 -0
- package/dist/cjs/data-load/sockets/TestSocket.js +90 -0
- package/dist/cjs/data-load/sockets/helpers.d.ts +4 -0
- package/dist/cjs/data-load/sockets/helpers.js +27 -0
- package/dist/cjs/data-load/sockets/index.d.ts +2 -0
- package/dist/cjs/data-load/sockets/index.js +8 -0
- package/dist/cjs/data-load/types.d.ts +90 -0
- package/dist/cjs/data-load/types.js +2 -0
- package/dist/cjs/errors/LoadingCanceledError.d.ts +7 -0
- package/dist/cjs/errors/LoadingCanceledError.js +24 -0
- package/dist/cjs/errors/index.d.ts +1 -0
- package/dist/cjs/errors/index.js +6 -0
- package/dist/cjs/index.d.ts +17 -0
- package/dist/cjs/index.js +32 -0
- package/dist/cjs/package.json +12 -0
- package/dist/cjs/pivot-query-client.d.ts +13 -0
- package/dist/cjs/pivot-query-client.js +26 -0
- package/dist/cjs/tree-structure/AbstractTreeService.d.ts +308 -0
- package/dist/cjs/tree-structure/AbstractTreeService.js +716 -0
- package/dist/cjs/tree-structure/HeaderTreeService.d.ts +180 -0
- package/dist/cjs/tree-structure/HeaderTreeService.js +280 -0
- package/dist/cjs/tree-structure/TreeCellMap.d.ts +104 -0
- package/dist/cjs/tree-structure/TreeCellMap.js +145 -0
- package/dist/cjs/tree-structure/TreeService.d.ts +8 -0
- package/dist/cjs/tree-structure/TreeService.js +12 -0
- package/dist/cjs/tree-structure/constants.d.ts +6 -0
- package/dist/cjs/tree-structure/constants.js +10 -0
- package/dist/cjs/tree-structure/index.d.ts +5 -0
- package/dist/cjs/tree-structure/index.js +10 -0
- package/dist/cjs/tree-structure/types.d.ts +93 -0
- package/dist/cjs/tree-structure/types.js +2 -0
- package/dist/cjs/tree-structure/utils/index.d.ts +1 -0
- package/dist/cjs/tree-structure/utils/index.js +9 -0
- package/dist/cjs/tree-structure/utils/treeNode.d.ts +147 -0
- package/dist/cjs/tree-structure/utils/treeNode.js +534 -0
- package/dist/cjs/utils/array.d.ts +13 -0
- package/dist/cjs/utils/array.js +25 -0
- package/dist/cjs/utils/cloneObject.d.ts +30 -0
- package/dist/cjs/utils/cloneObject.js +225 -0
- package/dist/cjs/utils/index.d.ts +3 -0
- package/dist/cjs/utils/index.js +9 -0
- package/dist/cjs/utils/throttle.d.ts +12 -0
- package/dist/cjs/utils/throttle.js +39 -0
- package/dist/cjs/utils/types.d.ts +12 -0
- package/dist/cjs/utils/types.js +2 -0
- package/dist/data-handling/DataService.d.ts +672 -0
- package/dist/data-handling/DataService.js +1357 -0
- package/dist/data-handling/DivergenceComparator.d.ts +7 -0
- package/dist/data-handling/DivergenceComparator.js +16 -0
- package/dist/data-handling/constants.d.ts +44 -0
- package/dist/data-handling/constants.js +40 -0
- package/dist/data-handling/index.d.ts +3 -0
- package/dist/data-handling/index.js +4 -0
- package/dist/data-handling/types.d.ts +104 -0
- package/dist/data-handling/types.js +1 -0
- package/dist/data-handling/utils/createPivotTreeNode.d.ts +13 -0
- package/dist/data-handling/utils/createPivotTreeNode.js +17 -0
- package/dist/data-handling/utils/index.d.ts +4 -0
- package/dist/data-handling/utils/index.js +4 -0
- package/dist/data-handling/utils/jaqlProcessor.d.ts +122 -0
- package/dist/data-handling/utils/jaqlProcessor.js +621 -0
- package/dist/data-handling/utils/pivotTransforms.d.ts +74 -0
- package/dist/data-handling/utils/pivotTransforms.js +335 -0
- package/dist/data-handling/utils/plugins/PluginService.d.ts +135 -0
- package/dist/data-handling/utils/plugins/PluginService.js +379 -0
- package/dist/data-handling/utils/plugins/getters.d.ts +23 -0
- package/dist/data-handling/utils/plugins/getters.js +65 -0
- package/dist/data-handling/utils/plugins/types.d.ts +75 -0
- package/dist/data-handling/utils/plugins/types.js +1 -0
- package/dist/data-handling/utils/plugins/validator.d.ts +13 -0
- package/dist/data-handling/utils/plugins/validator.js +165 -0
- package/dist/data-load/AbstractDataLoadService.d.ts +256 -0
- package/dist/data-load/AbstractDataLoadService.js +466 -0
- package/dist/data-load/DataLoadService.d.ts +63 -0
- package/dist/data-load/DataLoadService.js +148 -0
- package/dist/data-load/SisenseDataLoadService.d.ts +44 -0
- package/dist/data-load/SisenseDataLoadService.js +83 -0
- package/dist/data-load/TestDataLoadService.d.ts +27 -0
- package/dist/data-load/TestDataLoadService.js +69 -0
- package/dist/data-load/constants.d.ts +13 -0
- package/dist/data-load/constants.js +25 -0
- package/dist/data-load/index.d.ts +6 -0
- package/dist/data-load/index.js +6 -0
- package/dist/data-load/sockets/SisenseSocket.d.ts +81 -0
- package/dist/data-load/sockets/SisenseSocket.js +155 -0
- package/dist/data-load/sockets/TestSocket.d.ts +61 -0
- package/dist/data-load/sockets/TestSocket.js +83 -0
- package/dist/data-load/sockets/helpers.d.ts +4 -0
- package/dist/data-load/sockets/helpers.js +23 -0
- package/dist/data-load/sockets/index.d.ts +2 -0
- package/dist/data-load/sockets/index.js +3 -0
- package/dist/data-load/types.d.ts +90 -0
- package/dist/data-load/types.js +1 -0
- package/dist/errors/LoadingCanceledError.d.ts +7 -0
- package/dist/errors/LoadingCanceledError.js +20 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.js +2 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +9 -0
- package/dist/pivot-query-client.d.ts +13 -0
- package/dist/pivot-query-client.js +22 -0
- package/dist/tree-structure/AbstractTreeService.d.ts +308 -0
- package/dist/tree-structure/AbstractTreeService.js +712 -0
- package/dist/tree-structure/HeaderTreeService.d.ts +180 -0
- package/dist/tree-structure/HeaderTreeService.js +276 -0
- package/dist/tree-structure/TreeCellMap.d.ts +104 -0
- package/dist/tree-structure/TreeCellMap.js +141 -0
- package/dist/tree-structure/TreeService.d.ts +8 -0
- package/dist/tree-structure/TreeService.js +8 -0
- package/dist/tree-structure/constants.d.ts +6 -0
- package/dist/tree-structure/constants.js +7 -0
- package/dist/tree-structure/index.d.ts +5 -0
- package/dist/tree-structure/index.js +4 -0
- package/dist/tree-structure/types.d.ts +93 -0
- package/dist/tree-structure/types.js +1 -0
- package/dist/tree-structure/utils/index.d.ts +1 -0
- package/dist/tree-structure/utils/index.js +1 -0
- package/dist/tree-structure/utils/treeNode.d.ts +147 -0
- package/dist/tree-structure/utils/treeNode.js +515 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/utils/array.d.ts +13 -0
- package/dist/utils/array.js +21 -0
- package/dist/utils/cloneObject.d.ts +30 -0
- package/dist/utils/cloneObject.js +221 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/throttle.d.ts +12 -0
- package/dist/utils/throttle.js +35 -0
- package/dist/utils/types.d.ts +12 -0
- package/dist/utils/types.js +1 -0
- 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,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;
|