@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datarailsshared/dr_renderer",
3
- "version": "1.2.436",
3
+ "version": "1.2.438",
4
4
  "description": "DataRails charts and tables renderer",
5
5
  "keywords": [
6
6
  "datarails",
@@ -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
- var func = function () {
545
- var value = parseFloat(this.value);
546
- if (pivotData) {
547
- try {
548
- var aggr = pivotData.getAggregator([], []);
549
- return $.pivotUtilities.getFormattedNumber(value, aggr, opts, true);
550
- } catch (err) {
551
- // do nothing
552
- }
553
- }
554
- return $.pivotUtilities.getFormattedNumber(value, null, opts);
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
- const formattedValue = is_drill_down_pie || labelOptions.show_value ? $.pivotUtilities.getFormattedNumber(value, aggr, opts, true) : '';
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
- return $.pivotUtilities.getFormattedNumber(value, null, opts).replace(/\u00A0/g, " ");
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
- else {
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
- var fnunctionToReturn = function (pivotData, opt) {
5990
+ return function(pivotData, opt) {
5937
5991
  if (drillDownListFunc) {
5938
5992
  if (!opt) {
5939
5993
  opt = {};
5940
5994
  }
5941
- opt.drillDownListFunc = (e) => {
5942
- highchartsRenderer.modifyEventPointForDrilldown(e);
5943
- drillDownListFunc(e);
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); //todo pass drilldownFunc
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
+ };
@@ -1,6 +1,7 @@
1
1
  import drRendererHelpers from '../src/dr-renderer-helpers';
2
2
 
3
3
  describe('dr-renderer-helpers', () => {
4
+
4
5
  describe('backendSortingKeysAreNotEmpty', () => {
5
6
  it('should return true if keys are not empty', () => {
6
7
  const keys = {
@@ -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
+ });