@datarailsshared/dr_renderer 1.2.305 → 1.2.306-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.305",
3
+ "version": "1.2.306-dragons",
4
4
  "description": "DataRails charts and tables renderer",
5
5
  "keywords": [
6
6
  "datarails",
@@ -91,6 +91,7 @@ let initDRPivotTable = function($, window, document) {
91
91
 
92
92
  DRPivotData.prototype.arrSort = function(attrs) {
93
93
  var a, sortersArr;
94
+ const sortByValueAttrs = this.sortByValueAttrs;
94
95
  sortersArr = (function() {
95
96
  var l, len1, results;
96
97
  results = [];
@@ -100,11 +101,16 @@ let initDRPivotTable = function($, window, document) {
100
101
  }
101
102
  return results;
102
103
  }).call(this);
104
+
103
105
  return function(a, b) {
104
106
  var comparison, i, sorter;
105
107
  for (i in sortersArr) {
106
108
  sorter = sortersArr[i];
107
- comparison = sorter(a[i], b[i]);
109
+ if (sortByValueAttrs.indexOf(attrs[parseInt(i)]) !== -1) {
110
+ comparison = sorter(a.slice(0, parseInt(i) + 1).join(','), b.slice(0, parseInt(i) + 1).join(','));
111
+ } else {
112
+ comparison = sorter(a[i], b[i]);
113
+ }
108
114
  if (comparison !== 0) {
109
115
  return comparison;
110
116
  }
@@ -1150,6 +1150,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1150
1150
  ob.name = row_n_value.join(highchartsRenderer.delimer)
1151
1151
  .replace(highchartsRenderer.DR_OTHERS_KEY, othersName);
1152
1152
  }
1153
+
1153
1154
  lodash.forEach(col_n_keys, function (col_n_value, index) {
1154
1155
  var agg = pivotData.getAggregator(row_n_value, col_n_value);
1155
1156
  var val = agg.value();
@@ -1391,6 +1392,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1391
1392
  if (opts.trendLine) {
1392
1393
  const a = ((ySum * squareXSum) - (xSum * xySum)) / ((n * squareXSum) - (xSum * xSum));
1393
1394
  const b = ((n * xySum) - (xSum* ySum)) / ((n * squareXSum) - (xSum * xSum));
1395
+
1394
1396
  const trendSeries = lodash.clone(chart_series[chart_series.length - 1]);
1395
1397
  trendSeries.className = 'trendSeries';
1396
1398
  trendSeries.name = highchartsRenderer.getTrendSeriesName(trendSeries);
@@ -1401,6 +1403,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1401
1403
  if (colors && colors[i]) {
1402
1404
  trendSeries.color = colors[i];
1403
1405
  }
1406
+
1404
1407
  trendSerieses.push(trendSeries);
1405
1408
  }
1406
1409
  i++;
@@ -1417,6 +1420,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1417
1420
  }
1418
1421
 
1419
1422
  let weights = { line: 2,spline: 3 ,area:-2, areaspline: -1, scatter:4, column: 1 };
1423
+
1420
1424
  if (opts.comboOptions && lodash.includes(chartType,'combo') && !lodash.isEqual(row_n_keys, EMPTY_ROW_N_KEYS)) {
1421
1425
  chart_series.forEach((series, seriesIndex) => {
1422
1426
  const savedSeriesOption = lodash.find(opts.comboOptions.seriesOptions, {series: series.name});
@@ -4407,72 +4411,42 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4407
4411
  return ret_str;
4408
4412
  };
4409
4413
 
4410
- highchartsRenderer.getNewAttrSortingForCol = function (pivotData, sortingOptions) {
4411
- let rowAttrs, rowKeys, colKeys, colAttrs;
4412
- rowAttrs = pivotData.rowAttrs;
4413
- rowKeys = pivotData.rowKeys;
4414
- colKeys = pivotData.colKeys;
4415
- colAttrs = pivotData.colAttrs;
4416
-
4417
-
4418
- if (!colAttrs || colAttrs.length == 0) {
4419
- return null;
4420
- }
4421
-
4414
+ highchartsRenderer.getSortingByValueOrderList = function (pivotData, sortingOptions, keysArray, attrs, fieldIndex, widget) {
4422
4415
  let values_names_arr = [];
4423
- let keysArray = sortingOptions.field ? rowKeys : colKeys;
4424
-
4425
4416
  lodash.forEach(keysArray, function (val) {
4426
- let firstArray = sortingOptions.field ? [val[0]] : [];
4427
- let secondArray = sortingOptions.field ? sortingOptions.field.split(highchartsRenderer.delimer) : [val[0]];
4428
- let aggregator_subtotal = pivotData.getAggregator(firstArray, secondArray);
4429
-
4430
- if (aggregator_subtotal) {
4431
- let value_subtotal = aggregator_subtotal.value();
4432
- if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(value_subtotal))) {
4433
- value_subtotal = Math.abs(value_subtotal);
4434
- }
4435
- values_names_arr.push({name: val[0], value: value_subtotal});
4436
- }
4437
- });
4438
-
4439
- // ORDERING
4440
- let sorting_vector = ['asc'];
4441
- if (sortingOptions && sortingOptions.type == 'largestToSmallest') {
4442
- sorting_vector = ['desc'];
4443
- }
4444
- values_names_arr = lodash.orderBy(values_names_arr, ['value'], sorting_vector);
4445
-
4446
- // map only names
4447
- let attr_sorted_values = lodash.map(values_names_arr, 'name');
4448
- return {name: sortingOptions.field ? rowAttrs[0] : colAttrs[0], values: attr_sorted_values};
4449
- };
4450
-
4451
- highchartsRenderer.getNewAttrSortingForRow = function (pivotData, sortingOptions) {
4452
- let rowAttrs, rowKeys, colKeys, colAttrs;
4453
- rowAttrs = pivotData.rowAttrs;
4454
- rowKeys = pivotData.rowKeys;
4455
- colKeys = pivotData.colKeys;
4456
- colAttrs = pivotData.colAttrs;
4417
+ const firstArray = [];
4418
+ const secondArray = val.slice(0, fieldIndex + 1);
4419
+
4420
+ let valueForComparison;
4421
+ if (sortingOptions.sort_by === 'variance') {
4422
+ const varianceConfig = widget.options.chartOptions.delta_column;
4423
+ const data = pivotData.input;
4424
+ const varianceField = varianceConfig.field === 'category' ? widget.cols[0] : widget.rows[0];
4425
+ const varianceRowsForCurrentKey = lodash.filter(data, row =>
4426
+ row[varianceField.name] === varianceConfig.name
4427
+ && lodash.every(secondArray, (item, index) => row[attrs[index]] === item)
4428
+ );
4457
4429
 
4458
- if (!rowAttrs || rowAttrs.length == 0) {
4459
- return null;
4460
- }
4430
+ valueForComparison = lodash.reduce(varianceRowsForCurrentKey, (a, d) => a + d[widget.vals[0].name], 0);
4431
+ } else {
4432
+ let getAggregatorParams = [firstArray, secondArray];
4461
4433
 
4462
- let values_names_arr = [];
4463
- let keysArray = sortingOptions.field ? colKeys : rowKeys;
4434
+ if (lodash.includes(pivotData.rowAttrs, attrs[fieldIndex])) {
4435
+ getAggregatorParams = lodash.reverse(getAggregatorParams);
4436
+ }
4437
+
4438
+ let aggregator_subtotal = pivotData.getAggregator(...getAggregatorParams);
4464
4439
 
4465
- lodash.forEach(keysArray, function (val) {
4466
- let firstArray = sortingOptions.field ? sortingOptions.field.split(highchartsRenderer.delimer) : [val[0]];
4467
- let secondArray = sortingOptions.field ? [val[0]] : [];
4468
- let aggregator_subtotal = pivotData.getAggregator(firstArray, secondArray);
4440
+ if (aggregator_subtotal) {
4441
+ valueForComparison = aggregator_subtotal.value();
4442
+ }
4443
+ }
4469
4444
 
4470
- if (aggregator_subtotal) {
4471
- let value_subtotal = aggregator_subtotal.value();
4472
- if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(value_subtotal))) {
4473
- value_subtotal = Math.abs(value_subtotal);
4445
+ if (typeof valueForComparison !== 'undefined') {
4446
+ if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(valueForComparison))) {
4447
+ valueForComparison = Math.abs(valueForComparison);
4474
4448
  }
4475
- values_names_arr.push({name: val[0], value: value_subtotal});
4449
+ values_names_arr.push({name: secondArray.join(','), value: valueForComparison});
4476
4450
  }
4477
4451
  });
4478
4452
 
@@ -4484,36 +4458,33 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4484
4458
  values_names_arr = lodash.orderBy(values_names_arr, ['value'], sorting_vector);
4485
4459
 
4486
4460
  // map only names
4487
- let attr_sorted_values = lodash.map(values_names_arr, 'name');
4488
- return {name: sortingOptions.field ? colAttrs[0] : rowAttrs[0], values: attr_sorted_values};
4461
+ return lodash.map(values_names_arr, 'name');
4489
4462
  };
4490
4463
 
4491
- highchartsRenderer.generateSortingFunctionByValues = function (sortingOptions, pivotData, opts) {
4492
- let new_map;
4493
- let axis = highchartsRenderer.getAxis(sortingOptions.axis, opts);
4494
- if (axis == 'col_total') {
4495
- new_map = highchartsRenderer.getNewAttrSortingForCol(pivotData, sortingOptions);
4496
- } else if (axis == 'row_total') {
4497
- new_map = highchartsRenderer.getNewAttrSortingForRow(pivotData, sortingOptions);
4498
- }
4499
-
4464
+ highchartsRenderer.generateSortingFunctionByValues = function (sortByValueSettings, pivotData, opts, widget) {
4500
4465
  let old_sorters_function = opts.sorters;
4501
4466
  if (!old_sorters_function) {
4502
4467
  old_sorters_function = function () {
4503
4468
  };
4504
4469
  }
4505
- if (new_map) {
4506
- var sortAs = $.pivotUtilities.sortAs;
4507
- let new_sorters_function = function (attr) {
4508
- if (new_map.name == attr) {
4509
- return $.pivotUtilities.sortAs(new_map.values);
4510
- } else {
4511
- return old_sorters_function(attr);
4512
- }
4470
+ return function (attr) {
4471
+ const sortingOptions = lodash.find(sortByValueSettings, fieldSorting => fieldSorting.name === attr);
4472
+ if (sortingOptions) {
4473
+ const axis = highchartsRenderer.getAxis(_.includes(pivotData.colAttrs, attr) ? 'col_total' : 'row_total', opts);
4474
+ const isColumnSort = axis === 'col_total';
4475
+ const fieldIndex = lodash.findIndex(isColumnSort ? pivotData.colAttrs : pivotData.rowAttrs, name => name === attr);
4476
+ const orderedNamesList = highchartsRenderer.getSortingByValueOrderList(
4477
+ pivotData,
4478
+ sortingOptions.sorting,
4479
+ pivotData[isColumnSort ? 'colKeys' : 'rowKeys'],
4480
+ pivotData[isColumnSort ? 'colAttrs' : 'rowAttrs'],
4481
+ fieldIndex,
4482
+ widget
4483
+ );
4484
+ return $.pivotUtilities.sortAs(orderedNamesList);
4485
+ } else {
4486
+ return old_sorters_function(attr);
4513
4487
  }
4514
- return new_sorters_function;
4515
- } else {
4516
- return old_sorters_function;
4517
4488
  }
4518
4489
  };
4519
4490
 
@@ -4717,6 +4688,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4717
4688
  result = null;
4718
4689
  try {
4719
4690
  pivotData = $.pivotUtilities.getPivotDataModel(rowData, opts);
4691
+ pivotData.sortByValueAttrs = [];
4720
4692
  try {
4721
4693
  if (options && options.onlyOptions) {
4722
4694
  if (!opts.rendererOptions) {
@@ -4724,9 +4696,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4724
4696
  }
4725
4697
  opts.rendererOptions.onlyOptions = true;
4726
4698
  }
4727
- var totalFilters = lodash.get(opts, 'rendererOptions.total_value_options', null);
4728
- if (totalFilters && totalFilters.sorting_options) {
4729
- let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(totalFilters.sorting_options, pivotData, opts);
4699
+
4700
+ const sortByValueSettings = lodash.filter(
4701
+ lodash.get(widget, 'options.sortingFields', []),
4702
+ sortingField => lodash.includes(['field_values', 'variance'], lodash.get(sortingField, 'sorting.sort_by'))
4703
+ );
4704
+
4705
+ if (sortByValueSettings.length) {
4706
+ pivotData.sortByValueAttrs = lodash.map(sortByValueSettings, fieldSorting => fieldSorting.name);
4707
+ let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(sortByValueSettings, pivotData, opts, widget);
4730
4708
  opts.sorters = new_sorting_function;
4731
4709
  optsFiltered.sorters = new_sorting_function;
4732
4710
  pivotData.sorters = new_sorting_function;
@@ -7077,18 +7055,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7077
7055
  value_name: 'is_percentage',
7078
7056
  default_value: false,
7079
7057
  hidden: true,
7080
- }, {
7081
- element_type: 'checkbox',
7082
- element_label: 'Sort by variance',
7083
- value_name: 'sort_by_variance',
7084
- default_value: false,
7085
- hidden: true
7086
- }, {
7087
- element_type: 'checkbox',
7088
- element_label: 'Sort by absolute variance',
7089
- value_name: 'sort_by_absolute_variance',
7090
- default_value: false,
7091
- hidden: true
7092
7058
  }]
7093
7059
  },
7094
7060
  'delta_column_for_drill_down': {
@@ -7155,18 +7121,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7155
7121
  value_name: 'is_percentage',
7156
7122
  default_value: false,
7157
7123
  hidden: true,
7158
- }, {
7159
- element_type: 'checkbox',
7160
- element_label: 'Sort by variance',
7161
- value_name: 'sort_by_variance',
7162
- default_value: false,
7163
- hidden: true
7164
- }, {
7165
- element_type: 'checkbox',
7166
- element_label: 'Sort by absolute variance',
7167
- value_name: 'sort_by_absolute_variance',
7168
- default_value: false,
7169
- hidden: true
7170
7124
  }, {
7171
7125
  element_type: 'checkbox',
7172
7126
  element_label: 'Filter zero values',
@@ -8683,7 +8637,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8683
8637
  const isCustomSorting = widget.options.sortingFields && Array.isArray(widget.options.sortingFields) && widget.options.sortingFields.length > 0;
8684
8638
  if (isCustomSorting) {
8685
8639
  lodash.forEach(datesFields, function (field) {
8686
- const fieldToSort = lodash.find(widget.options.sortingFields, element => element.id === field.id);
8640
+ const fieldToSort = lodash.find(
8641
+ widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
8642
+ );
8687
8643
  field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8688
8644
  });
8689
8645
  }
@@ -8765,7 +8721,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8765
8721
  });
8766
8722
  } else if (isCustomSorting) {
8767
8723
  lodash.forEach(rowsAndCols, function (field) {
8768
- const fieldToSort = lodash.find(widget.options.sortingFields, element => element.id === field.id);
8724
+ const fieldToSort = lodash.find(
8725
+ widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
8726
+ );
8769
8727
  field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8770
8728
  });
8771
8729
  }
@@ -8800,61 +8758,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8800
8758
  }
8801
8759
 
8802
8760
  /****** END *******/
8803
-
8804
- if (lodash.has(widget, "options.chartOptions.delta_column") &&
8805
- widget.options.chartOptions.delta_column.field != '' &&
8806
- (widget.options.chartOptions.delta_column.sort_by_variance ||
8807
- widget.options.chartOptions.delta_column.sort_by_absolute_variance) &&
8808
- widget.rows.length > 0 &&
8809
- widget.cols.length > 0 &&
8810
- widget.vals.length
8811
- ) {
8812
- let variance_config = widget.options.chartOptions.delta_column;
8813
- let val_field = widget.vals[0];
8814
- let field_for_sorting = null;
8815
- let field_with_variant = null;
8816
- if (variance_config.field == "series") {
8817
- field_for_sorting = widget.cols[0];
8818
- field_with_variant = widget.rows[0];
8819
- } else if (variance_config.field == "category") {
8820
- field_for_sorting = widget.rows[0];
8821
- field_with_variant = widget.cols[0];
8822
- }
8823
-
8824
- let data_sorted = lodash.filter(data, function (data_row) {
8825
- return data_row[field_with_variant.name] == variance_config.name && data_row[field_for_sorting.name] != undefined;
8826
- });
8827
-
8828
- const sorting_variance = widget.options.total_value_options && widget.options.total_value_options.sorting_variance === '' ? 'asc' : 'desc';
8829
-
8830
- if (widget.options.chartOptions.delta_column.sort_by_absolute_variance) {
8831
- data_sorted = lodash.sortBy(data_sorted, function (o) {
8832
- if (sorting_variance === 'desc') {
8833
- return Math.abs(o[val_field.name]) * -1;
8834
- }
8835
-
8836
- return Math.abs(o[val_field.name]) * 1;
8837
- });
8838
- } else {
8839
- data_sorted = lodash.orderBy(data_sorted, [val_field.name], [sorting_variance]);
8840
- }
8841
-
8842
- let values_for_sort = lodash.map(data_sorted, function (data_row) {
8843
- return data_row[field_for_sorting.name];
8844
- });
8845
-
8846
- values_for_sort = lodash.uniq(values_for_sort);
8847
-
8848
- if (values_for_sort.length > 0) {
8849
- let field = lodash.find(datesFields, {name: field_for_sorting.name});
8850
- if (field) {
8851
- field.values = values_for_sort;
8852
- field.sorting = null;
8853
- } else {
8854
- datesFields.push({name: field_for_sorting.name, values: values_for_sort});
8855
- }
8856
- }
8857
- } else if (widget.options && widget.options.sortingValues) {
8761
+
8762
+ // TODO: Remove. sortingValues looks like lagacy which is not in use neither in webclient nor in renderer
8763
+ if (widget.options && widget.options.sortingValues) {
8858
8764
  var field = lodash.find(datesFields, {name: widget.options.sortingValues.field});
8859
8765
  if (field) {
8860
8766
  field.values = widget.options.sortingValues.values;