@datarailsshared/dr_renderer 1.2.324 → 1.2.326-dragons
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/package.json +1 -1
- package/src/dr_pivottable.js +3 -3
- package/src/highcharts_renderer.js +179 -123
- package/src/pivottable.js +18 -4
package/package.json
CHANGED
package/src/dr_pivottable.js
CHANGED
@@ -199,10 +199,11 @@ let initDRPivotTable = function($, window, document) {
|
|
199
199
|
let flatColKey = colKey.join(delim);
|
200
200
|
|
201
201
|
if (this.keysLength === rowKey.length + colKey.length) {
|
202
|
-
|
202
|
+
const isDrValuesRows = this.rowAttrs.length === 1 && this.rowAttrs[0] === 'DR_Values';
|
203
|
+
if ((!this.isKeysSortingDoneOnBackendSide || isDrValuesRows) && !this.rowKeys.some(rKey => rKey.join(delim) === flatRowKey)) {
|
203
204
|
this.rowKeys.push(rowKey);
|
204
205
|
}
|
205
|
-
if (!this.colKeys.some(cKey => cKey.join(delim) === flatColKey)) {
|
206
|
+
if (!this.isKeysSortingDoneOnBackendSide && !this.colKeys.some(cKey => cKey.join(delim) === flatColKey)) {
|
206
207
|
this.colKeys.push(colKey);
|
207
208
|
}
|
208
209
|
}
|
@@ -234,7 +235,6 @@ let initDRPivotTable = function($, window, document) {
|
|
234
235
|
insight: insight,
|
235
236
|
});
|
236
237
|
}
|
237
|
-
|
238
238
|
return;
|
239
239
|
}
|
240
240
|
|
@@ -1157,6 +1157,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
1157
1157
|
ob.name = row_n_value.join(highchartsRenderer.delimer)
|
1158
1158
|
.replace(highchartsRenderer.DR_OTHERS_KEY, othersName);
|
1159
1159
|
}
|
1160
|
+
|
1160
1161
|
lodash.forEach(col_n_keys, function (col_n_value, index) {
|
1161
1162
|
var agg = pivotData.getAggregator(row_n_value, col_n_value);
|
1162
1163
|
var val = agg.value();
|
@@ -1398,6 +1399,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
1398
1399
|
if (opts.trendLine) {
|
1399
1400
|
const a = ((ySum * squareXSum) - (xSum * xySum)) / ((n * squareXSum) - (xSum * xSum));
|
1400
1401
|
const b = ((n * xySum) - (xSum* ySum)) / ((n * squareXSum) - (xSum * xSum));
|
1402
|
+
|
1401
1403
|
const trendSeries = lodash.clone(chart_series[chart_series.length - 1]);
|
1402
1404
|
trendSeries.className = 'trendSeries';
|
1403
1405
|
trendSeries.name = highchartsRenderer.getTrendSeriesName(trendSeries);
|
@@ -1408,6 +1410,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
1408
1410
|
if (colors && colors[i]) {
|
1409
1411
|
trendSeries.color = colors[i];
|
1410
1412
|
}
|
1413
|
+
|
1411
1414
|
trendSerieses.push(trendSeries);
|
1412
1415
|
}
|
1413
1416
|
i++;
|
@@ -1424,6 +1427,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
1424
1427
|
}
|
1425
1428
|
|
1426
1429
|
let weights = { line: 2,spline: 3 ,area:-2, areaspline: -1, scatter:4, column: 1 };
|
1430
|
+
|
1427
1431
|
if (opts.comboOptions && lodash.includes(chartType,'combo') && !lodash.isEqual(row_n_keys, EMPTY_ROW_N_KEYS)) {
|
1428
1432
|
chart_series.forEach((series, seriesIndex) => {
|
1429
1433
|
const savedSeriesOption = lodash.find(opts.comboOptions.seriesOptions, {series: series.name});
|
@@ -1510,6 +1514,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
1510
1514
|
const chart_series = [];
|
1511
1515
|
const row_n_keys = pivotData.getRowKeys();
|
1512
1516
|
const col_n_keys = pivotData.getColKeys();
|
1517
|
+
const rows_by_cols = pivotData.rowKeysByCols;
|
1513
1518
|
|
1514
1519
|
let resultObject = {
|
1515
1520
|
data: [],
|
@@ -1538,7 +1543,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
1538
1543
|
});
|
1539
1544
|
|
1540
1545
|
if (col_index !== col_n_keys.length - 1) {
|
1541
|
-
|
1546
|
+
|
1547
|
+
const rowKeys = rows_by_cols ? rows_by_cols[col_index] : row_n_keys;
|
1548
|
+
lodash.forEach(rowKeys, function (row_n_value) {
|
1542
1549
|
const agg = pivotData.getAggregator(row_n_value, col_n_value);
|
1543
1550
|
let val = agg.value();
|
1544
1551
|
|
@@ -4778,17 +4785,23 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
4778
4785
|
opts.rendererOptions.onlyOptions = true;
|
4779
4786
|
}
|
4780
4787
|
|
4781
|
-
|
4782
|
-
lodash.
|
4783
|
-
|
4784
|
-
|
4785
|
-
|
4786
|
-
|
4787
|
-
|
4788
|
-
|
4789
|
-
|
4790
|
-
|
4791
|
-
|
4788
|
+
if (!highchartsRenderer.isSortingOnBackendEnabled()) {
|
4789
|
+
const sortByValueSettings = lodash.filter(
|
4790
|
+
lodash.get(widget, 'options.sortingFields', []),
|
4791
|
+
sortingField => lodash.includes(['field_values', 'variance'], lodash.get(sortingField, 'sorting.sort_by'))
|
4792
|
+
);
|
4793
|
+
|
4794
|
+
if (sortByValueSettings.length) {
|
4795
|
+
pivotData.sortByValueAttrs = lodash.map(sortByValueSettings, fieldSorting => fieldSorting.name);
|
4796
|
+
let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(sortByValueSettings, pivotData, opts, widget);
|
4797
|
+
opts.sorters = new_sorting_function;
|
4798
|
+
optsFiltered.sorters = new_sorting_function;
|
4799
|
+
pivotData.sorters = new_sorting_function;
|
4800
|
+
|
4801
|
+
if (lodash.isObject(lodash.get(widget, 'pivot'))) {
|
4802
|
+
widget.pivot.sorters = new_sorting_function;
|
4803
|
+
}
|
4804
|
+
}
|
4792
4805
|
}
|
4793
4806
|
|
4794
4807
|
result = opts.renderer(pivotData, opts.rendererOptions);
|
@@ -4802,6 +4815,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
4802
4815
|
result = {};
|
4803
4816
|
}
|
4804
4817
|
}
|
4818
|
+
|
4819
|
+
if (lodash.isObject(lodash.get(widget, 'pivot'))) {
|
4820
|
+
widget.pivot.sortByValueAttrs = pivotData.sortByValueAttrs;
|
4821
|
+
}
|
4805
4822
|
} catch (_error) {
|
4806
4823
|
e = _error;
|
4807
4824
|
if (typeof console !== "undefined" && console !== null) {
|
@@ -4838,10 +4855,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
4838
4855
|
}
|
4839
4856
|
var subopts = {
|
4840
4857
|
sorters: pivotOptions ? pivotOptions.sorters : null,
|
4858
|
+
sortByValueAttrs: pivotOptions ? pivotOptions.sortByValueAttrs : null,
|
4841
4859
|
cols: lodash.map(pivotOptions.axisArray, 'name'),
|
4842
4860
|
rows: lodash.map(pivotOptions.legendArray, 'name'),
|
4843
4861
|
rendererOptions: widget.options,
|
4844
4862
|
dateValuesDictionary: pivotOptions ? pivotOptions.dateValuesDictionary : null,
|
4863
|
+
keysObject: pivotOptions ? pivotOptions.keysObject : null,
|
4845
4864
|
};
|
4846
4865
|
|
4847
4866
|
if (!subopts.rendererOptions) {
|
@@ -8708,6 +8727,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
8708
8727
|
};
|
8709
8728
|
|
8710
8729
|
highchartsRenderer.getWidgetDataSorters = function (res, widget, defaultDateFormat) {
|
8730
|
+
let sorters;
|
8731
|
+
|
8711
8732
|
if ($.pivotUtilities && !$.pivotUtilities.additionalFieldsList) {
|
8712
8733
|
$.pivotUtilities.additionalFieldsList = [
|
8713
8734
|
{key: 'DR_Average', name: 'DR_Average'},
|
@@ -8715,32 +8736,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
8715
8736
|
];
|
8716
8737
|
}
|
8717
8738
|
|
8718
|
-
|
8739
|
+
let datesFields = [];
|
8719
8740
|
datesFields = lodash.filter(widget.rows, element => element.type == 'Date');
|
8720
8741
|
datesFields = datesFields.concat(lodash.filter(widget.cols, element => element.type == 'Date'));
|
8721
|
-
|
8722
|
-
const isCustomSorting = widget.options.sortingFields && Array.isArray(widget.options.sortingFields) && widget.options.sortingFields.length > 0;
|
8723
|
-
if (isCustomSorting) {
|
8724
|
-
lodash.forEach(datesFields, function (field) {
|
8725
|
-
const fieldToSort = lodash.find(
|
8726
|
-
widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
|
8727
|
-
);
|
8728
|
-
field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
|
8729
|
-
});
|
8730
|
-
}
|
8731
|
-
|
8732
8742
|
datesFields = lodash.map(datesFields, function (row) {
|
8733
8743
|
return { "format": highchartsRenderer.getDateFieldFormat(widget, row), "name": row.name, "type": row.type, "values": [], "sorting": row.sorting } //'MMM - yyyy' format
|
8734
8744
|
});
|
8735
8745
|
|
8736
|
-
var data = res;
|
8737
|
-
|
8738
8746
|
lodash.forEach(datesFields, function (row) {
|
8739
8747
|
row.val_not_convert = highchartsRenderer.check_values_not_for_convert(widget, row.name);
|
8740
8748
|
});
|
8741
8749
|
|
8742
8750
|
if (datesFields.length > 0) {
|
8743
|
-
|
8751
|
+
const invertedDateStringMap = {};
|
8752
|
+
lodash.forEach(res, function (element) {
|
8744
8753
|
for (var i in datesFields) {
|
8745
8754
|
if (element.hasOwnProperty(datesFields[i].name)) {
|
8746
8755
|
datesFields[i].values.push(element[datesFields[i].name]);
|
@@ -8753,125 +8762,156 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
8753
8762
|
widget.pivot.dateValuesDictionary = {}
|
8754
8763
|
}
|
8755
8764
|
widget.pivot.dateValuesDictionary[dateStringValue] = element[datesFields[i].name];
|
8765
|
+
invertedDateStringMap[element[datesFields[i].name]] = dateStringValue;
|
8756
8766
|
}
|
8757
8767
|
element[datesFields[i].name] = dateStringValue;
|
8758
8768
|
}
|
8759
8769
|
}
|
8760
8770
|
});
|
8771
|
+
|
8772
|
+
if (highchartsRenderer.isSortingOnBackendEnabled()) {
|
8773
|
+
lodash.forEach(['col_keys', 'row_keys'], (keysListName, index) => {
|
8774
|
+
const widgetFields = index ? widget.rows : widget.cols;
|
8775
|
+
const uniqueFormattedKeysList = [];
|
8776
|
+
lodash.forEach(widget.pivot.keysObject[keysListName], subKeysList => {
|
8777
|
+
lodash.forEach(subKeysList, (key, index) => {
|
8778
|
+
if (widgetFields[index].type === 'Date') {
|
8779
|
+
subKeysList[index] = invertedDateStringMap[key] || key;
|
8780
|
+
}
|
8781
|
+
});
|
8782
|
+
if (!lodash.find(uniqueFormattedKeysList, formattedSubKeys => lodash.isEqual(formattedSubKeys, subKeysList))) {
|
8783
|
+
uniqueFormattedKeysList.push(subKeysList);
|
8784
|
+
}
|
8785
|
+
});
|
8786
|
+
widget.pivot.keysObject[keysListName] = uniqueFormattedKeysList;
|
8787
|
+
});
|
8788
|
+
}
|
8761
8789
|
}
|
8762
|
-
lodash.forEach(datesFields, function (row) {
|
8763
|
-
row.values = lodash.uniq(row.values);
|
8764
8790
|
|
8765
|
-
|
8766
|
-
|
8767
|
-
|
8768
|
-
|
8769
|
-
|
8791
|
+
if (!highchartsRenderer.isSortingOnBackendEnabled()) {
|
8792
|
+
const isCustomSorting = widget.options.sortingFields && Array.isArray(widget.options.sortingFields) && widget.options.sortingFields.length > 0;
|
8793
|
+
if (isCustomSorting) {
|
8794
|
+
lodash.forEach(datesFields, function (field) {
|
8795
|
+
const fieldToSort = lodash.find(
|
8796
|
+
widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
|
8797
|
+
);
|
8798
|
+
field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
|
8799
|
+
});
|
8800
|
+
}
|
8801
|
+
|
8802
|
+
lodash.forEach(datesFields, function (row) {
|
8803
|
+
row.values = lodash.uniq(row.values);
|
8804
|
+
|
8805
|
+
const isTimestampDateField = row.type === 'Date' && lodash.some(row.values, value => typeof value ==='number');
|
8806
|
+
if (isTimestampDateField) {
|
8807
|
+
const nullValueIndex = row.values.indexOf(NULL_VALUE);
|
8808
|
+
if (~nullValueIndex) {
|
8809
|
+
row.values.splice(nullValueIndex, 1);
|
8810
|
+
}
|
8811
|
+
row.values = row.values.sort((a, b) => a - b);
|
8812
|
+
if (~nullValueIndex) {
|
8813
|
+
row.values.push(NULL_VALUE);
|
8814
|
+
}
|
8815
|
+
} else {
|
8816
|
+
row.values = row.values.sort();
|
8770
8817
|
}
|
8771
|
-
|
8772
|
-
if (
|
8773
|
-
row.values.
|
8818
|
+
|
8819
|
+
if (row.sorting && row.sorting.type == "largestToSmallest") {
|
8820
|
+
row.values = lodash.reverse(row.values);
|
8774
8821
|
}
|
8775
|
-
|
8776
|
-
row.values = row.values
|
8777
|
-
|
8822
|
+
delete row.sorting;
|
8823
|
+
row.values = lodash.map(row.values, function (val) {
|
8824
|
+
return highchartsRenderer.returnRawDataValue(row.type, val, row.format, row.name, row.val_not_convert) + "";
|
8825
|
+
})
|
8826
|
+
|
8827
|
+
});
|
8778
8828
|
|
8779
|
-
|
8780
|
-
|
8829
|
+
/* date string */
|
8830
|
+
var rowsAndCols = [];
|
8831
|
+
rowsAndCols = widget.rows.concat(widget.cols);
|
8832
|
+
|
8833
|
+
if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
|
8834
|
+
|
8835
|
+
// if it is breakdown widget - redefine sorting according to breakdown_options
|
8836
|
+
// TODO: remove this when BE sort will be implemented
|
8837
|
+
lodash.forEach(rowsAndCols, function (field) {
|
8838
|
+
const waterfallFieldType = field.id === widget.cols[0].id ? 'totals' : 'breakdown';
|
8839
|
+
field.sorting = {
|
8840
|
+
type: 'CustomOrder',
|
8841
|
+
values: lodash.map(
|
8842
|
+
widget.options.breakdown_options.values[waterfallFieldType],
|
8843
|
+
value => value.key
|
8844
|
+
),
|
8845
|
+
};
|
8846
|
+
});
|
8847
|
+
} else if (isCustomSorting) {
|
8848
|
+
lodash.forEach(rowsAndCols, function (field) {
|
8849
|
+
const fieldToSort = lodash.find(
|
8850
|
+
widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
|
8851
|
+
);
|
8852
|
+
field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
|
8853
|
+
});
|
8781
8854
|
}
|
8782
|
-
delete row.sorting;
|
8783
|
-
row.values = lodash.map(row.values, function (val) {
|
8784
|
-
return highchartsRenderer.returnRawDataValue(row.type, val, row.format, row.name, row.val_not_convert) + "";
|
8785
|
-
})
|
8786
8855
|
|
8787
|
-
});
|
8788
|
-
|
8789
|
-
/* date string */
|
8790
|
-
var rowsAndCols = [];
|
8791
|
-
rowsAndCols = widget.rows.concat(widget.cols);
|
8792
|
-
|
8793
|
-
if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
|
8794
|
-
|
8795
|
-
// if it is breakdown widget - redefine sorting according to breakdown_options
|
8796
|
-
// TODO: remove this when BE sort will be implemented
|
8797
|
-
lodash.forEach(rowsAndCols, function (field) {
|
8798
|
-
const waterfallFieldType = field.id === widget.cols[0].id ? 'totals' : 'breakdown';
|
8799
|
-
field.sorting = {
|
8800
|
-
type: 'CustomOrder',
|
8801
|
-
values: lodash.map(
|
8802
|
-
widget.options.breakdown_options.values[waterfallFieldType],
|
8803
|
-
value => value.key
|
8804
|
-
),
|
8805
|
-
};
|
8806
|
-
});
|
8807
|
-
} else if (isCustomSorting) {
|
8808
8856
|
lodash.forEach(rowsAndCols, function (field) {
|
8809
|
-
|
8810
|
-
|
8811
|
-
|
8812
|
-
|
8813
|
-
|
8814
|
-
|
8815
|
-
|
8816
|
-
|
8817
|
-
|
8818
|
-
|
8819
|
-
|
8820
|
-
|
8821
|
-
|
8822
|
-
|
8857
|
+
if (field.sorting && (field.sorting.type == "DateString" || field.sorting.type == "largestToSmallest")) {
|
8858
|
+
var find_field = lodash.find(datesFields, {name: field.name});
|
8859
|
+
if (find_field) {
|
8860
|
+
if (find_field.type != 'Date')
|
8861
|
+
find_field.sorting = field.sorting;
|
8862
|
+
} else {
|
8863
|
+
datesFields.push({
|
8864
|
+
"format": field.format,
|
8865
|
+
"name": field.name,
|
8866
|
+
"type": field.type,
|
8867
|
+
"values": [],
|
8868
|
+
"sorting": field.sorting,
|
8869
|
+
});
|
8870
|
+
}
|
8871
|
+
} else if (field.sorting && field.sorting.type == "CustomOrder" && field.sorting.values) {
|
8823
8872
|
datesFields.push({
|
8824
8873
|
"format": field.format,
|
8825
8874
|
"name": field.name,
|
8826
8875
|
"type": field.type,
|
8827
|
-
"values":
|
8828
|
-
"sorting": field.sorting,
|
8876
|
+
"values": field.sorting.values
|
8829
8877
|
});
|
8830
8878
|
}
|
8831
|
-
}
|
8832
|
-
datesFields.push({
|
8833
|
-
"format": field.format,
|
8834
|
-
"name": field.name,
|
8835
|
-
"type": field.type,
|
8836
|
-
"values": field.sorting.values
|
8837
|
-
});
|
8838
|
-
}
|
8839
|
-
});
|
8840
|
-
|
8841
|
-
if (widget.vals && widget.vals.length > 1) {
|
8842
|
-
datesFields.push({name: "DR_Values", values: lodash.map(widget.vals, 'name')});
|
8843
|
-
}
|
8879
|
+
});
|
8844
8880
|
|
8845
|
-
|
8846
|
-
|
8847
|
-
// TODO: Remove. sortingValues looks like lagacy which is not in use neither in webclient nor in renderer
|
8848
|
-
if (widget.options && widget.options.sortingValues) {
|
8849
|
-
var field = lodash.find(datesFields, {name: widget.options.sortingValues.field});
|
8850
|
-
if (field) {
|
8851
|
-
field.values = widget.options.sortingValues.values;
|
8852
|
-
field.sorting = null;
|
8853
|
-
} else {
|
8854
|
-
datesFields.push({
|
8855
|
-
name: widget.options.sortingValues.field,
|
8856
|
-
values: widget.options.sortingValues.values
|
8857
|
-
});
|
8881
|
+
if (widget.vals && widget.vals.length > 1) {
|
8882
|
+
datesFields.push({name: "DR_Values", values: lodash.map(widget.vals, 'name')});
|
8858
8883
|
}
|
8859
|
-
|
8860
|
-
|
8861
|
-
|
8862
|
-
|
8863
|
-
if (
|
8864
|
-
|
8865
|
-
|
8866
|
-
|
8867
|
-
|
8868
|
-
return $.pivotUtilities.largeToSmallSortByAbsolute;
|
8869
|
-
|
8870
|
-
return $.pivotUtilities.largeToSmallSort;
|
8884
|
+
|
8885
|
+
/****** END *******/
|
8886
|
+
|
8887
|
+
// TODO: Remove. sortingValues looks like lagacy which is not in use neither in webclient nor in renderer
|
8888
|
+
if (widget.options && widget.options.sortingValues) {
|
8889
|
+
var field = lodash.find(datesFields, {name: widget.options.sortingValues.field});
|
8890
|
+
if (field) {
|
8891
|
+
field.values = widget.options.sortingValues.values;
|
8892
|
+
field.sorting = null;
|
8871
8893
|
} else {
|
8872
|
-
|
8894
|
+
datesFields.push({
|
8895
|
+
name: widget.options.sortingValues.field,
|
8896
|
+
values: widget.options.sortingValues.values
|
8897
|
+
});
|
8873
8898
|
}
|
8874
|
-
|
8899
|
+
}
|
8900
|
+
sorters = function (attr) {
|
8901
|
+
var field = lodash.find(datesFields, {name: attr});
|
8902
|
+
if (field)
|
8903
|
+
if (field.sorting && field.sorting.type == "DateString") {
|
8904
|
+
return $.pivotUtilities.sortDateStrings(field.sorting.month_order);
|
8905
|
+
} else if (field.sorting && field.sorting.type == "largestToSmallest") {
|
8906
|
+
if (field.sorting.is_absolute)
|
8907
|
+
return $.pivotUtilities.largeToSmallSortByAbsolute;
|
8908
|
+
|
8909
|
+
return $.pivotUtilities.largeToSmallSort;
|
8910
|
+
} else {
|
8911
|
+
return $.pivotUtilities.sortAs(field.values);
|
8912
|
+
}
|
8913
|
+
};
|
8914
|
+
}
|
8875
8915
|
|
8876
8916
|
return sorters;
|
8877
8917
|
};
|
@@ -8891,6 +8931,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
8891
8931
|
|
8892
8932
|
//highchartsRenderer.getGraphOptions(scope.data, override_values, res, scope.dataModel.templatesWithOutData, scope.openDrillDownList, drillDownFunction)
|
8893
8933
|
highchartsRenderer.getGraphOptions = function (widget_obj, override_values, row_data, templates, openDrillDownListFunction, drillDownFunction) {
|
8934
|
+
|
8935
|
+
let keysObject;
|
8936
|
+
if (highchartsRenderer.isSortingOnBackendEnabled()) {
|
8937
|
+
keysObject = row_data.pop();
|
8938
|
+
}
|
8939
|
+
|
8894
8940
|
let res = highchartsRenderer.updateSelectedOverrideValues(widget_obj, override_values, row_data);
|
8895
8941
|
res = highchartsRenderer.convertUniqueDateValues(widget_obj, templates, res);
|
8896
8942
|
|
@@ -8902,6 +8948,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
8902
8948
|
|
8903
8949
|
let pivot = {};
|
8904
8950
|
|
8951
|
+
if (highchartsRenderer.isSortingOnBackendEnabled()) {
|
8952
|
+
pivot.keysObject = keysObject;
|
8953
|
+
}
|
8954
|
+
|
8905
8955
|
let templateNoData = lodash.find(templates, {id: widget_obj.template_id});
|
8906
8956
|
if (templateNoData) {
|
8907
8957
|
|
@@ -8938,6 +8988,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
8938
8988
|
subopts.onlyOptions = true;
|
8939
8989
|
}
|
8940
8990
|
|
8991
|
+
subopts.keysObject = keysObject;
|
8992
|
+
|
8941
8993
|
let hc_options = highchartsRenderer.rhPivotView(res, subopts, is_table, widget_obj);
|
8942
8994
|
|
8943
8995
|
return hc_options;
|
@@ -9292,6 +9344,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
9292
9344
|
return highchartsRenderer.enabledNewWidgetValueFormatting && (isCustomFormat || !isSecondaryAxis);
|
9293
9345
|
}
|
9294
9346
|
|
9347
|
+
highchartsRenderer.isSortingOnBackendEnabled = function() {
|
9348
|
+
return lodash.includes(lodash.get(document, 'ReportHippo.user.features'), 'enable_server_widget_data_sorting');
|
9349
|
+
}
|
9350
|
+
|
9295
9351
|
return highchartsRenderer;
|
9296
9352
|
};
|
9297
9353
|
|
package/src/pivottable.js
CHANGED
@@ -686,13 +686,23 @@ let initPivotTable = function($, window, document) {
|
|
686
686
|
});
|
687
687
|
this.tree = {};
|
688
688
|
this.insights = [];
|
689
|
-
|
690
|
-
this.
|
689
|
+
|
690
|
+
this.isKeysSortingDoneOnBackendSide = opts.keysObject && typeof opts.keysObject === 'object';
|
691
|
+
if (this.isKeysSortingDoneOnBackendSide) {
|
692
|
+
this.rowKeys = opts.keysObject.row_keys;
|
693
|
+
this.colKeys = opts.keysObject.col_keys;
|
694
|
+
// TODO: add also for breakdown sort object when BE story is ready.
|
695
|
+
} else {
|
696
|
+
this.rowKeys = [];
|
697
|
+
this.colKeys = [];
|
698
|
+
}
|
699
|
+
|
691
700
|
this.rowTotals = {};
|
692
701
|
this.colTotals = {};
|
693
702
|
this.allTotal = this.aggregator(this, [], []);
|
694
703
|
this.sorted = false;
|
695
704
|
this.dateValuesDictionary = opts.dateValuesDictionary;
|
705
|
+
this.sortByValueAttrs = opts.sortByValueAttrs || [];
|
696
706
|
PivotData.forEachRecord(this.input, this.derivedAttributes, (function(_this) {
|
697
707
|
return function(record) {
|
698
708
|
if (_this.filter(record)) {
|
@@ -852,12 +862,16 @@ let initPivotTable = function($, window, document) {
|
|
852
862
|
};
|
853
863
|
|
854
864
|
PivotData.prototype.getColKeys = function() {
|
855
|
-
this.
|
865
|
+
if (!this.isKeysSortingDoneOnBackendSide) {
|
866
|
+
this.sortKeys();
|
867
|
+
}
|
856
868
|
return this.colKeys;
|
857
869
|
};
|
858
870
|
|
859
871
|
PivotData.prototype.getRowKeys = function() {
|
860
|
-
this.
|
872
|
+
if (!this.isKeysSortingDoneOnBackendSide) {
|
873
|
+
this.sortKeys();
|
874
|
+
}
|
861
875
|
return this.rowKeys;
|
862
876
|
};
|
863
877
|
|