@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 +1 -1
- package/src/dr_pivottable.js +7 -1
- package/src/highcharts_renderer.js +71 -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
|
}
|
@@ -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.
|
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
|
-
|
4427
|
-
|
4428
|
-
|
4429
|
-
|
4430
|
-
if (
|
4431
|
-
|
4432
|
-
|
4433
|
-
|
4434
|
-
|
4435
|
-
|
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
|
-
|
4459
|
-
|
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
|
-
|
4463
|
-
|
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
|
-
|
4466
|
-
|
4467
|
-
|
4468
|
-
|
4440
|
+
if (aggregator_subtotal) {
|
4441
|
+
valueForComparison = aggregator_subtotal.value();
|
4442
|
+
}
|
4443
|
+
}
|
4469
4444
|
|
4470
|
-
if (
|
4471
|
-
|
4472
|
-
|
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:
|
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
|
-
|
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 (
|
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
|
-
|
4506
|
-
|
4507
|
-
|
4508
|
-
|
4509
|
-
|
4510
|
-
|
4511
|
-
|
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
|
-
|
4728
|
-
|
4729
|
-
|
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(
|
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(
|
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
|
-
|
8805
|
-
|
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;
|