@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 +1 -1
- package/src/dr_pivottable.js +7 -1
- package/src/highcharts_renderer.js +67 -165
package/package.json
CHANGED
package/src/dr_pivottable.js
CHANGED
@@ -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
|
-
|
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.
|
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
|
-
|
4417
|
-
|
4418
|
-
|
4419
|
-
|
4420
|
-
if (
|
4421
|
-
|
4422
|
-
|
4423
|
-
|
4424
|
-
|
4425
|
-
|
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
|
-
|
4449
|
-
|
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
|
-
|
4453
|
-
|
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
|
-
|
4456
|
-
|
4457
|
-
|
4458
|
-
|
4426
|
+
if (aggregator_subtotal) {
|
4427
|
+
valueForComparison = aggregator_subtotal.value();
|
4428
|
+
}
|
4429
|
+
}
|
4459
4430
|
|
4460
|
-
if (
|
4461
|
-
|
4462
|
-
|
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:
|
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
|
-
|
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 (
|
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
|
-
|
4496
|
-
|
4497
|
-
|
4498
|
-
|
4499
|
-
|
4500
|
-
|
4501
|
-
|
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
|
-
|
4718
|
-
|
4719
|
-
|
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(
|
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(
|
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
|
-
|
8790
|
-
|
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;
|