@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.
- package/.github/workflows/release.yml +44 -0
- package/.whitesource +3 -0
- package/README.md +45 -3
- package/package.json +5 -6
- package/src/charts/dr_donut_chart.js +3 -3
- package/src/charts/dr_gauge_categories_summary_chart.js +17 -17
- package/src/charts/dr_gauge_chart.js +226 -64
- package/src/dr-renderer-helpers.js +30 -13
- package/src/dr_pivottable.js +21 -29
- package/src/errors.js +174 -0
- package/src/highcharts_renderer.js +530 -343
- package/src/index.d.ts +63 -0
- package/src/index.js +14 -1
- package/src/pivot.css +0 -11
- package/src/pivottable.js +469 -508
- package/src/seriesPointStyles-helper.js +1 -1
- package/src/smart_queries_helper.js +62 -14
- package/src/types/errors.d.ts +120 -0
- package/src/types/index.d.ts +2 -0
- package/src/value.formatter.js +41 -0
- package/tests/dr-renderer-helpers.test.js +33 -0
- package/tests/dr_gauge_chart.test.js +88 -0
- package/tests/errors.test.js +157 -0
- package/tests/highcharts_renderer.test.js +1029 -67
- package/tests/mock/widgets.json +1 -3
- package/tests/ptCreateDrillDownSeriesToDrilldownChart.test.js +511 -0
- package/tests/value.formatter.test.js +143 -0
- package/tsconfig.json +2 -2
- package/tsconfig.tsbuildinfo +7 -0
- package/.github/workflows/build-deploy.yml +0 -28
- package/types/index.d.ts +0 -1
- /package/{types → src/types}/graph-table-renderer.d.ts +0 -0
@@ -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
|
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
|
-
]
|
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
|
-
|
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
|
-
|
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
|
-
|
1167
|
-
|
1168
|
-
|
1202
|
+
const noDataError = new NoDataError();
|
1203
|
+
console.error(noDataError.title);
|
1204
|
+
throw noDataError;
|
1169
1205
|
} else if (!chartOptions.onlyText && chartOptions.series && toMatch) {
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
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
|
-
|
1429
|
-
|
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
|
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
|
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
|
-
|
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:
|
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 :
|
3387
|
-
formatter:
|
3388
|
-
|
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
|
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
|
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
|
-
|
4550
|
-
|
4551
|
-
|
4552
|
-
|
4553
|
-
|
4554
|
-
|
4555
|
-
|
4556
|
-
|
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
|
-
|
4571
|
-
|
4572
|
-
|
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
|
-
|
4581
|
-
|
4582
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
4704
|
-
|
4705
|
-
|
4706
|
-
|
4707
|
-
|
4708
|
-
|
4709
|
-
|
4710
|
-
|
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
|
-
|
4725
|
-
|
4726
|
-
|
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
|
-
|
4735
|
-
|
4736
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
5295
|
-
|
5296
|
-
|
5297
|
-
|
5298
|
-
|
5299
|
-
|
5300
|
-
|
5301
|
-
|
5302
|
-
|
5303
|
-
|
5304
|
-
|
5305
|
-
|
5306
|
-
|
5307
|
-
|
5308
|
-
|
5309
|
-
|
5310
|
-
|
5311
|
-
|
5312
|
-
|
5313
|
-
|
5314
|
-
|
5315
|
-
|
5316
|
-
|
5317
|
-
|
5318
|
-
|
5319
|
-
|
5320
|
-
|
5321
|
-
|
5322
|
-
|
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
|
-
|
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
|
6010
|
-
valToReturn = lodash.extend(valToReturn, chartOpt.default_options);
|
6011
|
-
}
|
6022
|
+
if (!chartOpt) return {};
|
6012
6023
|
|
6013
|
-
|
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:
|
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:
|
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: '
|
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
|
-
|
7786
|
-
|
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
|
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
|
10103
|
+
const initialSeriesName = seriesData
|
9918
10104
|
? lodash.find(seriesData, obj => obj.name === e.point.name)
|
9919
10105
|
: null;
|
9920
|
-
if (
|
9921
|
-
e.point.series.name =
|
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;
|