@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,661 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.markSortedNode = exports.getResizeWidthFromJaql = exports.setResizeWidthToJaql = exports.updatePanelsSortingMetadata = exports.updateLastAppliedSortingFlag = exports.normalizeSingleBranchTreeSortDetails = exports.getMetadataTree = exports.getMetadataPanelByIndex = exports.getMetadataPanels = exports.isMeasurePathEqual = exports.getDataTypes = void 0;
|
|
30
|
+
const isEqual_js_1 = __importDefault(require("lodash-es/isEqual.js"));
|
|
31
|
+
const index_js_1 = require("../../tree-structure/utils/index.js");
|
|
32
|
+
const constants_js_1 = require("../constants.js");
|
|
33
|
+
const createPivotTreeNode_js_1 = __importDefault(require("./createPivotTreeNode.js"));
|
|
34
|
+
const jaqlProcessor = __importStar(require("./jaqlProcessor.js"));
|
|
35
|
+
function getDataTypes(panels = []) {
|
|
36
|
+
const dataTypes = {};
|
|
37
|
+
panels.forEach((panel) => {
|
|
38
|
+
const { index = Infinity } = panel.field || {};
|
|
39
|
+
const indexStr = `${index}`;
|
|
40
|
+
dataTypes[indexStr] = panel.jaql.datatype || constants_js_1.JaqlDataType.TEXT;
|
|
41
|
+
});
|
|
42
|
+
return dataTypes;
|
|
43
|
+
}
|
|
44
|
+
exports.getDataTypes = getDataTypes;
|
|
45
|
+
function defaultFormatter(value, dataType) {
|
|
46
|
+
if (value && dataType === constants_js_1.JaqlDataType.DATETIME) {
|
|
47
|
+
try {
|
|
48
|
+
return new Date(value).toISOString();
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
function normalizeMeasurePath(path) {
|
|
57
|
+
if (path === null) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
if ((0, isEqual_js_1.default)(path, {})) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
return path;
|
|
64
|
+
}
|
|
65
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
66
|
+
function isMeasurePathEqual(_measurePathA, _measurePathB, dataTypes = {}) {
|
|
67
|
+
const measurePathA = normalizeMeasurePath(_measurePathA);
|
|
68
|
+
const measurePathB = normalizeMeasurePath(_measurePathB);
|
|
69
|
+
let result = false;
|
|
70
|
+
if (typeof measurePathA === 'object' &&
|
|
71
|
+
measurePathA !== null &&
|
|
72
|
+
typeof measurePathB === 'object' &&
|
|
73
|
+
measurePathB !== null) {
|
|
74
|
+
result = true;
|
|
75
|
+
const measurePathAKeys = Object.keys(measurePathA);
|
|
76
|
+
const measurePathBKeys = Object.keys(measurePathB);
|
|
77
|
+
if (measurePathAKeys.length !== measurePathBKeys.length) {
|
|
78
|
+
result = false;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
measurePathAKeys.forEach((key) => {
|
|
82
|
+
const dataType = dataTypes[key] || '';
|
|
83
|
+
let valueA = (measurePathA || {})[key];
|
|
84
|
+
let valueB = (measurePathB || {})[key];
|
|
85
|
+
if (typeof valueA === 'undefined' || typeof valueB === 'undefined') {
|
|
86
|
+
result = false;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (dataType === constants_js_1.JaqlDataType.DATETIME) {
|
|
90
|
+
valueA = defaultFormatter(valueA, dataType);
|
|
91
|
+
valueB = defaultFormatter(valueB, dataType);
|
|
92
|
+
}
|
|
93
|
+
if (valueA !== valueB) {
|
|
94
|
+
result = false;
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
result = measurePathA === measurePathB;
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
exports.isMeasurePathEqual = isMeasurePathEqual;
|
|
105
|
+
function getCompatibleMeasurePath(measurePath, dataTypes, formatter = defaultFormatter) {
|
|
106
|
+
if (!measurePath || typeof measurePath !== 'object') {
|
|
107
|
+
return measurePath;
|
|
108
|
+
}
|
|
109
|
+
const result = {};
|
|
110
|
+
Object.keys(measurePath).forEach((key) => {
|
|
111
|
+
const dataType = dataTypes[key];
|
|
112
|
+
const value = (measurePath || {})[key];
|
|
113
|
+
const formattedValue = formatter(value, dataType);
|
|
114
|
+
result[key] = formattedValue;
|
|
115
|
+
});
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get appropriate metadata panels (rows/columns/measures) from JAQL request object
|
|
120
|
+
*
|
|
121
|
+
* @param {JaqlRequest} jaql - jaql with metadata
|
|
122
|
+
* @param {string} type - panels type to receive
|
|
123
|
+
* @returns {Array<JaqlPanel>} - list of panels
|
|
124
|
+
*/
|
|
125
|
+
const getMetadataPanels = (jaql, type) => {
|
|
126
|
+
let panels = (jaql && jaql.metadata) || [];
|
|
127
|
+
if (type) {
|
|
128
|
+
panels = panels.filter((item) => item.panel === type);
|
|
129
|
+
}
|
|
130
|
+
panels.sort((prev, next) => {
|
|
131
|
+
const defaultField = { index: Infinity };
|
|
132
|
+
const prevField = prev.field || defaultField;
|
|
133
|
+
const nextField = next.field || defaultField;
|
|
134
|
+
return prevField.index - nextField.index;
|
|
135
|
+
});
|
|
136
|
+
return panels;
|
|
137
|
+
};
|
|
138
|
+
exports.getMetadataPanels = getMetadataPanels;
|
|
139
|
+
/**
|
|
140
|
+
* Get appropriate metadata panel (rows/columns/measures) from JAQL request object by panel index
|
|
141
|
+
*
|
|
142
|
+
* @param {JaqlRequest} jaql - jaql with metadata
|
|
143
|
+
* @param {number} index - panel index
|
|
144
|
+
* @param {string} [type] - panels type to receive
|
|
145
|
+
* @returns {JaqlPanel} - jaql panels
|
|
146
|
+
*/
|
|
147
|
+
const getMetadataPanelByIndex = (jaql, index, type) => {
|
|
148
|
+
if (typeof index === 'undefined') {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
const panels = (0, exports.getMetadataPanels)(jaql, type);
|
|
152
|
+
const filteredPanels = panels.filter((panel) => {
|
|
153
|
+
const panelField = panel.field || { index: Infinity };
|
|
154
|
+
return panelField.index === index;
|
|
155
|
+
});
|
|
156
|
+
return filteredPanels[0];
|
|
157
|
+
};
|
|
158
|
+
exports.getMetadataPanelByIndex = getMetadataPanelByIndex;
|
|
159
|
+
/**
|
|
160
|
+
* sortingLastDimension jaql's sorting param processing method
|
|
161
|
+
*
|
|
162
|
+
* @param {JaqlPanel} processedPanel - panel to be identified
|
|
163
|
+
* @param {?JaqlRequest} jaql - jaql to be processed
|
|
164
|
+
* @returns {boolean} - sortingLastDimension initialization
|
|
165
|
+
*/
|
|
166
|
+
const isPanelsLastDimension = (processedPanel, jaql) => {
|
|
167
|
+
const processedPanelField = processedPanel.field || { index: Infinity };
|
|
168
|
+
if (processedPanel.panel === constants_js_1.PanelType.MEASURES) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
if (processedPanel.panel === constants_js_1.PanelType.ROWS) {
|
|
172
|
+
const panels = (0, exports.getMetadataPanels)(jaql, constants_js_1.PanelType.ROWS);
|
|
173
|
+
const lastPanel = panels[panels.length - 1] || {};
|
|
174
|
+
const lastPanelField = lastPanel.field || { index: Infinity };
|
|
175
|
+
if (panels.length && lastPanelField.index === processedPanelField.index) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
if (!panels.length) {
|
|
179
|
+
// eslint-disable-next-line no-console
|
|
180
|
+
console.error('Missing rows panel in jaql!');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return false;
|
|
184
|
+
};
|
|
185
|
+
function checkRowSortedBySubtotal(sortDetails, jaqlIndex) {
|
|
186
|
+
if (!sortDetails) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
if (typeof sortDetails.field !== 'number') {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
return sortDetails.field !== jaqlIndex;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get appropriate metadata panels (rows/columns/measures) in TreeNode structure from
|
|
196
|
+
* JAQL request object
|
|
197
|
+
*
|
|
198
|
+
* @param {JaqlRequest} jaql - jaql with metadata
|
|
199
|
+
* @param {string} [type=PanelType.ROWS] - panels type to receive
|
|
200
|
+
* @returns {PivotTreeNode} - metadata panels tree
|
|
201
|
+
*/
|
|
202
|
+
const getMetadataTree = (jaql, type = constants_js_1.PanelType.ROWS) => {
|
|
203
|
+
const panels = (0, exports.getMetadataPanels)(jaql, type);
|
|
204
|
+
const nodes = panels.map((item, index) => {
|
|
205
|
+
const node = index_js_1.treeNode.create(item.jaql.title, undefined, undefined, index);
|
|
206
|
+
const pivotNode = (0, createPivotTreeNode_js_1.default)(node, type);
|
|
207
|
+
pivotNode.jaqlIndex = item.field ? item.field.index : undefined;
|
|
208
|
+
switch (type) {
|
|
209
|
+
case constants_js_1.PanelType.ROWS: {
|
|
210
|
+
pivotNode.measurePath = undefined;
|
|
211
|
+
const isSortedBySubtotal = checkRowSortedBySubtotal(item.jaql.sortDetails, pivotNode.jaqlIndex);
|
|
212
|
+
if (item.jaql.sort && !isSortedBySubtotal) {
|
|
213
|
+
pivotNode.dir = item.jaql.sort;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
pivotNode.dir = null;
|
|
217
|
+
}
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
case constants_js_1.PanelType.MEASURES:
|
|
221
|
+
pivotNode.databars = item.format ? item.format.databars : false;
|
|
222
|
+
pivotNode.measureJaqlIndex = pivotNode.jaqlIndex;
|
|
223
|
+
if (!(0, exports.getMetadataPanels)(jaql, constants_js_1.PanelType.COLUMNS).length) {
|
|
224
|
+
pivotNode.measurePath = undefined;
|
|
225
|
+
if (item.jaql.sortDetails && item.jaql.sortDetails.measurePath === null) {
|
|
226
|
+
pivotNode.dir = item.jaql.sortDetails.dir;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
pivotNode.dir = null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
default:
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
return pivotNode;
|
|
237
|
+
});
|
|
238
|
+
return index_js_1.treeNode.wrapInRootNode(nodes);
|
|
239
|
+
};
|
|
240
|
+
exports.getMetadataTree = getMetadataTree;
|
|
241
|
+
/**
|
|
242
|
+
* method to clear sorting information in panels with
|
|
243
|
+
* sortingLastDimension === false
|
|
244
|
+
*
|
|
245
|
+
* @param {?JaqlRequest} jaql - jaql to clear
|
|
246
|
+
* @returns {void}
|
|
247
|
+
*/
|
|
248
|
+
const clearLastDimesionSortDetails = (jaql) => {
|
|
249
|
+
const metadata = jaql && jaql.metadata ? jaql.metadata : [];
|
|
250
|
+
metadata.forEach((panel) => {
|
|
251
|
+
if (panel &&
|
|
252
|
+
panel.jaql &&
|
|
253
|
+
panel.jaql.sort &&
|
|
254
|
+
panel.jaql.sortDetails &&
|
|
255
|
+
panel.jaql.sortDetails.sortingLastDimension) {
|
|
256
|
+
panel.jaql.sort = null;
|
|
257
|
+
delete panel.jaql.sortDetails;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* Clears panel sort details
|
|
263
|
+
*
|
|
264
|
+
* @param {JaqlPanel} panel - jaql panel
|
|
265
|
+
* @returns {void}
|
|
266
|
+
*/
|
|
267
|
+
const clearPanelSortDetails = (panel) => {
|
|
268
|
+
if (panel && panel.jaql) {
|
|
269
|
+
panel.jaql.sort = null;
|
|
270
|
+
delete panel.jaql.sortDetails;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* method to clear sorting all information in panels
|
|
275
|
+
*
|
|
276
|
+
* @param {?JaqlRequest} jaql - jaql to clear
|
|
277
|
+
* @returns {void}
|
|
278
|
+
*/
|
|
279
|
+
const clearAllSortDetails = (jaql) => {
|
|
280
|
+
const metadata = jaql && jaql.metadata ? jaql.metadata : [];
|
|
281
|
+
metadata.forEach((panel) => clearPanelSortDetails(panel));
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Getter for last sorted panel
|
|
285
|
+
*
|
|
286
|
+
* @param {JaqlRequest} jaql - jaql request
|
|
287
|
+
* @returns {JaqlPanel|undefined} - panel item
|
|
288
|
+
*/
|
|
289
|
+
const getLastSortedPanel = (jaql) => (jaql.metadata || []).reverse().find((item) => !!item.jaql.sortDetails);
|
|
290
|
+
/**
|
|
291
|
+
* Getter for panel item on which sorting was last applied
|
|
292
|
+
*
|
|
293
|
+
* @param {JaqlRequest} jaql - jaql request
|
|
294
|
+
* @returns {JaqlPanel|undefined} - panel item
|
|
295
|
+
*/
|
|
296
|
+
const getLastAppliedSortedPanel = (jaql) => (jaql.metadata || []).find((item) => !!(item.jaql.sortDetails && item.jaql.sortDetails.isLastApplied));
|
|
297
|
+
/**
|
|
298
|
+
* Removes redundant sort details for single branch tree
|
|
299
|
+
* (As such pivot can be sorted only by one panel)
|
|
300
|
+
*
|
|
301
|
+
* @param {JaqlRequest} jaql - jaql request
|
|
302
|
+
* @returns {void}
|
|
303
|
+
*/
|
|
304
|
+
const normalizeSingleBranchTreeSortDetails = (jaql) => {
|
|
305
|
+
const sortedPanel = getLastAppliedSortedPanel(jaql) || getLastSortedPanel(jaql);
|
|
306
|
+
if (!sortedPanel) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const sortedIndex = sortedPanel.field && sortedPanel.field.index;
|
|
310
|
+
(jaql.metadata || []).forEach((panel) => {
|
|
311
|
+
const currentIndex = panel.field && panel.field.index;
|
|
312
|
+
if (currentIndex !== sortedIndex) {
|
|
313
|
+
clearPanelSortDetails(panel);
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
};
|
|
317
|
+
exports.normalizeSingleBranchTreeSortDetails = normalizeSingleBranchTreeSortDetails;
|
|
318
|
+
/**
|
|
319
|
+
* Updates last applied flag on metadata item sort details
|
|
320
|
+
* (Required for proper apply single branch tree sorting)
|
|
321
|
+
*
|
|
322
|
+
* @param {JaqlRequest} jaql - jaql request
|
|
323
|
+
* @param {SortDetails} sortDetails - last updated sort details
|
|
324
|
+
* @returns {void}
|
|
325
|
+
*/
|
|
326
|
+
const updateLastAppliedSortingFlag = (jaql, sortDetails) => {
|
|
327
|
+
jaql.metadata.forEach((item) => {
|
|
328
|
+
const currentIndex = item.field && item.field.index;
|
|
329
|
+
if (sortDetails.field === currentIndex) {
|
|
330
|
+
item.jaql.sortDetails = item.jaql.sortDetails || sortDetails;
|
|
331
|
+
item.jaql.sortDetails.isLastApplied = true;
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (item.jaql.sortDetails && item.jaql.sortDetails) {
|
|
335
|
+
delete item.jaql.sortDetails.isLastApplied;
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
};
|
|
339
|
+
exports.updateLastAppliedSortingFlag = updateLastAppliedSortingFlag;
|
|
340
|
+
/**
|
|
341
|
+
* method to handle new sorting metadata
|
|
342
|
+
*
|
|
343
|
+
* @param {SortDetails} sortDetails - node with sorting metadata
|
|
344
|
+
* @param {?JaqlRequest} jaql - jaql to process
|
|
345
|
+
* @param {object} [options] - additional options
|
|
346
|
+
* @param {Function} [options.formatter] - fields formatter for measurePath
|
|
347
|
+
* @param {boolean} [options.isSingleRowTree] - defines data structure
|
|
348
|
+
* @returns {JaqlRequest} - reload pivot after jaql formatting
|
|
349
|
+
*/
|
|
350
|
+
const updatePanelsSortingMetadata = (sortDetails, jaql, options) => {
|
|
351
|
+
const { isSingleRowTree = false, formatter } = options || {};
|
|
352
|
+
if (!jaql) {
|
|
353
|
+
// eslint-disable-next-line no-console
|
|
354
|
+
console.warn('jaql is undefined or null!');
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const panelToSortBy = (0, exports.getMetadataPanelByIndex)(jaql, sortDetails.field);
|
|
358
|
+
if (panelToSortBy && panelToSortBy.panel === constants_js_1.PanelType.COLUMNS) {
|
|
359
|
+
// eslint-disable-next-line no-console
|
|
360
|
+
console.warn('Should not be sorted by "COLUMN" type panels!');
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (!panelToSortBy) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
const sortingLastDimension = isPanelsLastDimension(panelToSortBy, jaql);
|
|
367
|
+
if (isSingleRowTree) {
|
|
368
|
+
clearAllSortDetails(jaql);
|
|
369
|
+
}
|
|
370
|
+
else if (sortingLastDimension) {
|
|
371
|
+
clearLastDimesionSortDetails(jaql);
|
|
372
|
+
}
|
|
373
|
+
switch (sortDetails.dir) {
|
|
374
|
+
case constants_js_1.SortingDirection.DESC:
|
|
375
|
+
case null:
|
|
376
|
+
panelToSortBy.jaql.sort = constants_js_1.SortingDirection.ASC;
|
|
377
|
+
break;
|
|
378
|
+
case constants_js_1.SortingDirection.ASC:
|
|
379
|
+
panelToSortBy.jaql.sort = constants_js_1.SortingDirection.DESC;
|
|
380
|
+
break;
|
|
381
|
+
default:
|
|
382
|
+
panelToSortBy.jaql.sort = undefined;
|
|
383
|
+
}
|
|
384
|
+
const panelToSortByField = panelToSortBy.field || { index: Infinity };
|
|
385
|
+
if (panelToSortBy.jaql.sort) {
|
|
386
|
+
let { measurePath } = sortDetails;
|
|
387
|
+
if (measurePath) {
|
|
388
|
+
const panels = (0, exports.getMetadataPanels)(jaql);
|
|
389
|
+
const dataTypes = getDataTypes(panels);
|
|
390
|
+
measurePath = getCompatibleMeasurePath(measurePath, dataTypes, formatter);
|
|
391
|
+
}
|
|
392
|
+
panelToSortBy.jaql.sortDetails = {
|
|
393
|
+
field: panelToSortByField.index,
|
|
394
|
+
dir: panelToSortBy.jaql.sort,
|
|
395
|
+
sortingLastDimension,
|
|
396
|
+
measurePath,
|
|
397
|
+
initialized: true,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
panelToSortBy.jaql.sortDetails = undefined;
|
|
402
|
+
}
|
|
403
|
+
if (jaql && jaql.metadata && panelToSortByField.index !== undefined) {
|
|
404
|
+
jaql.metadata[panelToSortByField.index] = panelToSortBy;
|
|
405
|
+
}
|
|
406
|
+
(0, exports.updateLastAppliedSortingFlag)(jaql, sortDetails);
|
|
407
|
+
};
|
|
408
|
+
exports.updatePanelsSortingMetadata = updatePanelsSortingMetadata;
|
|
409
|
+
/**
|
|
410
|
+
* Set width for jaql panel item
|
|
411
|
+
*
|
|
412
|
+
* @param {JaqlRequest} jaql - jaql request object
|
|
413
|
+
* @param {number} jaqlIndex - jaql panel item index
|
|
414
|
+
* @param {number} width - jaql panel item width
|
|
415
|
+
* @returns {void}
|
|
416
|
+
*/
|
|
417
|
+
const setResizeWidthToJaql = (jaql, jaqlIndex, width) => {
|
|
418
|
+
if (!jaql) {
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
const jaqlPanel = (0, exports.getMetadataPanelByIndex)(jaql, jaqlIndex);
|
|
422
|
+
if (!jaqlPanel) {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
jaqlPanel.format = jaqlPanel.format || {};
|
|
426
|
+
jaqlPanel.format.width = width;
|
|
427
|
+
};
|
|
428
|
+
exports.setResizeWidthToJaql = setResizeWidthToJaql;
|
|
429
|
+
/**
|
|
430
|
+
* Get pairs 'jaqlIndex: value' for jaql panel items
|
|
431
|
+
*
|
|
432
|
+
* @param {JaqlRequest} jaql - jaql request object
|
|
433
|
+
* @returns {object} - object, keys - jaqlIndex, value - width
|
|
434
|
+
* appropriate width
|
|
435
|
+
*/
|
|
436
|
+
const getResizeWidthFromJaql = (jaql) => {
|
|
437
|
+
const result = {};
|
|
438
|
+
if (!jaql) {
|
|
439
|
+
return result;
|
|
440
|
+
}
|
|
441
|
+
const panels = (0, exports.getMetadataPanels)(jaql);
|
|
442
|
+
panels.forEach((panel) => {
|
|
443
|
+
const panelField = panel.field || { index: Infinity };
|
|
444
|
+
if (panel.format &&
|
|
445
|
+
typeof panel.format.width !== 'undefined' &&
|
|
446
|
+
typeof panelField.index !== 'undefined') {
|
|
447
|
+
result[panelField.index] = panel.format.width;
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
return result;
|
|
451
|
+
};
|
|
452
|
+
exports.getResizeWidthFromJaql = getResizeWidthFromJaql;
|
|
453
|
+
const markSortedNode = (jaql, item) => {
|
|
454
|
+
if (typeof item.measureJaqlIndex !== 'undefined') {
|
|
455
|
+
const panels = (0, exports.getMetadataPanels)(jaql);
|
|
456
|
+
const dataTypes = getDataTypes(panels);
|
|
457
|
+
const rowWhereSortPropIs = panels
|
|
458
|
+
.filter((p) => p.panel === constants_js_1.PanelType.ROWS)
|
|
459
|
+
.find((rp) => {
|
|
460
|
+
const rowSortDetails = rp.jaql.sortDetails;
|
|
461
|
+
if (!rowSortDetails) {
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
const isIndexSame = rowSortDetails.field === item.measureJaqlIndex;
|
|
465
|
+
if (!isIndexSame) {
|
|
466
|
+
return false;
|
|
467
|
+
}
|
|
468
|
+
return Boolean(isMeasurePathEqual(item.measurePath, rowSortDetails.measurePath, dataTypes));
|
|
469
|
+
});
|
|
470
|
+
if (rowWhereSortPropIs) {
|
|
471
|
+
item.dir = rowWhereSortPropIs.jaql.sort ? rowWhereSortPropIs.jaql.sort : null;
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
const panel = (0, exports.getMetadataPanelByIndex)(jaql, item.measureJaqlIndex);
|
|
475
|
+
if (panel && panel.jaql.sortDetails) {
|
|
476
|
+
const panelMeasurePath = panel.jaql.sortDetails.measurePath;
|
|
477
|
+
const itemMeasurePath = item.measurePath;
|
|
478
|
+
if (isMeasurePathEqual(panelMeasurePath, itemMeasurePath, dataTypes)) {
|
|
479
|
+
item.dir = panel.jaql.sort || null;
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
item.dir = null;
|
|
485
|
+
};
|
|
486
|
+
exports.markSortedNode = markSortedNode;
|
|
487
|
+
function handleComplexSortingSettingsUpdate(jaql, desiredSortingSettings, possibleSortDetailsOfCurrentMeasure, options) {
|
|
488
|
+
const { isSingleRowTree, formatter } = options;
|
|
489
|
+
if (isSingleRowTree) {
|
|
490
|
+
clearAllSortDetails(jaql);
|
|
491
|
+
}
|
|
492
|
+
jaql.metadata.forEach((item) => {
|
|
493
|
+
if (item.jaql.sortDetails) {
|
|
494
|
+
delete item.jaql.sortDetails.isLastApplied;
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
desiredSortingSettings.forEach((dss, index) => {
|
|
498
|
+
let indexOfPanelToSortBy;
|
|
499
|
+
if (index === desiredSortingSettings.length - 1) {
|
|
500
|
+
if (dss.selected) {
|
|
501
|
+
clearLastDimesionSortDetails(jaql);
|
|
502
|
+
}
|
|
503
|
+
indexOfPanelToSortBy = possibleSortDetailsOfCurrentMeasure.field;
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
indexOfPanelToSortBy = dss.indexInJaql;
|
|
507
|
+
}
|
|
508
|
+
const panelToSortBy = (0, exports.getMetadataPanelByIndex)(jaql, indexOfPanelToSortBy);
|
|
509
|
+
if (!panelToSortBy) {
|
|
510
|
+
// eslint-disable-next-line no-console
|
|
511
|
+
console.warn(new Error('Panel not found'));
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
if (dss.selected && !dss.direction) {
|
|
515
|
+
// eslint-disable-next-line no-console
|
|
516
|
+
console.warn(new Error("Direction should be defined and equal to 'asc' or 'desc'"));
|
|
517
|
+
}
|
|
518
|
+
const panels = (0, exports.getMetadataPanels)(jaql);
|
|
519
|
+
const dataTypes = getDataTypes(panels);
|
|
520
|
+
if (!dss.direction || !dss.selected) {
|
|
521
|
+
const { sortDetails } = panelToSortBy.jaql;
|
|
522
|
+
const shouldDeleteSorting = Boolean(sortDetails &&
|
|
523
|
+
possibleSortDetailsOfCurrentMeasure.field === sortDetails.field &&
|
|
524
|
+
isMeasurePathEqual(possibleSortDetailsOfCurrentMeasure.measurePath, sortDetails.measurePath, dataTypes));
|
|
525
|
+
if (shouldDeleteSorting) {
|
|
526
|
+
delete panelToSortBy.jaql.sort;
|
|
527
|
+
delete panelToSortBy.jaql.sortDetails;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
if (dss.selected && dss.direction) {
|
|
531
|
+
panelToSortBy.jaql.sort = dss.direction;
|
|
532
|
+
let { measurePath } = possibleSortDetailsOfCurrentMeasure;
|
|
533
|
+
if (measurePath) {
|
|
534
|
+
measurePath = getCompatibleMeasurePath(measurePath, dataTypes, formatter);
|
|
535
|
+
}
|
|
536
|
+
if (possibleSortDetailsOfCurrentMeasure.measurePath === undefined &&
|
|
537
|
+
panelToSortBy.field && // for type checker
|
|
538
|
+
panelToSortBy.panel === 'rows' &&
|
|
539
|
+
possibleSortDetailsOfCurrentMeasure.field !== panelToSortBy.field.index) {
|
|
540
|
+
measurePath = {};
|
|
541
|
+
}
|
|
542
|
+
panelToSortBy.jaql.sortDetails = {
|
|
543
|
+
field: possibleSortDetailsOfCurrentMeasure.field,
|
|
544
|
+
dir: dss.direction,
|
|
545
|
+
sortingLastDimension: false,
|
|
546
|
+
measurePath,
|
|
547
|
+
isLastApplied: true,
|
|
548
|
+
initialized: true,
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
function checkLastRowSortedByMeasure(lastRow, // TODO: fix
|
|
554
|
+
possibleSortDetailsOfCurrentMeasure, currentSortDetailsOfCurrentMeasure, dataTypesOfPanels) {
|
|
555
|
+
if (lastRow.jaql.sortDetails) {
|
|
556
|
+
// case 1: last row sorted
|
|
557
|
+
// then `.dir` and `.sortDetails` will be on row `.jaql`
|
|
558
|
+
// `direction` should be `undefined`
|
|
559
|
+
// `selected` should be `false`
|
|
560
|
+
return false;
|
|
561
|
+
}
|
|
562
|
+
if (currentSortDetailsOfCurrentMeasure) {
|
|
563
|
+
// case 2: measure sorted
|
|
564
|
+
// then `.dir` and `.sortDetails` will be on measure `.jaql`
|
|
565
|
+
// `direction` should be `currentSortDetailsOfCurrentMeasure.dir`
|
|
566
|
+
// `selected` should be `true`
|
|
567
|
+
return jaqlProcessor.isMeasurePathEqual(possibleSortDetailsOfCurrentMeasure.measurePath, currentSortDetailsOfCurrentMeasure.measurePath, dataTypesOfPanels);
|
|
568
|
+
}
|
|
569
|
+
// case 3: nothing sorted
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
function pickDirectionProperty(sd) {
|
|
573
|
+
const dir = sd && sd.dir;
|
|
574
|
+
switch (dir) {
|
|
575
|
+
case 'asc':
|
|
576
|
+
case 'desc':
|
|
577
|
+
return dir;
|
|
578
|
+
default:
|
|
579
|
+
return null;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
function mapWidgetJaqlToComplexSortingSettings(jaql, possibleSortDetailsOfCurrentMeasure) {
|
|
583
|
+
var _a, _b;
|
|
584
|
+
const listOfRows = jaql.metadata.filter((meta) => meta.panel === 'rows'); // TODO: fix `any`
|
|
585
|
+
const metadataPanelOfCurrentMeasure = jaqlProcessor.getMetadataPanelByIndex(jaql, possibleSortDetailsOfCurrentMeasure.field); // TODO: fix `as`
|
|
586
|
+
// TODO: fix `as` type assertion
|
|
587
|
+
const datatype = metadataPanelOfCurrentMeasure.jaql.datatype;
|
|
588
|
+
// currentSortDetailsOfCurrentMeasure is not possibleSortDetailsOfCurrentMeasure
|
|
589
|
+
// (measurePath can be different)
|
|
590
|
+
const currentSortDetailsOfCurrentMeasure = metadataPanelOfCurrentMeasure.jaql // TODO: name it better
|
|
591
|
+
.sortDetails; // TODO: fix `SortDetails`
|
|
592
|
+
const dataTypesOfPanels = jaqlProcessor.getDataTypes(jaqlProcessor.getMetadataPanels(jaql));
|
|
593
|
+
const listOfSettingsEntries = [];
|
|
594
|
+
for (let index = 0; index < listOfRows.length - 1; index += 1) {
|
|
595
|
+
const row = listOfRows[index];
|
|
596
|
+
const isRowSortedBySubtotals = Boolean(row.jaql.sortDetails &&
|
|
597
|
+
row.jaql.sortDetails.field === possibleSortDetailsOfCurrentMeasure.field &&
|
|
598
|
+
jaqlProcessor.isMeasurePathEqual(possibleSortDetailsOfCurrentMeasure.measurePath, row.jaql.sortDetails.measurePath, dataTypesOfPanels));
|
|
599
|
+
const direction = pickDirectionProperty(row.jaql.sortDetails);
|
|
600
|
+
listOfSettingsEntries.push({
|
|
601
|
+
title: row.jaql.title,
|
|
602
|
+
// `datatype` should correspond to datatype of value column on which
|
|
603
|
+
// sorting settings was called
|
|
604
|
+
datatype,
|
|
605
|
+
selected: isRowSortedBySubtotals,
|
|
606
|
+
direction,
|
|
607
|
+
indexInJaql: (_a = row.field) === null || _a === void 0 ? void 0 : _a.index,
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
const lastRow = listOfRows[listOfRows.length - 1];
|
|
611
|
+
const isLastRowSortedByMeasure = checkLastRowSortedByMeasure(lastRow, possibleSortDetailsOfCurrentMeasure, currentSortDetailsOfCurrentMeasure, dataTypesOfPanels);
|
|
612
|
+
const direction = pickDirectionProperty(currentSortDetailsOfCurrentMeasure);
|
|
613
|
+
const lastEntry = {
|
|
614
|
+
title: lastRow.jaql.title,
|
|
615
|
+
// `datatype` should correspond to datatype of value column on which
|
|
616
|
+
// sorting settings was called
|
|
617
|
+
datatype,
|
|
618
|
+
selected: isLastRowSortedByMeasure,
|
|
619
|
+
direction,
|
|
620
|
+
indexInJaql: (_b = metadataPanelOfCurrentMeasure.field) === null || _b === void 0 ? void 0 : _b.index,
|
|
621
|
+
};
|
|
622
|
+
listOfSettingsEntries.push(lastEntry);
|
|
623
|
+
return listOfSettingsEntries;
|
|
624
|
+
}
|
|
625
|
+
function mapWidgetJaqlToSimpleSortingSettings(metadataPanels, possibleSortDetailsOfCurrentMeasure, dataTypes) {
|
|
626
|
+
const result = metadataPanels
|
|
627
|
+
.filter((meta) => {
|
|
628
|
+
// eslint-disable-line arrow-body-style
|
|
629
|
+
return meta.field && possibleSortDetailsOfCurrentMeasure.field === meta.field.index;
|
|
630
|
+
})
|
|
631
|
+
.map((metadataPanel) => {
|
|
632
|
+
const { sortDetails } = metadataPanel.jaql;
|
|
633
|
+
const selected = Boolean(sortDetails &&
|
|
634
|
+
jaqlProcessor.isMeasurePathEqual(possibleSortDetailsOfCurrentMeasure.measurePath, sortDetails.measurePath, dataTypes));
|
|
635
|
+
const direction = selected ? pickDirectionProperty(sortDetails) : null;
|
|
636
|
+
return {
|
|
637
|
+
title: metadataPanel.jaql.title,
|
|
638
|
+
// TODO: remove `as` type assertion
|
|
639
|
+
datatype: metadataPanel.jaql.datatype,
|
|
640
|
+
selected,
|
|
641
|
+
direction,
|
|
642
|
+
};
|
|
643
|
+
});
|
|
644
|
+
return result[0];
|
|
645
|
+
}
|
|
646
|
+
exports.default = {
|
|
647
|
+
isMeasurePathEqual,
|
|
648
|
+
getDataTypes,
|
|
649
|
+
updatePanelsSortingMetadata: exports.updatePanelsSortingMetadata,
|
|
650
|
+
getMetadataTree: exports.getMetadataTree,
|
|
651
|
+
getMetadataPanels: exports.getMetadataPanels,
|
|
652
|
+
getMetadataPanelByIndex: exports.getMetadataPanelByIndex,
|
|
653
|
+
setResizeWidthToJaql: exports.setResizeWidthToJaql,
|
|
654
|
+
getResizeWidthFromJaql: exports.getResizeWidthFromJaql,
|
|
655
|
+
markSortedNode: exports.markSortedNode,
|
|
656
|
+
normalizeSingleBranchTreeSortDetails: exports.normalizeSingleBranchTreeSortDetails,
|
|
657
|
+
updateLastAppliedSortingFlag: exports.updateLastAppliedSortingFlag,
|
|
658
|
+
handleComplexSortingSettingsUpdate,
|
|
659
|
+
mapWidgetJaqlToSimpleSortingSettings,
|
|
660
|
+
mapWidgetJaqlToComplexSortingSettings,
|
|
661
|
+
};
|