@datarailsshared/dr_renderer 1.2.300-dragons → 1.2.302-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.300-dragons",
3
+ "version": "1.2.302-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
  }
@@ -4397,72 +4397,42 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4397
4397
  return ret_str;
4398
4398
  };
4399
4399
 
4400
- highchartsRenderer.getNewAttrSortingForCol = function (pivotData, sortingOptions) {
4401
- let rowAttrs, rowKeys, colKeys, colAttrs;
4402
- rowAttrs = pivotData.rowAttrs;
4403
- rowKeys = pivotData.rowKeys;
4404
- colKeys = pivotData.colKeys;
4405
- colAttrs = pivotData.colAttrs;
4406
-
4407
-
4408
- if (!colAttrs || colAttrs.length == 0) {
4409
- return null;
4410
- }
4411
-
4400
+ highchartsRenderer.getSortingByValueOrderList = function (pivotData, sortingOptions, keysArray, attrs, fieldIndex, widget) {
4412
4401
  let values_names_arr = [];
4413
- let keysArray = sortingOptions.field ? rowKeys : colKeys;
4414
-
4415
4402
  lodash.forEach(keysArray, function (val) {
4416
- let firstArray = sortingOptions.field ? [val[0]] : [];
4417
- let secondArray = sortingOptions.field ? sortingOptions.field.split(highchartsRenderer.delimer) : [val[0]];
4418
- let aggregator_subtotal = pivotData.getAggregator(firstArray, secondArray);
4419
-
4420
- if (aggregator_subtotal) {
4421
- let value_subtotal = aggregator_subtotal.value();
4422
- if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(value_subtotal))) {
4423
- value_subtotal = Math.abs(value_subtotal);
4424
- }
4425
- values_names_arr.push({name: val[0], value: value_subtotal});
4426
- }
4427
- });
4428
-
4429
- // ORDERING
4430
- let sorting_vector = ['asc'];
4431
- if (sortingOptions && sortingOptions.type == 'largestToSmallest') {
4432
- sorting_vector = ['desc'];
4433
- }
4434
- values_names_arr = lodash.orderBy(values_names_arr, ['value'], sorting_vector);
4435
-
4436
- // map only names
4437
- let attr_sorted_values = lodash.map(values_names_arr, 'name');
4438
- return {name: sortingOptions.field ? rowAttrs[0] : colAttrs[0], values: attr_sorted_values};
4439
- };
4440
-
4441
- highchartsRenderer.getNewAttrSortingForRow = function (pivotData, sortingOptions) {
4442
- let rowAttrs, rowKeys, colKeys, colAttrs;
4443
- rowAttrs = pivotData.rowAttrs;
4444
- rowKeys = pivotData.rowKeys;
4445
- colKeys = pivotData.colKeys;
4446
- colAttrs = pivotData.colAttrs;
4403
+ const firstArray = [];
4404
+ const secondArray = val.slice(0, fieldIndex + 1);
4405
+
4406
+ let valueForComparison;
4407
+ if (sortingOptions.sort_by === 'variance') {
4408
+ const varianceConfig = widget.options.chartOptions.delta_column;
4409
+ const data = pivotData.input;
4410
+ const varianceField = varianceConfig.field === 'category' ? widget.cols[0] : widget.rows[0];
4411
+ const varianceRowsForCurrentKey = lodash.filter(data, row =>
4412
+ row[varianceField.name] === varianceConfig.name
4413
+ && lodash.every(secondArray, (item, index) => row[attrs[index]] === item)
4414
+ );
4447
4415
 
4448
- if (!rowAttrs || rowAttrs.length == 0) {
4449
- return null;
4450
- }
4416
+ valueForComparison = lodash.reduce(varianceRowsForCurrentKey, (a, d) => a + d[widget.vals[0].name], 0);
4417
+ } else {
4418
+ let getAggregatorParams = [firstArray, secondArray];
4451
4419
 
4452
- let values_names_arr = [];
4453
- let keysArray = sortingOptions.field ? colKeys : rowKeys;
4420
+ if (lodash.includes(pivotData.rowAttrs, attrs[fieldIndex])) {
4421
+ getAggregatorParams = lodash.reverse(getAggregatorParams);
4422
+ }
4423
+
4424
+ let aggregator_subtotal = pivotData.getAggregator(...getAggregatorParams);
4454
4425
 
4455
- lodash.forEach(keysArray, function (val) {
4456
- let firstArray = sortingOptions.field ? sortingOptions.field.split(highchartsRenderer.delimer) : [val[0]];
4457
- let secondArray = sortingOptions.field ? [val[0]] : [];
4458
- let aggregator_subtotal = pivotData.getAggregator(firstArray, secondArray);
4426
+ if (aggregator_subtotal) {
4427
+ valueForComparison = aggregator_subtotal.value();
4428
+ }
4429
+ }
4459
4430
 
4460
- if (aggregator_subtotal) {
4461
- let value_subtotal = aggregator_subtotal.value();
4462
- if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(value_subtotal))) {
4463
- value_subtotal = Math.abs(value_subtotal);
4431
+ if (typeof valueForComparison !== 'undefined') {
4432
+ if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(valueForComparison))) {
4433
+ valueForComparison = Math.abs(valueForComparison);
4464
4434
  }
4465
- values_names_arr.push({name: val[0], value: value_subtotal});
4435
+ values_names_arr.push({name: secondArray.join(','), value: valueForComparison});
4466
4436
  }
4467
4437
  });
4468
4438
 
@@ -4474,36 +4444,33 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4474
4444
  values_names_arr = lodash.orderBy(values_names_arr, ['value'], sorting_vector);
4475
4445
 
4476
4446
  // map only names
4477
- let attr_sorted_values = lodash.map(values_names_arr, 'name');
4478
- return {name: sortingOptions.field ? colAttrs[0] : rowAttrs[0], values: attr_sorted_values};
4447
+ return lodash.map(values_names_arr, 'name');
4479
4448
  };
4480
4449
 
4481
- highchartsRenderer.generateSortingFunctionByValues = function (sortingOptions, pivotData, opts) {
4482
- let new_map;
4483
- let axis = highchartsRenderer.getAxis(sortingOptions.axis, opts);
4484
- if (axis == 'col_total') {
4485
- new_map = highchartsRenderer.getNewAttrSortingForCol(pivotData, sortingOptions);
4486
- } else if (axis == 'row_total') {
4487
- new_map = highchartsRenderer.getNewAttrSortingForRow(pivotData, sortingOptions);
4488
- }
4489
-
4450
+ highchartsRenderer.generateSortingFunctionByValues = function (sortByValueSettings, pivotData, opts, widget) {
4490
4451
  let old_sorters_function = opts.sorters;
4491
4452
  if (!old_sorters_function) {
4492
4453
  old_sorters_function = function () {
4493
4454
  };
4494
4455
  }
4495
- if (new_map) {
4496
- var sortAs = $.pivotUtilities.sortAs;
4497
- let new_sorters_function = function (attr) {
4498
- if (new_map.name == attr) {
4499
- return $.pivotUtilities.sortAs(new_map.values);
4500
- } else {
4501
- return old_sorters_function(attr);
4502
- }
4456
+ return function (attr) {
4457
+ const sortingOptions = lodash.find(sortByValueSettings, fieldSorting => fieldSorting.name === attr);
4458
+ if (sortingOptions) {
4459
+ const axis = highchartsRenderer.getAxis(_.includes(pivotData.colAttrs, attr) ? 'col_total' : 'row_total', opts);
4460
+ const isColumnSort = axis === 'col_total';
4461
+ const fieldIndex = lodash.findIndex(isColumnSort ? pivotData.colAttrs : pivotData.rowAttrs, name => name === attr);
4462
+ const orderedNamesList = highchartsRenderer.getSortingByValueOrderList(
4463
+ pivotData,
4464
+ sortingOptions.sorting,
4465
+ pivotData[isColumnSort ? 'colKeys' : 'rowKeys'],
4466
+ pivotData[isColumnSort ? 'colAttrs' : 'rowAttrs'],
4467
+ fieldIndex,
4468
+ widget
4469
+ );
4470
+ return $.pivotUtilities.sortAs(orderedNamesList);
4471
+ } else {
4472
+ return old_sorters_function(attr);
4503
4473
  }
4504
- return new_sorters_function;
4505
- } else {
4506
- return old_sorters_function;
4507
4474
  }
4508
4475
  };
4509
4476
 
@@ -4707,6 +4674,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4707
4674
  result = null;
4708
4675
  try {
4709
4676
  pivotData = $.pivotUtilities.getPivotDataModel(rowData, opts);
4677
+ pivotData.sortByValueAttrs = [];
4710
4678
  try {
4711
4679
  if (options && options.onlyOptions) {
4712
4680
  if (!opts.rendererOptions) {
@@ -4714,9 +4682,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4714
4682
  }
4715
4683
  opts.rendererOptions.onlyOptions = true;
4716
4684
  }
4717
- var totalFilters = lodash.get(opts, 'rendererOptions.total_value_options', null);
4718
- if (totalFilters && totalFilters.sorting_options) {
4719
- let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(totalFilters.sorting_options, pivotData, opts);
4685
+
4686
+ const sortByValueSettings = lodash.filter(
4687
+ lodash.get(widget, 'options.sortingFields', []),
4688
+ sortingField => lodash.includes(['field_values', 'variance'], lodash.get(sortingField, 'sorting.sort_by'))
4689
+ );
4690
+
4691
+ if (sortByValueSettings.length) {
4692
+ pivotData.sortByValueAttrs = lodash.map(sortByValueSettings, fieldSorting => fieldSorting.name);
4693
+ let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(sortByValueSettings, pivotData, opts, widget);
4720
4694
  opts.sorters = new_sorting_function;
4721
4695
  optsFiltered.sorters = new_sorting_function;
4722
4696
  pivotData.sorters = new_sorting_function;
@@ -7062,18 +7036,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7062
7036
  value_name: 'is_percentage',
7063
7037
  default_value: false,
7064
7038
  hidden: true,
7065
- }, {
7066
- element_type: 'checkbox',
7067
- element_label: 'Sort by variance',
7068
- value_name: 'sort_by_variance',
7069
- default_value: false,
7070
- hidden: true
7071
- }, {
7072
- element_type: 'checkbox',
7073
- element_label: 'Sort by absolute variance',
7074
- value_name: 'sort_by_absolute_variance',
7075
- default_value: false,
7076
- hidden: true
7077
7039
  }]
7078
7040
  },
7079
7041
  'delta_column_for_drill_down': {
@@ -7140,18 +7102,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7140
7102
  value_name: 'is_percentage',
7141
7103
  default_value: false,
7142
7104
  hidden: true,
7143
- }, {
7144
- element_type: 'checkbox',
7145
- element_label: 'Sort by variance',
7146
- value_name: 'sort_by_variance',
7147
- default_value: false,
7148
- hidden: true
7149
- }, {
7150
- element_type: 'checkbox',
7151
- element_label: 'Sort by absolute variance',
7152
- value_name: 'sort_by_absolute_variance',
7153
- default_value: false,
7154
- hidden: true
7155
7105
  }, {
7156
7106
  element_type: 'checkbox',
7157
7107
  element_label: 'Filter zero values',
@@ -8668,7 +8618,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8668
8618
  const isCustomSorting = widget.options.sortingFields && Array.isArray(widget.options.sortingFields) && widget.options.sortingFields.length > 0;
8669
8619
  if (isCustomSorting) {
8670
8620
  lodash.forEach(datesFields, function (field) {
8671
- const fieldToSort = lodash.find(widget.options.sortingFields, element => element.id === field.id);
8621
+ const fieldToSort = lodash.find(
8622
+ widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
8623
+ );
8672
8624
  field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8673
8625
  });
8674
8626
  }
@@ -8750,7 +8702,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8750
8702
  });
8751
8703
  } else if (isCustomSorting) {
8752
8704
  lodash.forEach(rowsAndCols, function (field) {
8753
- const fieldToSort = lodash.find(widget.options.sortingFields, element => element.id === field.id);
8705
+ const fieldToSort = lodash.find(
8706
+ widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
8707
+ );
8754
8708
  field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8755
8709
  });
8756
8710
  }
@@ -8785,61 +8739,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8785
8739
  }
8786
8740
 
8787
8741
  /****** END *******/
8788
-
8789
- if (lodash.has(widget, "options.chartOptions.delta_column") &&
8790
- widget.options.chartOptions.delta_column.field != '' &&
8791
- (widget.options.chartOptions.delta_column.sort_by_variance ||
8792
- widget.options.chartOptions.delta_column.sort_by_absolute_variance) &&
8793
- widget.rows.length > 0 &&
8794
- widget.cols.length > 0 &&
8795
- widget.vals.length
8796
- ) {
8797
- let variance_config = widget.options.chartOptions.delta_column;
8798
- let val_field = widget.vals[0];
8799
- let field_for_sorting = null;
8800
- let field_with_variant = null;
8801
- if (variance_config.field == "series") {
8802
- field_for_sorting = widget.cols[0];
8803
- field_with_variant = widget.rows[0];
8804
- } else if (variance_config.field == "category") {
8805
- field_for_sorting = widget.rows[0];
8806
- field_with_variant = widget.cols[0];
8807
- }
8808
-
8809
- let data_sorted = lodash.filter(data, function (data_row) {
8810
- return data_row[field_with_variant.name] == variance_config.name && data_row[field_for_sorting.name] != undefined;
8811
- });
8812
-
8813
- const sorting_variance = widget.options.total_value_options && widget.options.total_value_options.sorting_variance === '' ? 'asc' : 'desc';
8814
-
8815
- if (widget.options.chartOptions.delta_column.sort_by_absolute_variance) {
8816
- data_sorted = lodash.sortBy(data_sorted, function (o) {
8817
- if (sorting_variance === 'desc') {
8818
- return Math.abs(o[val_field.name]) * -1;
8819
- }
8820
-
8821
- return Math.abs(o[val_field.name]) * 1;
8822
- });
8823
- } else {
8824
- data_sorted = lodash.orderBy(data_sorted, [val_field.name], [sorting_variance]);
8825
- }
8826
-
8827
- let values_for_sort = lodash.map(data_sorted, function (data_row) {
8828
- return data_row[field_for_sorting.name];
8829
- });
8830
-
8831
- values_for_sort = lodash.uniq(values_for_sort);
8832
-
8833
- if (values_for_sort.length > 0) {
8834
- let field = lodash.find(datesFields, {name: field_for_sorting.name});
8835
- if (field) {
8836
- field.values = values_for_sort;
8837
- field.sorting = null;
8838
- } else {
8839
- datesFields.push({name: field_for_sorting.name, values: values_for_sort});
8840
- }
8841
- }
8842
- } else if (widget.options && widget.options.sortingValues) {
8742
+
8743
+ // TODO: Remove. sortingValues looks like lagacy which is not in use neither in webclient nor in renderer
8744
+ if (widget.options && widget.options.sortingValues) {
8843
8745
  var field = lodash.find(datesFields, {name: widget.options.sortingValues.field});
8844
8746
  if (field) {
8845
8747
  field.values = widget.options.sortingValues.values;