@datarailsshared/dr_renderer 1.2.436 → 1.2.438
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
package/src/dr_pivottable.js
CHANGED
@@ -396,13 +396,10 @@ let initDRPivotTable = function($, window, document) {
|
|
396
396
|
switch (opts.chartOptions.negative_numbers.value) {
|
397
397
|
case 'red_minus':
|
398
398
|
return '<span style="color: red; fill: red;">' + aggregator.format(val, format_argument) + '</span>';
|
399
|
-
break;
|
400
399
|
case 'absolute':
|
401
400
|
return '(' + aggregator.format(Math.abs(val), format_argument) + ')';
|
402
|
-
break;
|
403
401
|
case 'red_absolute':
|
404
402
|
return '<span style="color: red; fill: red;">(' + aggregator.format(Math.abs(val), format_argument) + ')</span>';
|
405
|
-
break;
|
406
403
|
default:
|
407
404
|
return aggregator.format(val, format_argument);
|
408
405
|
}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
const helpers = require('./dr-renderer-helpers');
|
2
|
+
const seriesPointStylesHelper= require('./seriesPointStyles-helper')
|
2
3
|
|
3
4
|
const mobileBrowserRegex = new RegExp([
|
4
5
|
'(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
|
@@ -406,6 +407,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
406
407
|
].includes(type);
|
407
408
|
};
|
408
409
|
|
410
|
+
/**
|
411
|
+
* @param {String} value
|
412
|
+
* @param {{ useUnitAbbreviation: boolean } labelOptions
|
413
|
+
* @returns {String}
|
414
|
+
*/
|
415
|
+
const removeNumberFormatValueUnitSign = (value, labelOptions) => {
|
416
|
+
const removeUnitAbbreviation = labelOptions && !lodash.isNil(labelOptions.useUnitAbbreviation) && !labelOptions.useUnitAbbreviation;
|
417
|
+
if (!removeUnitAbbreviation || !value || typeof value !== 'string') {
|
418
|
+
return value;
|
419
|
+
}
|
420
|
+
const unitsAbbr = /[KM]/gi;
|
421
|
+
return value.replace(unitsAbbr, '');
|
422
|
+
}
|
423
|
+
|
409
424
|
highchartsRenderer.filterFloat = function (value) {
|
410
425
|
if (/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value))
|
411
426
|
return Number(value);
|
@@ -541,19 +556,22 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
541
556
|
|
542
557
|
//TODO No totals formatts
|
543
558
|
highchartsRenderer.defaultValueLabelsFormatter = function (pivotData, opts) {
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
}
|
554
|
-
|
559
|
+
const labelOptions = lodash.get(opts.chartOptions, 'label') || lodash.get(opts.chartOptions, 'label_pie');
|
560
|
+
|
561
|
+
return function () {
|
562
|
+
const value = parseFloat(this.value);
|
563
|
+
try {
|
564
|
+
const aggr = pivotData ? pivotData.getAggregator([], []) : null;
|
565
|
+
let formattedValue = $.pivotUtilities.getFormattedNumber(value, aggr, opts, !!aggr);
|
566
|
+
formattedValue = removeNumberFormatValueUnitSign(formattedValue, labelOptions);
|
567
|
+
return formattedValue;
|
568
|
+
} catch (err) {
|
569
|
+
// do nothing
|
570
|
+
}
|
571
|
+
let formattedValue = $.pivotUtilities.getFormattedNumber(value, null, opts);
|
572
|
+
formattedValue = removeNumberFormatValueUnitSign(formattedValue, labelOptions);
|
573
|
+
return formattedValue;
|
555
574
|
};
|
556
|
-
return func;
|
557
575
|
};
|
558
576
|
|
559
577
|
highchartsRenderer.persantageValueLabelsFormatter = function (pivotData, opts) {
|
@@ -700,14 +718,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
700
718
|
|
701
719
|
var aggr = pivotData.getAggregator(rows, cols);
|
702
720
|
|
703
|
-
|
721
|
+
let formattedValue = is_drill_down_pie || labelOptions.show_value ? $.pivotUtilities.getFormattedNumber(value, aggr, opts, true) : '';
|
722
|
+
formattedValue = removeNumberFormatValueUnitSign(formattedValue, labelOptions);
|
704
723
|
return String(formattedValue) + percentageWrapper;
|
705
724
|
|
706
725
|
} catch (err) {
|
707
726
|
// do nothing
|
708
727
|
}
|
709
728
|
}
|
710
|
-
|
729
|
+
let formattedValue = $.pivotUtilities.getFormattedNumber(value, null, opts).replace(/\u00A0/g, " ");
|
730
|
+
formattedValue = removeNumberFormatValueUnitSign(formattedValue, labelOptions);
|
731
|
+
return formattedValue;
|
711
732
|
};
|
712
733
|
return func;
|
713
734
|
};
|
@@ -2530,6 +2551,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
2530
2551
|
|
2531
2552
|
chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData, chartOptions, additionOptions, opts);
|
2532
2553
|
chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, 1, false, true);
|
2554
|
+
chartOptions.drilldown = highchartsRenderer.getDataLabelsStylesForDrillDown(additionOptions);
|
2533
2555
|
if (drilldownFunc)
|
2534
2556
|
chartOptions.drilldown = {}
|
2535
2557
|
else if (!pivotData.isDrillDownDisabled)
|
@@ -2641,6 +2663,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
2641
2663
|
chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
|
2642
2664
|
|
2643
2665
|
highchartsRenderer.handleGridLines(additionOptions, chartOptions)
|
2666
|
+
if (opts.selectedPoint) {
|
2667
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
2668
|
+
}
|
2644
2669
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
2645
2670
|
};
|
2646
2671
|
|
@@ -2722,6 +2747,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
2722
2747
|
chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, colors, null, null, additionOptions, opts, chartOptions);
|
2723
2748
|
|
2724
2749
|
highchartsRenderer.handleGridLines(additionOptions, chartOptions)
|
2750
|
+
if (opts.selectedPoint) {
|
2751
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
2752
|
+
}
|
2725
2753
|
|
2726
2754
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
2727
2755
|
};
|
@@ -2816,6 +2844,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
2816
2844
|
chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
|
2817
2845
|
|
2818
2846
|
highchartsRenderer.handleGridLines(additionOptions, chartOptions);
|
2847
|
+
if (opts.selectedPoint) {
|
2848
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
2849
|
+
}
|
2819
2850
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
2820
2851
|
};
|
2821
2852
|
|
@@ -2900,6 +2931,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
2900
2931
|
|
2901
2932
|
chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
|
2902
2933
|
|
2934
|
+
if (opts.selectedPoint) {
|
2935
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
2936
|
+
}
|
2903
2937
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
2904
2938
|
};
|
2905
2939
|
|
@@ -2991,7 +3025,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
2991
3025
|
drilldownFunc(e, this, "drillup");
|
2992
3026
|
|
2993
3027
|
}
|
2994
|
-
|
2995
3028
|
}
|
2996
3029
|
};
|
2997
3030
|
if (disableAnimation) {
|
@@ -3066,8 +3099,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
3066
3099
|
}
|
3067
3100
|
}
|
3068
3101
|
};
|
3069
|
-
|
3070
3102
|
if (opts.drillDownListFunc) {
|
3103
|
+
chartOptions.plotOptions.series = {
|
3104
|
+
animation: !disableAnimation,
|
3105
|
+
};
|
3071
3106
|
chartOptions.plotOptions.series.cursor = 'pointer';
|
3072
3107
|
chartOptions.plotOptions.series.point = {
|
3073
3108
|
events: {
|
@@ -3076,6 +3111,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
3076
3111
|
};
|
3077
3112
|
}
|
3078
3113
|
chartOptions.plotOptions.series = highchartsRenderer.getDataLabelsOptions(additionOptions, chartOptions.plotOptions.series);
|
3114
|
+
|
3115
|
+
if (opts.selectedPoint) {
|
3116
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
3117
|
+
}
|
3079
3118
|
chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
|
3080
3119
|
|
3081
3120
|
chartOptions.drilldown = highchartsRenderer.getDataLabelsStylesForDrillDown(additionOptions);
|
@@ -3220,6 +3259,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
3220
3259
|
}
|
3221
3260
|
chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, chartOptions.colors, null, true, true, additionOptions, opts, chartOptions, chartType);
|
3222
3261
|
//chartOptions.drilldown = {}
|
3262
|
+
if (opts.selectedPoint) {
|
3263
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
3264
|
+
}
|
3223
3265
|
|
3224
3266
|
highchartsRenderer.handleGridLines(additionOptions, chartOptions)
|
3225
3267
|
|
@@ -3386,9 +3428,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
3386
3428
|
}
|
3387
3429
|
};
|
3388
3430
|
}
|
3389
|
-
|
3390
3431
|
chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
|
3391
|
-
|
3432
|
+
if (opts.selectedPoint) {
|
3433
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
3434
|
+
}
|
3392
3435
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
3393
3436
|
};
|
3394
3437
|
|
@@ -3478,6 +3521,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
3478
3521
|
chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
|
3479
3522
|
chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
|
3480
3523
|
|
3524
|
+
if (opts.selectedPoint) {
|
3525
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
3526
|
+
}
|
3481
3527
|
highchartsRenderer.handleGridLines(additionOptions, chartOptions)
|
3482
3528
|
|
3483
3529
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
@@ -3600,6 +3646,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
3600
3646
|
formatter: highchartsRenderer.getBreakdownXAxisLabelFormatter(chartOptions.series),
|
3601
3647
|
};
|
3602
3648
|
|
3649
|
+
if (opts.selectedPoint) {
|
3650
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
3651
|
+
}
|
3603
3652
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
3604
3653
|
};
|
3605
3654
|
|
@@ -3716,6 +3765,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
3716
3765
|
}
|
3717
3766
|
}
|
3718
3767
|
|
3768
|
+
if (opts.selectedPoint) {
|
3769
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, chartOptions.series);
|
3770
|
+
}
|
3771
|
+
|
3719
3772
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
3720
3773
|
}
|
3721
3774
|
|
@@ -4930,9 +4983,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
4930
4983
|
//subopts.rendererOptions = { tableOptions: { showTotals: false } };
|
4931
4984
|
}
|
4932
4985
|
|
4933
|
-
if (is_graph)
|
4986
|
+
if (is_graph) {
|
4934
4987
|
subopts.renderer = pivotOptions.chartRender;
|
4935
|
-
|
4988
|
+
subopts.rendererOptions.chartOptions.label.useUnitAbbreviation = subopts.rendererOptions.useUnitAbbreviation;
|
4989
|
+
} else {
|
4936
4990
|
var functionToReturn = function (pivotData, opt) {
|
4937
4991
|
opt.widgetId = widget.id;
|
4938
4992
|
return $.pivotUtilities.subtotal_renderers(pivotData, opt, widget.chart_type);
|
@@ -5933,22 +5987,28 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
5933
5987
|
if (fnToReturn == null)
|
5934
5988
|
fnToReturn = highchartsRenderer.ptRenderBasicLine;
|
5935
5989
|
|
5936
|
-
|
5990
|
+
return function(pivotData, opt) {
|
5937
5991
|
if (drillDownListFunc) {
|
5938
5992
|
if (!opt) {
|
5939
5993
|
opt = {};
|
5940
5994
|
}
|
5941
|
-
opt.
|
5942
|
-
|
5943
|
-
|
5944
|
-
|
5995
|
+
if (opt.isUpdatingPointStylesOnClick) {
|
5996
|
+
opt.drillDownListFunc = (e) => {
|
5997
|
+
seriesPointStylesHelper.setSeriesPointStylesOnClick(e);
|
5998
|
+
highchartsRenderer.modifyEventPointForDrilldown(e);
|
5999
|
+
drillDownListFunc(e);
|
6000
|
+
};
|
6001
|
+
} else {
|
6002
|
+
opt.drillDownListFunc = (e) => {
|
6003
|
+
highchartsRenderer.modifyEventPointForDrilldown(e);
|
6004
|
+
drillDownListFunc(e);
|
6005
|
+
};
|
6006
|
+
}
|
5945
6007
|
} else {
|
5946
6008
|
opt.drillDownListFunc = null;
|
5947
6009
|
}
|
5948
|
-
return fnToReturn(pivotData, opt, drilldownFunc, newChartType);
|
6010
|
+
return fnToReturn(pivotData, opt, drilldownFunc, newChartType);
|
5949
6011
|
};
|
5950
|
-
|
5951
|
-
return fnunctionToReturn;
|
5952
6012
|
};
|
5953
6013
|
|
5954
6014
|
highchartsRenderer.getAggregatorFunctionById = function (aggrigatorId) {
|
@@ -0,0 +1,43 @@
|
|
1
|
+
function getSeriesPointStyles(isSelected) {
|
2
|
+
return {
|
3
|
+
opacity: isSelected ? 1 : 0.1,
|
4
|
+
marker: {
|
5
|
+
enabled: true,
|
6
|
+
radius: isSelected ? 8 : 3,
|
7
|
+
},
|
8
|
+
dataLabels: {
|
9
|
+
style: {
|
10
|
+
fontWeight: isSelected ? "bold" : "normal",
|
11
|
+
},
|
12
|
+
},
|
13
|
+
};
|
14
|
+
}
|
15
|
+
|
16
|
+
function setSeriesPointStylesOnClick(e) {
|
17
|
+
const selectedPoint = e.point;
|
18
|
+
e.point.series.chart.series.forEach((series) =>
|
19
|
+
series.points.forEach((point) => {
|
20
|
+
point.update(getSeriesPointStyles(point === selectedPoint), false);
|
21
|
+
})
|
22
|
+
);
|
23
|
+
e.point.series.chart.redraw();
|
24
|
+
}
|
25
|
+
|
26
|
+
function setInitialPointStyles(opts, series) {
|
27
|
+
series.forEach((series) => {
|
28
|
+
if (Array.isArray(series.data)) {
|
29
|
+
series.data.forEach((item) => {
|
30
|
+
const isSelected =
|
31
|
+
item && opts.selectedPoint &&
|
32
|
+
item.initialName === opts.selectedPoint.initialName &&
|
33
|
+
item.y === opts.selectedPoint.y;
|
34
|
+
item = Object.assign(item, getSeriesPointStyles(isSelected));
|
35
|
+
});
|
36
|
+
}
|
37
|
+
});
|
38
|
+
}
|
39
|
+
|
40
|
+
module.exports = {
|
41
|
+
setSeriesPointStylesOnClick,
|
42
|
+
setInitialPointStyles,
|
43
|
+
};
|
@@ -0,0 +1,114 @@
|
|
1
|
+
import seriesPointStylesHelper from '../src/seriesPointStyles-helper';
|
2
|
+
|
3
|
+
describe('setSeriesPointStylesOnClick', () => {
|
4
|
+
it('should update point styles on click and update other points to non-selected styles on click', () => {
|
5
|
+
const selectedPoint = {
|
6
|
+
update: jest.fn(),
|
7
|
+
series: {
|
8
|
+
chart: {
|
9
|
+
series: [{ points: [] }],
|
10
|
+
redraw: jest.fn()
|
11
|
+
}
|
12
|
+
}
|
13
|
+
};
|
14
|
+
|
15
|
+
const otherPoint = {
|
16
|
+
update: jest.fn(),
|
17
|
+
series: selectedPoint.series
|
18
|
+
};
|
19
|
+
|
20
|
+
selectedPoint.series.chart.series[0].points.push(selectedPoint, otherPoint);
|
21
|
+
|
22
|
+
const mockEvent = { point: selectedPoint };
|
23
|
+
|
24
|
+
seriesPointStylesHelper.setSeriesPointStylesOnClick(mockEvent);
|
25
|
+
|
26
|
+
expect(selectedPoint.update).toHaveBeenCalledWith(
|
27
|
+
{
|
28
|
+
opacity: 1,
|
29
|
+
marker: {
|
30
|
+
enabled: true,
|
31
|
+
radius: 8
|
32
|
+
},
|
33
|
+
dataLabels: {
|
34
|
+
style: {
|
35
|
+
fontWeight: 'bold'
|
36
|
+
}
|
37
|
+
}
|
38
|
+
},
|
39
|
+
false
|
40
|
+
);
|
41
|
+
expect(otherPoint.update).toHaveBeenCalledWith(
|
42
|
+
{
|
43
|
+
opacity: 0.1,
|
44
|
+
marker: {
|
45
|
+
enabled: true,
|
46
|
+
radius: 3
|
47
|
+
},
|
48
|
+
dataLabels: {
|
49
|
+
style: {
|
50
|
+
fontWeight: 'normal'
|
51
|
+
}
|
52
|
+
}
|
53
|
+
},
|
54
|
+
false
|
55
|
+
);
|
56
|
+
expect(selectedPoint.series.chart.redraw).toHaveBeenCalled();
|
57
|
+
});
|
58
|
+
});
|
59
|
+
|
60
|
+
describe('setInitialPointStyles', () => {
|
61
|
+
it('should set initial point styles based on selection', () => {
|
62
|
+
const opts = { selectedPoint: { initialName: 'point1', y: 10 } };
|
63
|
+
const mockPoint = { initialName: 'point1', y: 10 };
|
64
|
+
const mockSeries = { data: [mockPoint] };
|
65
|
+
const series = [mockSeries];
|
66
|
+
|
67
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, series);
|
68
|
+
|
69
|
+
expect(mockPoint).toEqual(
|
70
|
+
Object.assign(
|
71
|
+
mockPoint,
|
72
|
+
{
|
73
|
+
opacity: 1,
|
74
|
+
marker: {
|
75
|
+
enabled: true,
|
76
|
+
radius: 8
|
77
|
+
},
|
78
|
+
dataLabels: {
|
79
|
+
style: {
|
80
|
+
fontWeight: 'bold'
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}
|
84
|
+
)
|
85
|
+
);
|
86
|
+
});
|
87
|
+
|
88
|
+
it('should not set styles if point is not selected', () => {
|
89
|
+
const opts = { selectedPoint: { initialName: 'point1', y: 10 } };
|
90
|
+
const mockPoint = { initialName: 'point2', y: 20 };
|
91
|
+
const mockSeries = { data: [mockPoint] };
|
92
|
+
const series = [mockSeries];
|
93
|
+
|
94
|
+
seriesPointStylesHelper.setInitialPointStyles(opts, series);
|
95
|
+
|
96
|
+
expect(mockPoint).toEqual(
|
97
|
+
Object.assign(
|
98
|
+
mockPoint,
|
99
|
+
{
|
100
|
+
opacity: 0.1,
|
101
|
+
marker: {
|
102
|
+
enabled: true,
|
103
|
+
radius: 3
|
104
|
+
},
|
105
|
+
dataLabels: {
|
106
|
+
style: {
|
107
|
+
fontWeight: 'normal'
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
)
|
112
|
+
);
|
113
|
+
});
|
114
|
+
});
|