@datarailsshared/dr_renderer 1.3.59 → 1.4.5

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.
@@ -1,9 +1,19 @@
1
1
  const helpers = require('./dr-renderer-helpers');
2
2
  const { DrGaugeChart, GAUGE_OPTIONS_DEFAULT } = require('./charts/dr_gauge_chart');
3
3
  const { DrDonutChart } = require('./charts/dr_donut_chart');
4
- const seriesPointStylesHelper= require('./seriesPointStyles-helper');
4
+ const seriesPointStylesHelper = require('./seriesPointStyles-helper');
5
5
  const smartQueriesHelper = require('./smart_queries_helper');
6
- const {DrGaugeCategoriesSummaryChart} = require("./charts/dr_gauge_categories_summary_chart");
6
+ const valueFormatter = require('./value.formatter');
7
+ const { DrGaugeCategoriesSummaryChart } = require("./charts/dr_gauge_categories_summary_chart");
8
+ const {
9
+ TooMuchDataError,
10
+ NoDataError,
11
+ BaseRendererError,
12
+ DataConflictError,
13
+ GaugeConfigurationError,
14
+ GenericRenderingError,
15
+ GenericComputationalError
16
+ } = require('./errors');
7
17
 
8
18
  const mobileBrowserRegex = new RegExp([
9
19
  '(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
@@ -61,8 +71,10 @@ const CHART_TYPES = {
61
71
  GAUGE_SOLID_CHART: 'gauge-solid-chart',
62
72
  GAUGE_CHART: 'gauge-chart',
63
73
  GAUGE_CHART_ENHANCED: 'gauge-chart-enhanced',
74
+ GAUGE_CHART_DYNAMIC_GOAL: 'gauge-chart-dynamic-goal',
64
75
  GAUGE_CHART_CATEGORIES_SUMMARY: 'gauge-chart-categories-summary',
65
76
  KPI_WIDGET: 'kpi-widget',
77
+ SMART_KPI: 'smart-kpi',
66
78
  TEXT_WIDGET: 'text-widget',
67
79
  WATERFALL_BREAKDOWN: 'waterfall-chart-breakdown',
68
80
  WATERFALL_WALKTHROUGH: 'waterfall-chart-walkthrough',
@@ -155,13 +167,7 @@ const CHART_AXIS_DEFAULT_LABEL = 'Axis (Category)';
155
167
 
156
168
  const CHART_LEGEND_DEFAULT_LABEL = 'Legend (Series)';
157
169
 
158
- const FEATURES = {
159
- ENABLE_NEW_WIDGET_VALUE_FORMATTING: 'enable_new_widget_value_formatting',
160
- FORMAT_DATES_AS_OTHER_AXIS_TYPES: 'format_dates_as_other_axis_types',
161
- MULTIPLE_DIMENSION_TAGS: 'multiple_dimension_tags',
162
- USE_NEW_SCENARIO_TAG: 'use_new_scenario_tag',
163
- ENABLE_SERVER_WIDGET_DATA_SORTING: 'enable_server_widget_data_sorting',
164
- }
170
+ const FEATURES = helpers.FEATURES;
165
171
 
166
172
  const TICKS_COUNT = 5;
167
173
 
@@ -208,6 +214,34 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
208
214
  highchartsRenderer.enabledNewWidgetValueFormatting = false;
209
215
  let disableAnimation = false;
210
216
 
217
+ const _handleComputationalError = (err, onlyOptions) => {
218
+ if (err instanceof BaseRendererError) {
219
+ throw err;
220
+ }
221
+
222
+ const genericError = new GenericComputationalError();
223
+ if (onlyOptions) {
224
+ console.error(genericError.title);
225
+ return {};
226
+ } else {
227
+ throw genericError;
228
+ }
229
+ };
230
+
231
+ const _handleRenderingError = (err, onlyOptions) => {
232
+ if (err instanceof BaseRendererError) {
233
+ throw err;
234
+ }
235
+
236
+ const genericError = new GenericRenderingError();
237
+ console.error(genericError.title);
238
+ if (onlyOptions) {
239
+ return {};
240
+ } else {
241
+ throw genericError;
242
+ }
243
+ }
244
+
211
245
  highchartsRenderer.hasFeature = function(featureFlagKey) {
212
246
  return lodash.includes(lodash.get(document, 'ReportHippo.user.features', []), featureFlagKey);
213
247
  }
@@ -404,7 +438,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
404
438
 
405
439
  const isChartTypeSupportedForSmartQuery = (type) => {
406
440
  if (!type) return null;
407
- return [
441
+ return lodash.includes([
408
442
  'line',
409
443
  'line-chart-forecast',
410
444
  'spline',
@@ -414,7 +448,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
414
448
  highchartsRenderer.CHART_TYPES.LINE_CHART_SMOOTH,
415
449
  highchartsRenderer.CHART_TYPES.AREA_CHART,
416
450
  highchartsRenderer.CHART_TYPES.AREA_CHART_SMOOTH,
417
- ].includes(type);
451
+ ], type);
418
452
  };
419
453
 
420
454
 
@@ -578,7 +612,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
578
612
  };
579
613
 
580
614
  //TODO No totals formatts
581
- highchartsRenderer.defaultValueLabelsFormatter = function (pivotData, opts) {
615
+ highchartsRenderer.defaultValueLabelsFormatter = function (pivotData, opts, forcePercentage = false) {
616
+ const deltaColumn = lodash.get(opts, 'chartOptions.delta_column', null);
617
+ const isPercentage = deltaColumn && deltaColumn.is_percentage && deltaColumn.only_variant || forcePercentage;
618
+
619
+ if (isPercentage) {
620
+ return highchartsRenderer.persantageValueLabelsFormatter(pivotData, opts);
621
+ }
622
+
582
623
  const labelOptions = lodash.get(opts.chartOptions, 'label') || lodash.get(opts.chartOptions, 'label_pie');
583
624
 
584
625
  return function () {
@@ -659,12 +700,19 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
659
700
 
660
701
  var func = function () {
661
702
  var value = parseFloat(this.y);
703
+
662
704
  if (pivotData) {
705
+ const isChartWithMultiValues = highchartsRenderer.isChartWithMultiValues(pivotData);
663
706
  let series_name = highchartsRenderer.getSeriesNameInFormatterContext(this);
664
707
  var rows = series_name.split(highchartsRenderer.delimer);
708
+ var cols = highchartsRenderer.getColsInFormatterContext(this);
665
709
 
666
- if (is_drill_down_pie && highchartsRenderer.selfStartsWith(series_name, "Series ")) {
710
+ if (is_drill_down_pie && (highchartsRenderer.selfStartsWith(series_name, "Series ") || isChartWithMultiValues)) {
667
711
  rows = [];
712
+
713
+ if (isChartWithMultiValues) {
714
+ cols = pivotData.getColKeys()[0];
715
+ }
668
716
  }
669
717
 
670
718
  if (pivotData.rowAttrs.length == 0
@@ -673,8 +721,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
673
721
  rows = [];
674
722
  }
675
723
 
676
- var cols = highchartsRenderer.getColsInFormatterContext(this);
677
- if (typeof (cols) == 'object' && cols.name) {
724
+ if (typeof (cols) == 'object' && cols && cols.name) {
678
725
  cols = cols.name;
679
726
  }
680
727
 
@@ -698,7 +745,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
698
745
  try {
699
746
  const percentageArray = [];
700
747
 
701
- if (is_drill_down_pie && !highchartsRenderer.selfStartsWith(series_name, "Series ")) {
748
+ if (is_drill_down_pie && !highchartsRenderer.selfStartsWith(series_name, "Series ") && !isChartWithMultiValues) {
702
749
  let temp = cols;
703
750
  cols = rows;
704
751
  rows = temp;
@@ -819,19 +866,27 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
819
866
  const isTrendSeries = this.series.options.className === SERIES_CLASSNAMES.TREND_SERIES;
820
867
 
821
868
  var y = parseFloat(this.y);
869
+
822
870
  if (pivotData) {
871
+ const isChartWithMultiValues = highchartsRenderer.isChartWithMultiValues(pivotData);
823
872
  let series_name = highchartsRenderer.getSeriesNameInFormatterContext(this);
824
873
  var rows = series_name.split(highchartsRenderer.delimer);
825
- if (is_drill_down_pie && highchartsRenderer.selfStartsWith(series_name,"Series ")) {
874
+ var cols = highchartsRenderer.getColsInFormatterContext(this);
875
+
876
+ if (is_drill_down_pie && (highchartsRenderer.selfStartsWith(series_name,"Series ") || isChartWithMultiValues)) {
826
877
  rows = [];
878
+
879
+ if (isChartWithMultiValues) {
880
+ cols = pivotData.getColKeys()[0];
881
+ }
827
882
  }
883
+
828
884
  if (pivotData.rowAttrs.length == 0
829
885
  || this.series.options.className === 'totalSeries'
830
886
  || isTrendSeries) {
831
887
  rows = [];
832
888
  }
833
889
 
834
- var cols = highchartsRenderer.getColsInFormatterContext(this);
835
890
  if (lodash.isNil(cols) && is_drill_down_pie) {
836
891
  cols = this.name;
837
892
  }
@@ -846,8 +901,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
846
901
  if (variant_name && rows && rows[0] && variant_name == rows[0]) {
847
902
  rows[0] = variant_name_default_name;
848
903
  }
904
+
849
905
  try {
850
- if (is_drill_down_pie && !highchartsRenderer.selfStartsWith(series_name,"Series ")) {
906
+ if (is_drill_down_pie && !highchartsRenderer.selfStartsWith(series_name,"Series ") && !isChartWithMultiValues) {
851
907
  let temp = cols;
852
908
  cols = rows;
853
909
  rows = temp;
@@ -886,11 +942,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
886
942
  }
887
943
 
888
944
  var aggr = pivotData.getAggregator(rows, cols);
889
-
945
+
890
946
  let formatted_value_to_return = $.pivotUtilities.getFormattedNumber(y, null, opts);
891
- if (aggr.value() || isWaterfallBreakdown) {
947
+ if (aggr.value() || isWaterfallBreakdown || isChartWithMultiValues) {
892
948
  formatted_value_to_return = $.pivotUtilities.getFormattedNumber(
893
- isWaterfallBreakdown || isWaterfallWalkthrough || isTrendSeries ? y : aggr.value(), aggr, opts
949
+ isChartWithMultiValues || isWaterfallBreakdown || isWaterfallWalkthrough || isTrendSeries ? y : aggr.value(), aggr, opts
894
950
  );
895
951
  }
896
952
 
@@ -1043,26 +1099,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1043
1099
  return forExport;
1044
1100
  };
1045
1101
 
1046
- highchartsRenderer.getNoDataResult = function (to_match) {
1047
- var temp_result = $('<div class="noData-box"></div>');
1048
- var resultsArr = [];
1049
-
1050
- if (to_match) {
1051
- resultsArr.push(highchartsRenderer.getWidgetPlaceholder(highchartsRenderer.widgetPlaceholders.tooMuchData));
1052
- } else {
1053
- resultsArr.push(highchartsRenderer.getWidgetPlaceholder(highchartsRenderer.widgetPlaceholders.nodata));
1054
- }
1055
-
1056
- temp_result.html(resultsArr);
1057
-
1058
- return temp_result;
1059
- };
1060
-
1061
- highchartsRenderer.getWidgetPlaceholder = function(placeholder) {
1062
- const defaultPlaceholder = $('<div class="noData"><i class="noData-image"></i> no data</div>');
1063
- return $.pivotUtilities.errorHandling.getErrorPlaceholder(placeholder) || defaultPlaceholder;
1064
- }
1065
-
1066
1102
  highchartsRenderer.ptCreateElementAndDraw = function (chartOptions, opts) {
1067
1103
  chartOptions = lodash.merge(highchartsRenderer.getCommonChartOptions(opts.chartOptions), chartOptions);
1068
1104
 
@@ -1163,13 +1199,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1163
1199
  }
1164
1200
 
1165
1201
  if (!seriesDataLength && !chartOptions.onlyText) {
1166
- result = highchartsRenderer.getNoDataResult();
1167
- opts.error_has_occurred = true;
1168
- opts.error_params = highchartsRenderer.widgetPlaceholders.nodata;
1202
+ const noDataError = new NoDataError();
1203
+ console.error(noDataError.title);
1204
+ throw noDataError;
1169
1205
  } else if (!chartOptions.onlyText && chartOptions.series && toMatch) {
1170
- result = highchartsRenderer.getNoDataResult(toMatch);
1171
- opts.error_has_occurred = true;
1172
- opts.error_params = highchartsRenderer.widgetPlaceholders.tooMuchData;
1206
+ const tooMuchDataError = new TooMuchDataError();
1207
+ console.error(tooMuchDataError.title);
1208
+ throw tooMuchDataError;
1173
1209
  } else {
1174
1210
  chartOptions = highchartsRenderer.updateChartOptions(chartOptions, opts);
1175
1211
  chartOptions = highchartsRenderer.updateChartOptions(chartOptions, {credits: {enabled: false}});
@@ -1237,6 +1273,19 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1237
1273
  var chart_series = [],
1238
1274
  row_n_keys = pivotData.getRowKeys(),
1239
1275
  col_n_keys = pivotData.getColKeys();
1276
+ const chartType = chartOptions && chartOptions.chart && chartOptions.chart.type ? chartOptions.chart.type : null;
1277
+ const isCombiLineForecastChart = opts.chartOptions.isSmartQueriesEnabled;
1278
+ const indexOfScenarioCycleFilter = lodash.findIndex(pivotData.rowAttrs, (rowAttr) => rowAttr === 'Scenario Cycle');
1279
+
1280
+ if (isChartTypeSupportedForSmartQuery(chartType) && pivotData.rowAttrs?.length < row_n_keys?.[0]?.length && indexOfScenarioCycleFilter > -1) {
1281
+ const indexOfScenarioFilter = row_n_keys[0].length - 1;
1282
+ for (let i = 0; i < row_n_keys?.length; i++) {
1283
+ row_n_keys[i].splice(indexOfScenarioFilter, 1);
1284
+ }
1285
+ row_n_keys = Array.from(
1286
+ new Set(row_n_keys.map(JSON.stringify))
1287
+ ).map(JSON.parse);
1288
+ }
1240
1289
 
1241
1290
  var has_delta = false;
1242
1291
  if (additionOptions && lodash.has(additionOptions, "delta_column.field") && additionOptions.delta_column.field == "series") {
@@ -1320,7 +1369,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1320
1369
  }
1321
1370
 
1322
1371
  if (has_delta && additionOptions && ob.name == additionOptions.delta_column.name) {
1323
- ob = highchartsRenderer.getVariantSeries(ob, additionOptions.delta_column);
1372
+ ob = highchartsRenderer.getVariantSeries(ob, additionOptions.delta_column, pivotData);
1324
1373
  variat_serias = ob;
1325
1374
  }
1326
1375
 
@@ -1417,21 +1466,23 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1417
1466
  chart_series = chart_series.concat(trendSerieses);
1418
1467
 
1419
1468
  highchartsRenderer.moveSeriesToSecondYAxisIfNeeded(chart_series, pivotData, chartOptions, additionOptions, opts, opts.total && opts.totalSeriesSettings && opts.totalSeriesSettings.secondaryAxis);
1420
-
1421
- const chartType = chartOptions && chartOptions.chart && chartOptions.chart.type ? chartOptions.chart.type : null;
1422
1469
  const smartQuerySeries = isChartTypeSupportedForSmartQuery(chartType)
1423
- ? smartQueriesHelper.createSingleDataSeriesForForecast(chart_series, opts.chartOptions, pivotData)
1470
+ ? smartQueriesHelper.createSingleDataSeriesForForecast(chart_series, opts.chartOptions, pivotData, isCombiLineForecastChart)
1424
1471
  : null;
1425
1472
 
1426
1473
  if (smartQuerySeries) {
1427
1474
  if (chart_series.length > 1) {
1428
- lodash.remove(chart_series, s =>
1429
- (s.name && lodash.includes(s.name, 'SQ_Actuals')) || s.name === 'Forecast'
1430
- );
1475
+ if (isCombiLineForecastChart) {
1476
+ chart_series = smartQuerySeries;
1477
+ } else {
1478
+ lodash.remove(chart_series, s =>
1479
+ (s.name && lodash.includes(s.name, 'SQ_Actuals')) || s.name === 'Forecast'
1480
+ );
1481
+ chart_series.push(smartQuerySeries);
1482
+ }
1431
1483
  } else {
1432
- chart_series = []
1484
+ chart_series = [smartQuerySeries];
1433
1485
  }
1434
- chart_series.push(smartQuerySeries);
1435
1486
  }
1436
1487
 
1437
1488
  return chart_series;
@@ -1526,7 +1577,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1526
1577
  }
1527
1578
 
1528
1579
  if (has_delta && row_n_value && row_n_value.some(val => val === additionOptions.delta_column.name)) {
1529
- ob = highchartsRenderer.getVariantSeries(ob, additionOptions.delta_column);
1580
+ ob = highchartsRenderer.getVariantSeries(ob, additionOptions.delta_column, pivotData);
1530
1581
  variat_serias = ob;
1531
1582
  }
1532
1583
 
@@ -1848,7 +1899,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1848
1899
  }
1849
1900
  }
1850
1901
 
1851
- highchartsRenderer.getVariantSeries = function (series, delta_column_options) {
1902
+ highchartsRenderer.getVariantSeries = function (series, delta_column_options, pivotData) {
1852
1903
  const varianceColor = delta_column_options.color || highchartsRenderer.variance_color || Highcharts.getOptions().colors[7];
1853
1904
  series.name = delta_column_options.name.replace('_', '');
1854
1905
  series.initialName = series.name;
@@ -1875,6 +1926,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1875
1926
  }
1876
1927
  }
1877
1928
 
1929
+ if (delta_column_options.is_percentage) {
1930
+ lodash.forEach(series.data, function (it, index) {
1931
+ if (pivotData.rowKeys && pivotData.rowKeys.length && pivotData.colKeys && pivotData.colKeys.length) {
1932
+ const agg = pivotData.getAggregator([pivotData.rowKeys[0]], pivotData.colKeys[index]);
1933
+ if (agg && valueFormatter.isAbsoluteValue(delta_column_options.formula)) {
1934
+ const baseValue = pivotData.getAggregator([pivotData.rowKeys[0]], pivotData.colKeys[index]).value();
1935
+ it.y = valueFormatter.getRelatedValue(it.y, baseValue);
1936
+ }
1937
+ }
1938
+ });
1939
+ }
1940
+
1878
1941
  if (delta_column_options.chart == 'line') {
1879
1942
  series.type = 'line';
1880
1943
  series.lineColor = varianceColor;
@@ -1921,7 +1984,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1921
1984
  } else if (delta_column_options.chart == 'spline') {
1922
1985
  series.color = varianceColor;
1923
1986
  series.type = 'spline'
1924
- }
1987
+ }
1925
1988
  return series;
1926
1989
  }
1927
1990
 
@@ -1983,14 +2046,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1983
2046
  };
1984
2047
 
1985
2048
  highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart = function (pivotData, chartOptions, additionOptions, opts) {
1986
-
1987
2049
  var pie_drill_down_series = [],
1988
2050
  row_n_keys = pivotData.getRowKeys(),
1989
2051
  col_n_keys = pivotData.getColKeys();
1990
2052
 
1991
- var num_cols = col_n_keys.length;
1992
- var num_rows = row_n_keys.length;
1993
-
1994
2053
  const othersName = highchartsRenderer.getOthersName(opts);
1995
2054
 
1996
2055
  lodash.forEach(col_n_keys, function (col_n_value) {
@@ -2011,17 +2070,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2011
2070
  lodash.forEach(row_n_keys, function (row_n_value) {
2012
2071
  var agg = pivotData.getAggregator(row_n_value, col_n_value);
2013
2072
  var val = agg.value();
2014
- if (val != null && row_n_value[0]) {
2073
+ if (val != null && row_n_value.length) {
2015
2074
  if ($.isNumeric(val)) {
2016
2075
  val = parseFloat(val);
2017
- // if (val > -1 && val < 1) {
2018
- // val = parseFloat(val.toPrecision(4));
2019
- // } else {
2020
- // val = parseFloat(val.toFixed(2));
2021
- // }
2022
2076
  }
2023
2077
 
2024
- const row_initial_name = row_n_value[0] === highchartsRenderer.DR_OTHERS_KEY ? othersName : row_n_value[0];
2078
+ const row_initial_name = row_n_value[0] === highchartsRenderer.DR_OTHERS_KEY ? othersName : row_n_value;
2025
2079
  const row_name = highchartsRenderer.getFormattedRowKey(row_initial_name, pivotData);
2026
2080
  col_ob.data.push({
2027
2081
  name: row_name,
@@ -2030,6 +2084,19 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2030
2084
  });
2031
2085
  }
2032
2086
  });
2087
+
2088
+ col_ob.data = Object.values(
2089
+ lodash.reduce(col_ob.data, (acc, item) => {
2090
+ const key = Array.isArray(item.name) ? item.name[0] : item.name;
2091
+ const name = key ? [key] : [col_n];
2092
+ if (!acc[key]) {
2093
+ acc[key] = { name: name, initialName: name, y: 0 };
2094
+ }
2095
+ acc[key].y += item.y;
2096
+ return acc;
2097
+ }, {})
2098
+ );
2099
+
2033
2100
  if (col_ob.data.length) {
2034
2101
  pie_drill_down_series.push(col_ob);
2035
2102
  }
@@ -2081,9 +2148,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2081
2148
 
2082
2149
  highchartsRenderer.addSecondYAxis = function (pivotData, chartOptions, additionOptions, opts) {
2083
2150
  const varianceColor = (additionOptions && additionOptions.delta_column.color) || (highchartsRenderer && highchartsRenderer.variance_color) || Highcharts.getOptions().colors[7];
2084
- let labels_formatter = opts.comboOptions.secondaryAxisSettings.is_percentage ?
2085
- highchartsRenderer.persantageValueLabelsFormatter(pivotData, opts) :
2086
- highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts);
2151
+ const forcePercentage = lodash.get(opts, 'comboOptions.secondaryAxisSettings.is_percentage', false) || lodash.get(additionOptions, 'delta_column.is_percentage', false);
2087
2152
 
2088
2153
  chartOptions.yAxis = [chartOptions.yAxis];
2089
2154
  chartOptions.yAxis[1] = {
@@ -2096,7 +2161,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2096
2161
  }
2097
2162
  },
2098
2163
  labels: {
2099
- formatter: labels_formatter,
2164
+ formatter: highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts, forcePercentage),
2100
2165
  style: {
2101
2166
  color: varianceColor
2102
2167
  }
@@ -2301,6 +2366,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2301
2366
  return new DrGaugeChart(pivotData, opts).render();
2302
2367
  };
2303
2368
 
2369
+ highchartsRenderer.ptRenderGaugeDynamicGoal = (pivotData, opts) => {
2370
+ return new DrGaugeChart(pivotData, opts, true).render();
2371
+ };
2372
+
2304
2373
  highchartsRenderer.ptRenderGaugeCategoriesSummary = (pivotData, opts) => {
2305
2374
  return new DrGaugeCategoriesSummaryChart(pivotData, opts).render();
2306
2375
  };
@@ -2488,7 +2557,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2488
2557
  var chartOptions = {};
2489
2558
  var rowAttrs = pivotData.rowAttrs;
2490
2559
  var colAttrs = pivotData.colAttrs;
2491
-
2492
2560
  var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('line-chart');
2493
2561
 
2494
2562
  chartOptions.chart = {
@@ -3191,95 +3259,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3191
3259
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
3192
3260
  };
3193
3261
 
3194
- highchartsRenderer.ptRenderColumnWithDrilldown = function (pivotData, opts, drilldownFunc) {
3195
- var chartOptions = {};
3196
- var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('column-chart-drilldown');
3197
-
3198
-
3199
- chartOptions.chart = {
3200
- type: 'column',
3201
- events: {
3202
- 'drilldown': function (e) {
3203
- highchartsRenderer.modifyEventPointForDrilldown(e);
3204
- if (drilldownFunc)
3205
- drilldownFunc(e, this, "drilldown");
3206
-
3207
- },
3208
- 'drillup': function (e) {
3209
- if (drilldownFunc)
3210
- drilldownFunc(e, this, "drillup");
3211
-
3212
- }
3213
-
3214
- }
3215
- };
3216
- if (disableAnimation) {
3217
- chartOptions.chart.animation = false;
3218
- }
3219
- highchartsRenderer.setTitleAndSubTitle(chartOptions, opts, additionOptions);
3220
-
3221
- chartOptions.yAxis = {
3222
- min: null,
3223
- max: null,
3224
- title: {
3225
- text: additionOptions && additionOptions.axisY ? additionOptions.axisY.name : ''
3226
- },
3227
- labels: {
3228
- formatter: highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts)
3229
- }
3230
- };
3231
- if (additionOptions) {
3232
- highchartsRenderer.setYAxisMinMax(chartOptions.yAxis, additionOptions.axisY);
3233
- }
3234
-
3235
- chartOptions.legend = {enabled: false};
3236
-
3237
- chartOptions.plotOptions = {
3238
- series: {
3239
- animation: !disableAnimation,
3240
- borderWidth: 0,
3241
- cropThreshold: 1000,
3242
- dataLabels: {
3243
- allowOverlap: additionOptions && additionOptions.label ? additionOptions.label.overlap : false,
3244
- enabled: additionOptions && additionOptions.label ? additionOptions.label.show : true,
3245
- formatter: highchartsRenderer.defaultDataLabelFormatter(pivotData, opts),
3246
- style: highchartsRenderer.getDataLabelsStyle(additionOptions)
3247
- }
3248
- },
3249
- column: {
3250
- borderRadius: 1,
3251
- }
3252
- };
3253
-
3254
- chartOptions.tooltip = {
3255
- formatter: function () {
3256
- var y = parseFloat(this.y);
3257
- var agg = pivotData.getAggregator([], []);
3258
- if (agg) {
3259
- return '<b>' + this.point.name + '</b>: ' + agg.format(y, true);
3260
- } else {
3261
- return '<b>' + this.point.name + '</b>: ' + y.toLocaleString();
3262
- }
3263
- },
3264
- };
3265
-
3266
- chartOptions.xAxis = {
3267
- type: 'category',
3268
- };
3269
- chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
3270
- chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData, chartOptions, additionOptions, opts);
3271
- //if (drilldownFunc)
3272
- // chartOptions.drilldown = {}
3273
- //else
3274
- chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData, chartOptions, additionOptions, opts);
3275
-
3276
- highchartsRenderer.handleGridLines(additionOptions, chartOptions)
3277
-
3278
- helpers.disableLegendInteractionIfRequired(chartOptions, additionOptions);
3279
-
3280
- return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
3281
- };
3282
-
3283
3262
  highchartsRenderer.ptRenderBar = function (pivotData, opts) {
3284
3263
  var chartOptions = {};
3285
3264
  var rowAttrs = pivotData.rowAttrs;
@@ -3368,6 +3347,37 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3368
3347
  var rowAttrs = pivotData.rowAttrs;
3369
3348
  var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('bar-chart-stacked');
3370
3349
 
3350
+ const isVarianceOnly = lodash.get(additionOptions, 'delta_column.only_variant', false);
3351
+ const labelStyle = lodash.merge(
3352
+ LABEL_DEFAULT_OPTIONS.style,
3353
+ { color: lodash.get(additionOptions, `${ highchartsRenderer.getLabelOptionKey(additionOptions) }.font_color`) || LABEL_DEFAULT_OPTIONS.color },
3354
+ highchartsRenderer.getDataLabelsStyle(additionOptions)
3355
+ );
3356
+
3357
+ const stackLabelsFormatter = function() {
3358
+ return function() {
3359
+ if (this.total) {
3360
+ var total = parseFloat(this.total);
3361
+ var agg = pivotData.getAggregator([], []);
3362
+ if (agg) {
3363
+ return agg.format(total, true);
3364
+ } else {
3365
+ return total.toLocaleString();
3366
+ }
3367
+ }
3368
+ return '';
3369
+ }
3370
+ }
3371
+
3372
+ const dataLabelsFormatter = function() {
3373
+ return function() {
3374
+ const deltaColumnName = lodash.get(opts, 'chartOptions.delta_column.name', '');
3375
+ const currentRowName = this.series && this.series.name ? String(this.series.name) : '';
3376
+ const isVariance = currentRowName.replace('_', '').toLowerCase() === deltaColumnName.replace('_', '').toLowerCase();
3377
+ return isVariance ? highchartsRenderer.defaultDataLabelFormatter(pivotData, opts).call(this) : '';
3378
+ }
3379
+ }
3380
+
3371
3381
  chartOptions.chart = {
3372
3382
  type: 'bar',
3373
3383
  zoomType: 'x'
@@ -3383,27 +3393,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3383
3393
  text: additionOptions && additionOptions.axisY ? additionOptions.axisY.name : ''
3384
3394
  },
3385
3395
  stackLabels: {
3386
- enabled: additionOptions && additionOptions.label ? additionOptions.label.show : true,
3387
- formatter: function () {
3388
- if (this.total) {
3389
- var total = parseFloat(this.total);
3390
- var agg = pivotData.getAggregator([], []);
3391
- if (agg) {
3392
- return agg.format(total, true);
3393
- } else {
3394
- return total.toLocaleString();
3395
- }
3396
- }
3397
- return "";
3398
- },
3399
- style: lodash.merge(
3400
- LABEL_DEFAULT_OPTIONS.style,
3401
- {
3402
- color: lodash.get(additionOptions, `${ highchartsRenderer.getLabelOptionKey(additionOptions) }.font_color`)
3403
- || LABEL_DEFAULT_OPTIONS.color,
3404
- },
3405
- highchartsRenderer.getDataLabelsStyle(additionOptions)
3406
- ),
3396
+ enabled: additionOptions && additionOptions.label && !isVarianceOnly ? additionOptions.label.show : false,
3397
+ formatter: stackLabelsFormatter.call(this),
3398
+ style: labelStyle
3407
3399
  },
3408
3400
  labels: {
3409
3401
  formatter: highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts)
@@ -3427,7 +3419,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3427
3419
  chartOptions.plotOptions = {
3428
3420
  series: {
3429
3421
  animation: !disableAnimation,
3430
- stacking: 'normal'
3422
+ stacking: 'normal',
3423
+ dataLabels: {
3424
+ allowOverlap: additionOptions && additionOptions.label ? additionOptions.label.overlap : false,
3425
+ enabled: additionOptions && additionOptions.label ? additionOptions.label.show : false,
3426
+ formatter: dataLabelsFormatter.call(this),
3427
+ style: labelStyle
3428
+ }
3431
3429
  }
3432
3430
  };
3433
3431
 
@@ -3464,7 +3462,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3464
3462
  const additionOptions = opts.chartOptions
3465
3463
  ? opts.chartOptions
3466
3464
  : highchartsRenderer.getDefaultValueForChart(highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN);
3467
-
3465
+
3468
3466
  if (!highchartsRenderer.isSortingOnBackendEnabled) {
3469
3467
  pivotData.colKeys = lodash.map(lodash.keys(pivotData.colTotals), key => [key]);
3470
3468
  }
@@ -3769,8 +3767,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3769
3767
  }
3770
3768
 
3771
3769
  highchartsRenderer.isRowKeyShouldBePercentage = function(render_options, rowKey) {
3772
- if (render_options && render_options.comboOptions && render_options.comboOptions.secondaryAxisSettings &&
3773
- render_options.comboOptions.secondaryAxisSettings.is_percentage) {
3770
+ if (lodash.get(render_options, 'comboOptions.secondaryAxisSettings.is_percentage', false) || lodash.get(render_options, 'chartOptions.delta_column.is_percentage', false)) {
3774
3771
  const rowKeyString = rowKey.join(highchartsRenderer.delimer);
3775
3772
  const rowKeyOptions = lodash.find(render_options.comboOptions.seriesOptions, {series: rowKeyString});
3776
3773
  if (rowKeyOptions && rowKeyOptions.secondaryAxis) {
@@ -3860,12 +3857,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3860
3857
  number_format = this.widget_values_format;
3861
3858
  }
3862
3859
 
3860
+ const aggregatorPercentageValue = valueFormatter.getAggregatorPercentageValueIfRequired(this.sum, render_options, data, rowKey, colKey);
3861
+ if (aggregatorPercentageValue) {
3862
+ return aggregatorPercentageValue;
3863
+ }
3864
+
3863
3865
  number_format = highchartsRenderer.getCalculatedValueFormat(this.calculated_formats, rowKey, colKey) || number_format;
3864
3866
 
3865
3867
  var formated_value = highchartsRenderer.formatValue('n', number_format, x);
3866
3868
 
3867
- return formated_value && formated_value.hasOwnProperty('value') && formated_value.value != null ?
3868
- formated_value.value : x.toLocaleString();
3869
+ return formated_value && formated_value.hasOwnProperty('value') && formated_value.value != null
3870
+ ? formated_value.value
3871
+ : x.toLocaleString();
3869
3872
  },
3870
3873
  numInputs: attr != null ? 0 : 1
3871
3874
  };
@@ -3928,6 +3931,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3928
3931
  return ''
3929
3932
  }
3930
3933
 
3934
+ const aggregatorPercentageValue = valueFormatter.getAggregatorPercentageValueIfRequired(this.uniq, render_options, data, rowKey, colKey);
3935
+ if (aggregatorPercentageValue) {
3936
+ return aggregatorPercentageValue;
3937
+ }
3938
+
3931
3939
  if (is_graph == true || only_formats == true) {
3932
3940
  let number_format = this.widget_values_format || null;
3933
3941
  let formated_value = highchartsRenderer.formatValue('n', number_format, x);
@@ -4015,6 +4023,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4015
4023
  number_format = this.widget_values_format;
4016
4024
  }
4017
4025
 
4026
+ const aggregatorPercentageValue = valueFormatter.getAggregatorPercentageValueIfRequired(this.sum, render_options, data, rowKey, colKey);
4027
+ if (aggregatorPercentageValue) {
4028
+ return aggregatorPercentageValue;
4029
+ }
4030
+
4018
4031
  number_format = highchartsRenderer.getCalculatedValueFormat(this.calculated_formats, rowKey, colKey) || number_format;
4019
4032
  var formated_value = highchartsRenderer.formatValue('n', number_format, x)
4020
4033
 
@@ -4102,6 +4115,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4102
4115
  number_format = this.widget_values_format;
4103
4116
  }
4104
4117
 
4118
+ const aggregatorPercentageValue = valueFormatter.getAggregatorPercentageValueIfRequired(this.val, render_options, data, rowKey, colKey);
4119
+ if (aggregatorPercentageValue) {
4120
+ return aggregatorPercentageValue;
4121
+ }
4122
+
4105
4123
  number_format = highchartsRenderer.getCalculatedValueFormat(this.calculated_formats, rowKey, colKey) || number_format;
4106
4124
 
4107
4125
  var formated_value = highchartsRenderer.formatValue('n', number_format, x)
@@ -4189,6 +4207,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4189
4207
  number_format = this.widget_values_format;
4190
4208
  }
4191
4209
 
4210
+ const aggregatorPercentageValue = valueFormatter.getAggregatorPercentageValueIfRequired(this.val, render_options, data, rowKey, colKey);
4211
+ if (aggregatorPercentageValue) {
4212
+ return aggregatorPercentageValue;
4213
+ }
4214
+
4192
4215
  number_format = highchartsRenderer.getCalculatedValueFormat(this.calculated_formats, rowKey, colKey) || number_format;
4193
4216
 
4194
4217
  var formated_value = highchartsRenderer.formatValue('n', number_format, x)
@@ -4279,6 +4302,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4279
4302
  number_format = this.widget_values_format;
4280
4303
  }
4281
4304
 
4305
+ const aggregatorPercentageValue = valueFormatter.getAggregatorPercentageValueIfRequired(this.sum, render_options, data, rowKey, colKey);
4306
+ if (aggregatorPercentageValue) {
4307
+ return aggregatorPercentageValue;
4308
+ }
4309
+
4282
4310
  number_format = highchartsRenderer.getCalculatedValueFormat(this.calculated_formats, rowKey, colKey) || number_format;
4283
4311
 
4284
4312
  var formated_value = highchartsRenderer.formatValue('n', number_format, x)
@@ -4546,19 +4574,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4546
4574
  }
4547
4575
  if (uniqueCategories && ((maxCategories && uniqueCategories.length > maxCategories)
4548
4576
  || (minCategories && uniqueCategories.length < minCategories))) {
4549
- options.error_has_occurred = true;
4550
- const breakdownText = `Please adjust your dashboard's reference date or filter selections as \
4551
- the quantity of data doesn't match the limit of at least ${ minCategories } values.`;
4552
- const walkthroughText = `Please adjust your dashboard's reference date and filter selections as \
4553
- the quantity of data doesn't match the chart's ${ minCategories }-${ maxCategories } value limit.`;
4554
-
4555
- options.error_params = {
4556
- title: 'Data Conflict',
4557
- text: isBreakdown ? breakdownText : walkthroughText,
4558
- class: uniqueCategories.length < minCategories ? 'waterfall-nodata' : 'waterfall-too-much-data',
4559
- }
4560
-
4561
- return highchartsRenderer.getNoDataResult(true);
4577
+ const dataConflictError = new DataConflictError({
4578
+ chartType: lodash.get(widget, 'chart_type'),
4579
+ uniqueCategories,
4580
+ minCategories,
4581
+ maxCategories
4582
+ });
4583
+ console.error(dataConflictError.title);
4584
+ throw dataConflictError;
4562
4585
  }
4563
4586
  }
4564
4587
 
@@ -4567,9 +4590,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4567
4590
  return {};
4568
4591
  }
4569
4592
 
4570
- options.error_has_occurred = true;
4571
- options.error_params = highchartsRenderer.widgetPlaceholders.nodata;
4572
- return highchartsRenderer.getNoDataResult();
4593
+ const noDataError = new NoDataError();
4594
+ console.error(noDataError.title);
4595
+ throw noDataError;
4573
4596
  }
4574
4597
 
4575
4598
  if (rowData.length > highchartsRenderer.MAX_ROWS_FOR_SHOW_RESULTS) {
@@ -4577,9 +4600,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4577
4600
  return {};
4578
4601
  }
4579
4602
 
4580
- options.error_has_occurred = true;
4581
- options.error_params = highchartsRenderer.widgetPlaceholders.tooMuchData;
4582
- return highchartsRenderer.getNoDataResult(true);
4603
+ const tooMuchDataError = new TooMuchDataError();
4604
+ console.error(tooMuchDataError.title);
4605
+ throw tooMuchDataError;
4583
4606
  }
4584
4607
 
4585
4608
  var tmp = $.pivotUtilities.aggregatorTemplates;
@@ -4641,28 +4664,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4641
4664
 
4642
4665
  result = opts.renderer(pivotData, opts.rendererOptions);
4643
4666
  } catch (_error) {
4644
- e = _error;
4645
- if (typeof console !== "undefined" && console !== null) {
4646
- console.error(e.stack);
4647
- }
4648
- result = $("<span>").html(opts.localeStrings.renderError);
4649
- if (options.onlyOptions) {
4650
- result = {};
4651
- }
4667
+ result = _handleRenderingError(_error, options.onlyOptions);
4652
4668
  }
4653
4669
 
4654
4670
  if (lodash.isObject(lodash.get(widget, 'pivot'))) {
4655
4671
  widget.pivot.sortByValueAttrs = pivotData.sortByValueAttrs;
4656
4672
  }
4657
4673
  } catch (_error) {
4658
- e = _error;
4659
- if (typeof console !== "undefined" && console !== null) {
4660
- console.error(e.stack);
4661
- }
4662
- result = $("<span>").html(opts.localeStrings.computeError);
4663
- if (options.onlyOptions) {
4664
- result = {};
4665
- }
4674
+ result = _handleComputationalError(_error, options.onlyOptions);
4666
4675
  }
4667
4676
 
4668
4677
  return result;
@@ -4700,19 +4709,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4700
4709
  }
4701
4710
  if (uniqueCategories && ((maxCategories && uniqueCategories.length > maxCategories)
4702
4711
  || (minCategories && uniqueCategories.length < minCategories))) {
4703
- options.error_has_occurred = true;
4704
- const breakdownText = `Please adjust your dashboard's reference date or filter selections as \
4705
- the quantity of data doesn't match the limit of at least ${ minCategories } values.`;
4706
- const walkthroughText = `Please adjust your dashboard's reference date and filter selections as \
4707
- the quantity of data doesn't match the chart's ${ minCategories }-${ maxCategories } value limit.`;
4708
-
4709
- options.error_params = {
4710
- title: 'Data Conflict',
4711
- text: isBreakdown ? breakdownText : walkthroughText,
4712
- class: uniqueCategories.length < minCategories ? 'waterfall-nodata' : 'waterfall-too-much-data',
4713
- }
4714
-
4715
- return highchartsRenderer.getNoDataResult(true);
4712
+ const dataConflictError = new DataConflictError({
4713
+ chartType: lodash.get(widget, 'chart_type'),
4714
+ uniqueCategories,
4715
+ minCategories,
4716
+ maxCategories
4717
+ });
4718
+ console.error(dataConflictError.title);
4719
+ throw dataConflictError;
4716
4720
  }
4717
4721
  }
4718
4722
 
@@ -4721,9 +4725,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4721
4725
  return {};
4722
4726
  }
4723
4727
 
4724
- options.error_has_occurred = true;
4725
- options.error_params = highchartsRenderer.widgetPlaceholders.nodata;
4726
- return highchartsRenderer.getNoDataResult();
4728
+ const noDataError = new NoDataError();
4729
+ console.error(noDataError.title);
4730
+ throw noDataError;
4727
4731
  }
4728
4732
 
4729
4733
  if (rowData.length > highchartsRenderer.MAX_ROWS_FOR_SHOW_RESULTS) {
@@ -4731,9 +4735,21 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4731
4735
  return {};
4732
4736
  }
4733
4737
 
4734
- options.error_has_occurred = true;
4735
- options.error_params = highchartsRenderer.widgetPlaceholders.tooMuchData;
4736
- return highchartsRenderer.getNoDataResult(true);
4738
+ const tooMuchDataError = new TooMuchDataError();
4739
+ console.error(tooMuchDataError.title);
4740
+ throw tooMuchDataError;
4741
+ }
4742
+
4743
+ if (lodash.get(widget, 'chart_type') === highchartsRenderer.CHART_TYPES.GAUGE_CHART_DYNAMIC_GOAL) {
4744
+ const noNeedleOrGoalSelected =
4745
+ !lodash.get(widget, 'options.chartOptions.dynamicGaugeConfig.goal')
4746
+ || !lodash.get(widget, 'options.chartOptions.dynamicGaugeConfig.needle');
4747
+
4748
+ if (noNeedleOrGoalSelected) {
4749
+ const gaugeError = new GaugeConfigurationError();
4750
+ console.error(gaugeError.title);
4751
+ throw gaugeError;
4752
+ }
4737
4753
  }
4738
4754
 
4739
4755
  var tmp = $.pivotUtilities.aggregatorTemplates;
@@ -4794,28 +4810,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4794
4810
 
4795
4811
  result = opts.renderer(pivotData, opts.rendererOptions);
4796
4812
  } catch (_error) {
4797
- e = _error;
4798
- if (typeof console !== "undefined" && console !== null) {
4799
- console.error(e.stack);
4800
- }
4801
- result = $("<span>").html(opts.localeStrings.renderError);
4802
- if (options.onlyOptions) {
4803
- result = {};
4804
- }
4813
+ result = _handleRenderingError(_error, options.onlyOptions);
4805
4814
  }
4806
4815
 
4807
4816
  if (lodash.isObject(lodash.get(widget, 'pivot'))) {
4808
4817
  widget.pivot.sortByValueAttrs = pivotData.sortByValueAttrs;
4809
4818
  }
4810
4819
  } catch (_error) {
4811
- e = _error;
4812
- if (typeof console !== "undefined" && console !== null) {
4813
- console.error(e.stack);
4814
- }
4815
- result = $("<span>").html(opts.localeStrings.computeError);
4816
- if (options.onlyOptions) {
4817
- result = {};
4818
- }
4820
+ result = _handleComputationalError(_error, options.onlyOptions);
4819
4821
  }
4820
4822
 
4821
4823
  return result;
@@ -4854,6 +4856,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4854
4856
  dateValuesDictionary: pivotOptions ? pivotOptions.dateValuesDictionary : null,
4855
4857
  keysObject: pivotOptions ? pivotOptions.keysObject : null,
4856
4858
  isDrillDownDisabled: pivotOptions ? pivotOptions.isDrillDownDisabled : false,
4859
+ pivotUiFnRemoved: pivotOptions ? pivotOptions.pivotUiFnRemoved : false,
4857
4860
  };
4858
4861
 
4859
4862
  if (!subopts.rendererOptions) {
@@ -5291,45 +5294,61 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5291
5294
  },
5292
5295
  seriesOptions: []
5293
5296
  }
5294
- if (options.chartOptions && options.chartOptions.delta_column && options.chartOptions.delta_column.field === 'series') {
5295
- let deltaColumnSeries = {
5296
- series: options.chartOptions.delta_column.name,
5297
- secondaryAxis: !options.chartOptions.delta_column.same_yaxis,
5298
- };
5299
- switch (options.chartOptions.delta_column.chart) {
5300
- case 'line':
5301
- deltaColumnSeries.chartType = 'line-chart';
5302
- break;
5303
- case 'spline':
5304
- deltaColumnSeries.chartType = 'line-chart-smooth';
5305
- break;
5306
- case 'area':
5307
- deltaColumnSeries.chartType = 'area-chart';
5308
- break;
5309
- case 'areaspline':
5310
- deltaColumnSeries.chartType = 'area-chart-smooth';
5311
- break;
5312
- case 'scatter':
5313
- deltaColumnSeries.chartType = 'scatter-chart';
5314
- break;
5315
- case 'column':
5316
- deltaColumnSeries.chartType = 'column-chart';
5317
- break;
5318
- default:
5319
- deltaColumnSeries.chartType = 'scatter-chart';
5320
- break;
5321
- }
5322
- options.comboOptions.seriesOptions.push(deltaColumnSeries);
5323
- options.comboOptions.secondaryAxisSettings.name = options.chartOptions.delta_column.name.replace('_', '');
5324
- options.comboOptions.secondaryAxisSettings.is_percentage = options.chartOptions.delta_column.is_percentage;
5297
+ }
5298
+
5299
+ if (options.chartOptions && options.chartOptions.delta_column && options.chartOptions.delta_column.field === 'series') {
5300
+ let deltaColumnSeries = {
5301
+ series: options.chartOptions.delta_column.name,
5302
+ secondaryAxis: !options.chartOptions.delta_column.same_yaxis,
5303
+ };
5304
+ switch (options.chartOptions.delta_column.chart) {
5305
+ case 'line':
5306
+ deltaColumnSeries.chartType = 'line-chart';
5307
+ break;
5308
+ case 'spline':
5309
+ deltaColumnSeries.chartType = 'line-chart-smooth';
5310
+ break;
5311
+ case 'area':
5312
+ deltaColumnSeries.chartType = 'area-chart';
5313
+ break;
5314
+ case 'areaspline':
5315
+ deltaColumnSeries.chartType = 'area-chart-smooth';
5316
+ break;
5317
+ case 'scatter':
5318
+ deltaColumnSeries.chartType = 'scatter-chart';
5319
+ break;
5320
+ case 'column':
5321
+ deltaColumnSeries.chartType = 'column-chart';
5322
+ break;
5323
+ default:
5324
+ deltaColumnSeries.chartType = 'scatter-chart';
5325
+ break;
5325
5326
  }
5327
+ options.comboOptions.seriesOptions.push(deltaColumnSeries);
5326
5328
  }
5327
5329
  };
5328
5330
 
5329
- highchartsRenderer.setMissingWidgetOptions = function(options, type) {
5330
- if (!lodash.has(options, 'chartOptions')) return;
5331
+ highchartsRenderer.setMissingWidgetOptions = function (options, type) {
5332
+ if (!options || !lodash.has(options, 'chartOptions')) return;
5333
+
5331
5334
  const defaultOptions = highchartsRenderer.getDefaultValueForChart(type);
5332
- options.chartOptions = lodash.merge(defaultOptions, options.chartOptions);
5335
+
5336
+ // User can remove segment and this part of code was made to
5337
+ // prevent a set of default value
5338
+ if (type === highchartsRenderer.CHART_TYPES.GAUGE_CHART_DYNAMIC_GOAL) {
5339
+ const chartOptions = options.chartOptions || {};
5340
+ const userSegments = chartOptions.segments;
5341
+ const merged = lodash.merge({}, defaultOptions, lodash.omit(chartOptions, 'segments'));
5342
+
5343
+ if (Array.isArray(userSegments)) {
5344
+ merged.segments = userSegments;
5345
+ }
5346
+
5347
+ options.chartOptions = merged;
5348
+ return;
5349
+ }
5350
+
5351
+ options.chartOptions = lodash.merge({}, defaultOptions, options.chartOptions);
5333
5352
  };
5334
5353
 
5335
5354
  highchartsRenderer.addPivotOptions = function (selectedTemplateWOData, widgetOptions, drilldownFunction, drillDownListFunction) {
@@ -5996,21 +6015,30 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5996
6015
  ];
5997
6016
 
5998
6017
  highchartsRenderer.getDefaultValueForChart = function (type, existing_options) {
5999
- const chartOpt = type === highchartsRenderer.richTextSubType.type
6018
+ const chartOpt = (type === highchartsRenderer.richTextSubType.type)
6000
6019
  ? highchartsRenderer.richTextSubType
6001
6020
  : highchartsRenderer.getChartOptionsBySubType(type);
6002
- let valToReturn = {};
6003
- if (chartOpt) {
6004
- lodash.forEach(chartOpt.suboptions, (suboption) => {
6005
- valToReturn[suboption.category_type] = highchartsRenderer.getDefaultValueForSubOptions(suboption, existing_options, type);
6006
- });
6007
- }
6008
6021
 
6009
- if (chartOpt.hasOwnProperty('default_options') && chartOpt.default_options) {
6010
- valToReturn = lodash.extend(valToReturn, chartOpt.default_options);
6011
- }
6022
+ if (!chartOpt) return {};
6012
6023
 
6013
- return valToReturn;
6024
+ const clone = (v) => (globalThis.structuredClone ? structuredClone(v) : lodash.cloneDeep(v));
6025
+
6026
+ const subValues = {};
6027
+ lodash.forEach(chartOpt.suboptions, (suboption) => {
6028
+ subValues[suboption.category_type] = clone(
6029
+ highchartsRenderer.getDefaultValueForSubOptions(suboption, existing_options, type)
6030
+ );
6031
+ });
6032
+
6033
+ const baseDefaults = clone(chartOpt.default_options || {});
6034
+
6035
+ const overwriteArrays = (objValue, srcValue) => {
6036
+ if (Array.isArray(objValue) || Array.isArray(srcValue)) {
6037
+ return clone(srcValue);
6038
+ }
6039
+ };
6040
+
6041
+ return lodash.mergeWith({}, subValues, baseDefaults, overwriteArrays);
6014
6042
  };
6015
6043
 
6016
6044
  highchartsRenderer.getCommonChartOptions = function(additionalOptions) {
@@ -6089,6 +6117,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6089
6117
 
6090
6118
  if (option) {
6091
6119
  const type = option.category_type;
6120
+
6121
+ const existingOptionValue = lodash.get(existing_options, type);
6122
+ if (!option.elements) {
6123
+ return existingOptionValue || option.default_value;
6124
+ }
6125
+
6092
6126
  lodash.forEach(option.elements, function (elem) {
6093
6127
  if (existing_options && lodash.has(existing_options, type + '.' + elem.value_name)) {
6094
6128
  valToReturn[elem.value_name] = lodash.get(existing_options, type + '.' + elem.value_name);
@@ -6117,8 +6151,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6117
6151
  return highchartsRenderer.chartsTypesInfo[type] ? highchartsRenderer.chartsTypesInfo[type].legendName : CHART_LEGEND_DEFAULT_LABEL;
6118
6152
  };
6119
6153
 
6120
- highchartsRenderer.widgetPlaceholders = lodash.assign({}, $.pivotUtilities.errorHandling.placeholders);
6121
-
6122
6154
  const suboptionsFontSizeValues = (lodash.map(lodash.fill(new Array(19), null), function (item, index) {
6123
6155
  const fontValue = index + 6;
6124
6156
  return { label: fontValue, value: fontValue }
@@ -6625,7 +6657,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6625
6657
  element_type: 'checkbox',
6626
6658
  value_name: 'dislay_empty_values',
6627
6659
  element_label: 'Display empty values',
6628
- default_value: true
6660
+ default_value: false
6629
6661
  },
6630
6662
  ]
6631
6663
  },
@@ -6653,7 +6685,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6653
6685
  element_type: 'checkbox',
6654
6686
  value_name: 'dislay_empty_values',
6655
6687
  element_label: 'Display empty values',
6656
- default_value: true
6688
+ default_value: false
6657
6689
  },
6658
6690
  {
6659
6691
  element_type: 'devider',
@@ -6948,12 +6980,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6948
6980
  {
6949
6981
  element_type: 'devider',
6950
6982
  },
6951
- {
6952
- element_type: 'checkbox',
6953
- element_label: 'Goal name',
6954
- value_name: 'show_goal_name',
6955
- default_value: true,
6956
- },
6957
6983
  {
6958
6984
  element_type: 'checkbox',
6959
6985
  element_label: 'Value % out of Goal',
@@ -6966,6 +6992,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6966
6992
  value_name: 'show_percentage_in_segments',
6967
6993
  default_value: false,
6968
6994
  },
6995
+ {
6996
+ element_type: 'checkbox',
6997
+ element_label: 'Show Goal label',
6998
+ value_name: 'show_goal_name',
6999
+ default_value: true,
7000
+ },
7001
+ {
7002
+ element_type: 'input',
7003
+ show_in_one_row: true,
7004
+ element_label: 'Goal name',
7005
+ value_name: 'goal_name',
7006
+ default_value: 'Goal',
7007
+ showFn: () => highchartsRenderer.hasFeature(FEATURES.ENABLE_GAUGE_DYNAMIC_GOAL),
7008
+ },
6969
7009
  ]
6970
7010
  },
6971
7011
  'label_with_percentage': {
@@ -7414,6 +7454,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7414
7454
  value_name: 'formula',
7415
7455
  element_label: 'Formula',
7416
7456
  default_value: 'x2-x1'
7457
+ },
7458
+ {
7459
+ element_type: 'input',
7460
+ value_name: 'color',
7461
+ element_label: 'Color',
7462
+ default_value: ''
7417
7463
  }, {
7418
7464
  element_type: 'radio',
7419
7465
  value_name: 'chart',
@@ -7573,6 +7619,40 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7573
7619
  ],
7574
7620
  default_value: ''
7575
7621
  }]
7622
+ },
7623
+ gauge_goal: {
7624
+ is_hidden: true,
7625
+ categorys_class: 'google-visualization-charteditor-mini-more',
7626
+ category_label: 'Gauge goal',
7627
+ category_type: 'goal',
7628
+ elements: [
7629
+ {
7630
+ element_type: 'input',
7631
+ value_name: 'title',
7632
+ element_label: 'Goal title',
7633
+ default_value: 'Goal',
7634
+ },
7635
+ {
7636
+ element_type: 'input',
7637
+ value_name: 'value',
7638
+ element_label: 'Goal value',
7639
+ default_value: 1000000,
7640
+ },
7641
+ ],
7642
+ },
7643
+ gauge_segments: {
7644
+ is_hidden: true,
7645
+ categorys_class: 'google-visualization-charteditor-mini-more',
7646
+ category_label: 'Gauge segments',
7647
+ category_type: 'segments',
7648
+ default_value: GAUGE_OPTIONS_DEFAULT.segments,
7649
+ },
7650
+ gauge_is_absolute: {
7651
+ is_hidden: true,
7652
+ categorys_class: 'google-visualization-charteditor-mini-more',
7653
+ category_label: 'Gauge is absolute value',
7654
+ category_type: 'isAbsoluteValue',
7655
+ default_value: false,
7576
7656
  }
7577
7657
  };
7578
7658
 
@@ -7596,6 +7676,21 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7596
7676
  axisTooltipDescription: 'The category (usually an independent variable) is shown on the x-axis and should be between 2 to 5 total columns. ',
7597
7677
  legendTooltipTitle: 'Drag one field to further configure your x-axis.',
7598
7678
  legendTooltipDescription: 'The breakdown subdivides the chart by a category field for further analysis of what’s contributing to the increase or decrease.',
7679
+ categoryContainerSettings: {
7680
+ multiple: false,
7681
+ singleFieldReplacement: true,
7682
+ onlyOneFieldHeight: true,
7683
+ },
7684
+ legendContainerSettings: {
7685
+ multiple: false,
7686
+ singleFieldReplacement: true,
7687
+ onlyOneFieldHeight: true,
7688
+ },
7689
+ valuesContainerSettings: {
7690
+ multiple: false,
7691
+ singleFieldReplacement: true,
7692
+ onlyOneFieldHeight: true,
7693
+ },
7599
7694
  },
7600
7695
  [highchartsRenderer.CHART_TYPES.WATERFALL_WALKTHROUGH]: {
7601
7696
  name: 'Walkthrough Chart',
@@ -7609,6 +7704,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7609
7704
  axisTooltipTitle: 'Drag one or more fields to configure your x-axis.',
7610
7705
  axisTooltipDescription: 'The category is shown on the x-axis and should be between 2 to 10 columns.',
7611
7706
  legendTooltipTitle: '',
7707
+ categoryContainerSettings: {
7708
+ fixedInitialHeight: true,
7709
+ },
7710
+ valuesContainerSettings: {
7711
+ multiple: false,
7712
+ singleFieldReplacement: true,
7713
+ onlyOneFieldHeight: true,
7714
+ },
7715
+ filtersContainerSettings: {
7716
+ fixedInitialHeight: true,
7717
+ },
7612
7718
  },
7613
7719
  'combo-chart': {
7614
7720
  name: 'Combo Chart ',
@@ -7667,7 +7773,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7667
7773
  },
7668
7774
  'line-chart-forecast': {
7669
7775
  name: 'Combined Line',
7670
- label: 'Combined Line',
7776
+ label: 'Forecast Chart',
7671
7777
  title: 'Show forecast over time.',
7672
7778
  description: 'For example, see how your Monthly Revenue evolves over a given period.',
7673
7779
  axisName: 'X - Axis',
@@ -7780,14 +7886,49 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7780
7886
  axisTooltipTitle: ' Best practice: we recommend no more than one segment.',
7781
7887
  legendTooltipTitle: 'To create a drill-down within this category, drag a field here.',
7782
7888
  },
7889
+
7783
7890
  [highchartsRenderer.CHART_TYPES.GAUGE_CHART_ENHANCED]: {
7784
7891
  name: 'Gauge chart',
7785
- label: 'Gauge',
7786
- title: 'Measures progress toward a goal or a KPI.',
7892
+ categoryLabel: 'Gauge',
7893
+ displayLabelInEditor: highchartsRenderer.hasFeature(FEATURES.ENABLE_GAUGE_DYNAMIC_GOAL),
7894
+ label: highchartsRenderer.hasFeature(FEATURES.ENABLE_GAUGE_DYNAMIC_GOAL) ? 'Static goal' : 'Gauge',
7895
+ title: highchartsRenderer.hasFeature(FEATURES.ENABLE_GAUGE_DYNAMIC_GOAL)
7896
+ ? 'Measures progress toward a goal or a KPI.'
7897
+ : 'Track actual performance against targets from your budget or forecast files.',
7787
7898
  axisName: 'X-Axis',
7788
7899
  legendName: 'Data Series',
7789
7900
  startedMessage: 'To get started, drag one field to the value section. Best practice: Drag one field to the filter section, and filter as required.',
7901
+ valuesContainerSettings: {
7902
+ fixedInitialHeight: true,
7903
+ },
7904
+ filtersContainerSettings: {
7905
+ fixedInitialHeight: true,
7906
+ },
7790
7907
  },
7908
+
7909
+ [highchartsRenderer.CHART_TYPES.GAUGE_CHART_DYNAMIC_GOAL]: {
7910
+ name: 'Gauge chart with dynamic goal',
7911
+ categoryLabel: 'Gauge',
7912
+ displayLabelInEditor: true,
7913
+ iconType: highchartsRenderer.CHART_TYPES.GAUGE_CHART_ENHANCED,
7914
+ label: 'Dynamic goal',
7915
+ title: 'Track actual performance against manually set targets.',
7916
+ axisName: 'Goal',
7917
+ legendName: 'Data Series',
7918
+ startedMessage: 'To get started, drag a field to the Value section and set the Goal with a field that references your planning files (e.g., Scenario or Version Name)',
7919
+ categoryContainerSettings: {
7920
+ multiple: false,
7921
+ singleFieldReplacement: true,
7922
+ onlyOneFieldHeight: true,
7923
+ },
7924
+ valuesContainerSettings: {
7925
+ fixedInitialHeight: true,
7926
+ },
7927
+ filtersContainerSettings: {
7928
+ fixedInitialHeight: true,
7929
+ },
7930
+ },
7931
+
7791
7932
  [highchartsRenderer.CHART_TYPES.GAUGE_CHART_CATEGORIES_SUMMARY]: {
7792
7933
  name: 'Gauge chart categories summary',
7793
7934
  label: 'Gauge',
@@ -7796,6 +7937,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7796
7937
  legendName: 'Data Series',
7797
7938
  startedMessage: '',
7798
7939
  },
7940
+ [highchartsRenderer.CHART_TYPES.SMART_KPI]: {
7941
+ name: 'Smart Kpi',
7942
+ label: 'Smart KPI',
7943
+ title: 'Present a single Key Performance Indicator.',
7944
+ axisName: 'X-Axis',
7945
+ legendName: 'Data Series',
7946
+ startedMessage: 'To get started, drag one field to the value section. Best practice: Drag one field to the filter section, and filter as required.',
7947
+ },
7799
7948
  'kpi-widget': {
7800
7949
  name: 'Kpi ',
7801
7950
  label: 'KPI',
@@ -8206,29 +8355,49 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8206
8355
  highchartsRenderer.suboptions["subtitle"],
8207
8356
  highchartsRenderer.suboptions["table_options_gauge"],
8208
8357
  highchartsRenderer.suboptions["table_design_options"],
8358
+ highchartsRenderer.suboptions["gauge_goal"],
8359
+ highchartsRenderer.suboptions["gauge_segments"],
8360
+ highchartsRenderer.suboptions["gauge_is_absolute"],
8361
+ ]
8362
+ },
8363
+ {
8364
+ type: highchartsRenderer.CHART_TYPES.GAUGE_CHART_DYNAMIC_GOAL,
8365
+ name: highchartsRenderer.chartsTypesInfo[highchartsRenderer.CHART_TYPES.GAUGE_CHART_DYNAMIC_GOAL].name,
8366
+ class: 'google-visualization-charteditor-thumbs-gauge-solid',
8367
+ render: highchartsRenderer.ptRenderGaugeDynamicGoal,
8368
+ suboptions: [
8369
+ highchartsRenderer.suboptions["label_gauge"],
8370
+ highchartsRenderer.suboptions["tooltips_gauge"],
8371
+ highchartsRenderer.suboptions["subtitle"],
8372
+ highchartsRenderer.suboptions["table_options_gauge"],
8373
+ highchartsRenderer.suboptions["table_design_options"],
8374
+ highchartsRenderer.suboptions["gauge_goal"],
8375
+ highchartsRenderer.suboptions["gauge_segments"],
8376
+ highchartsRenderer.suboptions["gauge_is_absolute"],
8377
+ ],
8378
+ hidden: !highchartsRenderer.hasFeature(FEATURES.ENABLE_GAUGE_DYNAMIC_GOAL),
8379
+ },
8380
+ ]
8381
+ },
8382
+ {
8383
+ type: 'gauge-categories-summary',
8384
+ name: 'Gauge Categories Summary',
8385
+ class: 'google-visualization-charteditor-mini-gauge',
8386
+ hidden: true,
8387
+ subtypes: [
8388
+ {
8389
+ type: highchartsRenderer.CHART_TYPES.GAUGE_CHART_CATEGORIES_SUMMARY,
8390
+ name: highchartsRenderer.chartsTypesInfo[highchartsRenderer.CHART_TYPES.GAUGE_CHART_CATEGORIES_SUMMARY].name,
8391
+ class: 'google-visualization-charteditor-thumbs-gauge-solid',
8392
+ render: highchartsRenderer.ptRenderGaugeCategoriesSummary,
8393
+ suboptions: [
8394
+ highchartsRenderer.suboptions["label_gauge"],
8395
+ highchartsRenderer.suboptions["tooltips_gauge"],
8396
+ highchartsRenderer.suboptions["subtitle"]
8209
8397
  ]
8210
8398
  },
8211
8399
  ]
8212
8400
  },
8213
- {
8214
- type: 'gauge-categories-summary',
8215
- name: 'Gauge Categories Summary',
8216
- class: 'google-visualization-charteditor-mini-gauge',
8217
- hidden: true,
8218
- subtypes: [
8219
- {
8220
- type: highchartsRenderer.CHART_TYPES.GAUGE_CHART_CATEGORIES_SUMMARY,
8221
- name: highchartsRenderer.chartsTypesInfo[highchartsRenderer.CHART_TYPES.GAUGE_CHART_CATEGORIES_SUMMARY].name,
8222
- class: 'google-visualization-charteditor-thumbs-gauge-solid',
8223
- render: highchartsRenderer.ptRenderGaugeCategoriesSummary,
8224
- suboptions: [
8225
- highchartsRenderer.suboptions["label_gauge"],
8226
- highchartsRenderer.suboptions["tooltips_gauge"],
8227
- highchartsRenderer.suboptions["subtitle"]
8228
- ]
8229
- },
8230
- ]
8231
- },
8232
8401
  {
8233
8402
  type: 'kpi',
8234
8403
  name: 'KPI',
@@ -8248,6 +8417,23 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8248
8417
  highchartsRenderer.suboptions["negative_number_format"],
8249
8418
  highchartsRenderer.suboptions["legends"],
8250
8419
  ]
8420
+ },
8421
+ {
8422
+ type: 'smart-kpi',
8423
+ hidden: true,
8424
+ name: highchartsRenderer.chartsTypesInfo['smart-kpi'].name,
8425
+ class: 'google-visualization-charteditor-thumbs-kpi',
8426
+ render: () => { throw new Error('Smart KPI widget is not implemented yet'); },
8427
+ suboptions: [
8428
+ highchartsRenderer.suboptions["value"],
8429
+ highchartsRenderer.suboptions["range"],
8430
+ highchartsRenderer.suboptions["widget_library"],
8431
+ highchartsRenderer.suboptions["name"],
8432
+ highchartsRenderer.suboptions["table_options_transpose"],
8433
+ highchartsRenderer.suboptions["table_design_options"],
8434
+ highchartsRenderer.suboptions["negative_number_format"],
8435
+ highchartsRenderer.suboptions["legends"],
8436
+ ]
8251
8437
  }]
8252
8438
  },
8253
8439
  {
@@ -9812,7 +9998,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9812
9998
 
9813
9999
  // Check if chart has multiple values
9814
10000
  highchartsRenderer.isChartWithMultiValues = function(pivotData) {
9815
- return lodash.get(pivotData, 'rowAttrs[0]') === 'DR_Values';
10001
+ return lodash.some(lodash.get(pivotData, 'rowAttrs'), attr => attr === 'DR_Values');
9816
10002
  }
9817
10003
 
9818
10004
  highchartsRenderer.checkFormats = function(render_options, widget_values_format) {
@@ -9914,11 +10100,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9914
10100
  e.point.name = e.point.initialName;
9915
10101
  e.point.series.name = lodash.get(e.point.series, 'userOptions.initialName', e.point.series.name);
9916
10102
  const seriesData = lodash.get(e.point.series, 'userOptions.data');
9917
- const initialNameForSmartQueries = seriesData
10103
+ const initialSeriesName = seriesData
9918
10104
  ? lodash.find(seriesData, obj => obj.name === e.point.name)
9919
10105
  : null;
9920
- if (initialNameForSmartQueries && initialNameForSmartQueries.type) {
9921
- e.point.series.name = initialNameForSmartQueries.type === "SQ_Actuals" ? 'Actuals' : 'Forecast';
10106
+ if (initialSeriesName && initialSeriesName.type && ['SQ_Actuals', 'Forecast'].includes(initialSeriesName.type)) {
10107
+ e.point.series.name = 'Forecast';
9922
10108
  }
9923
10109
  lodash.set(e, 'point.category.userOptions', e.point.initialName.toString().split(highchartsRenderer.delimer));
9924
10110
  }
@@ -10064,4 +10250,5 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
10064
10250
  return highchartsRenderer;
10065
10251
  };
10066
10252
 
10253
+
10067
10254
  module.exports = getHighchartsRenderer;