@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datarailsshared/dr_renderer",
3
- "version": "1.2.324",
3
+ "version": "1.2.326-dragons",
4
4
  "description": "DataRails charts and tables renderer",
5
5
  "keywords": [
6
6
  "datarails",
@@ -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
- if (!this.rowKeys.some(rKey => rKey.join(delim) === flatRowKey)) {
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
- lodash.forEach(row_n_keys, function (row_n_value) {
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
- const sortByValueSettings = lodash.filter(
4782
- lodash.get(widget, 'options.sortingFields', []),
4783
- sortingField => lodash.includes(['field_values', 'variance'], lodash.get(sortingField, 'sorting.sort_by'))
4784
- );
4785
-
4786
- if (sortByValueSettings.length) {
4787
- pivotData.sortByValueAttrs = lodash.map(sortByValueSettings, fieldSorting => fieldSorting.name);
4788
- let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(sortByValueSettings, pivotData, opts, widget);
4789
- opts.sorters = new_sorting_function;
4790
- optsFiltered.sorters = new_sorting_function;
4791
- pivotData.sorters = new_sorting_function;
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
- var datesFields = [];
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
- lodash.forEach(data, function (element) {
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
- const isTimestampDateField = row.type === 'Date' && lodash.some(row.values, value => typeof value ==='number');
8766
- if (isTimestampDateField) {
8767
- const nullValueIndex = row.values.indexOf(NULL_VALUE);
8768
- if (~nullValueIndex) {
8769
- row.values.splice(nullValueIndex, 1);
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
- row.values = row.values.sort((a, b) => a - b);
8772
- if (~nullValueIndex) {
8773
- row.values.push(NULL_VALUE);
8818
+
8819
+ if (row.sorting && row.sorting.type == "largestToSmallest") {
8820
+ row.values = lodash.reverse(row.values);
8774
8821
  }
8775
- } else {
8776
- row.values = row.values.sort();
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
- if (row.sorting && row.sorting.type == "largestToSmallest") {
8780
- row.values = lodash.reverse(row.values);
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
- const fieldToSort = lodash.find(
8810
- widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
8811
- );
8812
- field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8813
- });
8814
- }
8815
-
8816
- lodash.forEach(rowsAndCols, function (field) {
8817
- if (field.sorting && (field.sorting.type == "DateString" || field.sorting.type == "largestToSmallest")) {
8818
- var find_field = lodash.find(datesFields, {name: field.name});
8819
- if (find_field) {
8820
- if (find_field.type != 'Date')
8821
- find_field.sorting = field.sorting;
8822
- } else {
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
- } else if (field.sorting && field.sorting.type == "CustomOrder" && field.sorting.values) {
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
- /****** END *******/
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
- let sorters = function (attr) {
8862
- var field = lodash.find(datesFields, {name: attr});
8863
- if (field)
8864
- if (field.sorting && field.sorting.type == "DateString") {
8865
- return $.pivotUtilities.sortDateStrings(field.sorting.month_order);
8866
- } else if (field.sorting && field.sorting.type == "largestToSmallest") {
8867
- if (field.sorting.is_absolute)
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
- return $.pivotUtilities.sortAs(field.values);
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
- this.rowKeys = [];
690
- this.colKeys = [];
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.sortKeys();
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.sortKeys();
872
+ if (!this.isKeysSortingDoneOnBackendSide) {
873
+ this.sortKeys();
874
+ }
861
875
  return this.rowKeys;
862
876
  };
863
877