@datarailsshared/dr_renderer 1.2.178 → 1.2.180
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/highcharts_renderer.js +424 -41
package/package.json
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
const SERIES_CLASSNAMES = {
|
|
2
|
+
WATERFALL_BREAKDOWN: 'waterfallBreakdown',
|
|
3
|
+
TOTAL_SERIES: 'totalSeries',
|
|
4
|
+
TREND_SERIES: 'trendSeries',
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const EMPTY_ROW_N_KEYS = [[]];
|
|
8
|
+
const NULL_VALUE = '[null]';
|
|
9
|
+
|
|
1
10
|
let getHighchartsRenderer = function ($, document, Highcharts, default_colors, highchartsRenderer,
|
|
2
11
|
DataFormatter, lodash, moment_lib, isNewAngular) {
|
|
3
12
|
|
|
@@ -51,6 +60,32 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
51
60
|
].join(''), 'i');
|
|
52
61
|
highchartsRenderer.isMobile = mobileBrowserRegex.test(navigator.userAgent);
|
|
53
62
|
|
|
63
|
+
highchartsRenderer.CHART_TYPES = {
|
|
64
|
+
LINE_CHART: 'line-chart',
|
|
65
|
+
LINE_CHART_SMOOTH: 'line-chart-smooth',
|
|
66
|
+
COLUMN_CHART: 'column-chart',
|
|
67
|
+
COLUMN_CHART_STACKED: 'column-chart-stacked',
|
|
68
|
+
COMBO_CHART: 'combo-chart',
|
|
69
|
+
COMBO_COLUMN_CHART: 'combo-column-chart',
|
|
70
|
+
COMBO_STACKED_CHART: 'combo-stacked-chart',
|
|
71
|
+
BAR_CHART: 'bar-chart',
|
|
72
|
+
BAR_CHART_STACKED: 'bar-chart-stacked',
|
|
73
|
+
SCATTER_CHART: 'scatter-chart',
|
|
74
|
+
AREA_CHART: 'area-chart',
|
|
75
|
+
AREA_CHART_SMOOTH: 'area-chart-smooth',
|
|
76
|
+
TABLE_ONLY: 'table_only',
|
|
77
|
+
POLYGON_CHART: 'polygon-chart',
|
|
78
|
+
PIE_CHART: 'pie-chart',
|
|
79
|
+
PIE_CHART_DRILLDOWN: 'pie-chart-drilldown',
|
|
80
|
+
GAUGE_SOLID_CHART: 'gauge-solid-chart',
|
|
81
|
+
GAUGE_CHART: 'gauge-chart',
|
|
82
|
+
KPI_WIDGET: 'kpi-widget',
|
|
83
|
+
TEXT_WIDGET: 'text-widget',
|
|
84
|
+
WATERFALL_BREAKDOWN: 'waterfall-chart-breakdown',
|
|
85
|
+
PUBLISHED_ITEM: 'published_item',
|
|
86
|
+
RICH_TEXT: 'rich_text',
|
|
87
|
+
};
|
|
88
|
+
|
|
54
89
|
highchartsRenderer.highcharts_theme = {
|
|
55
90
|
"colors": highchartsRenderer.defaults_colors,
|
|
56
91
|
"chart": {
|
|
@@ -423,7 +458,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
423
458
|
|
|
424
459
|
const labelOptions = lodash.get(opts.chartOptions, 'label') || lodash.get(opts.chartOptions, 'label_pie');
|
|
425
460
|
const othersName = opts.total_value_options ?
|
|
426
|
-
|
|
461
|
+
highchartsRenderer.getOthersName(opts) :
|
|
427
462
|
undefined;
|
|
428
463
|
var drOthersInColumn = lodash.find(
|
|
429
464
|
pivotData.getColKeys(),
|
|
@@ -445,6 +480,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
445
480
|
|| this.series.options.className === 'trendSeries') {
|
|
446
481
|
rows = [];
|
|
447
482
|
}
|
|
483
|
+
|
|
448
484
|
var cols = this.key;
|
|
449
485
|
if (typeof (cols) == 'object' && cols.name) {
|
|
450
486
|
cols = cols.name;
|
|
@@ -500,6 +536,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
500
536
|
}
|
|
501
537
|
|
|
502
538
|
const percentageWrapper = percentageArray.length ? `(${percentageArray.join(', ')})` : '';
|
|
539
|
+
|
|
540
|
+
if (this.series.options.className === SERIES_CLASSNAMES.WATERFALL_BREAKDOWN) {
|
|
541
|
+
const modifiedRowsAndCols = highchartsRenderer.transformRowsAndColsForBreakdown(rows, cols, this.point, opts);
|
|
542
|
+
rows = modifiedRowsAndCols.rows;
|
|
543
|
+
cols = modifiedRowsAndCols.cols;
|
|
544
|
+
}
|
|
545
|
+
|
|
503
546
|
var aggr = pivotData.getAggregator(rows, cols);
|
|
504
547
|
|
|
505
548
|
const formattedValue = is_drill_down_pie || labelOptions.show_value ? $.pivotUtilities.getFormattedNumber(value, aggr, opts, true) : '';
|
|
@@ -570,6 +613,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
570
613
|
}
|
|
571
614
|
|
|
572
615
|
var func = function () {
|
|
616
|
+
const isWaterfallBreakdown = this.series.options.className === SERIES_CLASSNAMES.WATERFALL_BREAKDOWN;
|
|
617
|
+
|
|
573
618
|
var y = parseFloat(this.y);
|
|
574
619
|
if (pivotData) {
|
|
575
620
|
let series_name = (this.series.name || '') + "";
|
|
@@ -604,8 +649,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
604
649
|
cols = rows;
|
|
605
650
|
rows = temp;
|
|
606
651
|
}
|
|
607
|
-
|
|
608
|
-
var category_text = `<span style="font-weight: bold;">${cols} </span>`;
|
|
652
|
+
|
|
653
|
+
var category_text = `<span style="font-weight: bold;">${ cols }${ isWaterfallBreakdown ? ': ' : ' ' }</span>`;
|
|
609
654
|
if (this.category) {
|
|
610
655
|
category_text = '';
|
|
611
656
|
}
|
|
@@ -617,9 +662,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
617
662
|
if (pivotData.rowAttrs.length == 0) {
|
|
618
663
|
series_text = ': ';
|
|
619
664
|
}
|
|
665
|
+
|
|
666
|
+
if (isWaterfallBreakdown) {
|
|
667
|
+
const modifiedRowsAndCols = highchartsRenderer.transformRowsAndColsForBreakdown(rows, cols, this.point, opts);
|
|
668
|
+
rows = modifiedRowsAndCols.rows;
|
|
669
|
+
cols = modifiedRowsAndCols.cols;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
var aggr = pivotData.getAggregator(rows, cols);
|
|
673
|
+
|
|
620
674
|
let formatted_value_to_return = $.pivotUtilities.getFormattedNumber(y, null, opts);
|
|
621
|
-
if (aggr.value()) {
|
|
622
|
-
formatted_value_to_return = $.pivotUtilities.getFormattedNumber(aggr.value(), aggr, opts);
|
|
675
|
+
if (aggr.value() || isWaterfallBreakdown) {
|
|
676
|
+
formatted_value_to_return = $.pivotUtilities.getFormattedNumber(isWaterfallBreakdown ? y : aggr.value(), aggr, opts);
|
|
623
677
|
}
|
|
624
678
|
|
|
625
679
|
let wrappedFormattedValue = highchartsRenderer.getSpanWrapper(formatted_value_to_return);
|
|
@@ -628,7 +682,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
628
682
|
category_text = tooltipOptions.show_x_axis ? category_text : '';
|
|
629
683
|
series_text = tooltipOptions.show_data_series ? series_text : '';
|
|
630
684
|
|
|
631
|
-
let to_return = category_text + series_text + wrappedFormattedValue;
|
|
685
|
+
let to_return = isWaterfallBreakdown ? `${ category_text }${ wrappedFormattedValue }` : category_text + series_text + wrappedFormattedValue;
|
|
632
686
|
|
|
633
687
|
if (is_drill_down_pie) {
|
|
634
688
|
to_return = wrappedFormattedValue;
|
|
@@ -964,7 +1018,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
964
1018
|
const n = col_n_keys.length;
|
|
965
1019
|
const xSum = (1 + n) / 2 * n;
|
|
966
1020
|
const trendSerieses = [];
|
|
967
|
-
const othersName =
|
|
1021
|
+
const othersName = highchartsRenderer.getOthersName(opts);
|
|
968
1022
|
|
|
969
1023
|
lodash.forEach(row_n_keys, function (row_n_value) {
|
|
970
1024
|
var ob = {};
|
|
@@ -1061,7 +1115,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1061
1115
|
|
|
1062
1116
|
opts.chart_series = []
|
|
1063
1117
|
|
|
1064
|
-
if (!lodash.isEqual(row_n_keys,
|
|
1118
|
+
if (!lodash.isEqual(row_n_keys, EMPTY_ROW_N_KEYS)) {
|
|
1065
1119
|
chart_series.forEach(series => {
|
|
1066
1120
|
opts.chart_series.push(series.name);
|
|
1067
1121
|
})
|
|
@@ -1112,7 +1166,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1112
1166
|
const n = col_n_keys.length;
|
|
1113
1167
|
const xSum = (1 + n) / 2 * n;
|
|
1114
1168
|
const trendSerieses = [];
|
|
1115
|
-
const othersName =
|
|
1169
|
+
const othersName = highchartsRenderer.getOthersName(opts);
|
|
1116
1170
|
|
|
1117
1171
|
lodash.forEach(row_n_keys, function (row_n_value) {
|
|
1118
1172
|
let ySum = 0;
|
|
@@ -1128,7 +1182,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1128
1182
|
allowOverlap: additionOptions && additionOptions.label ? additionOptions.label.overlap : false,
|
|
1129
1183
|
enabled: additionOptions && additionOptions.label ? additionOptions.label.show : true,
|
|
1130
1184
|
formatter: highchartsRenderer.defaultDataLabelFormatter(pivotData, {'chartOptions': additionOptions, total_value_options: opts.total_value_options}),
|
|
1131
|
-
style: highchartsRenderer.getDataLabelsStyle(additionOptions)
|
|
1185
|
+
style: highchartsRenderer.getDataLabelsStyle(additionOptions),
|
|
1132
1186
|
}
|
|
1133
1187
|
|
|
1134
1188
|
ob = highchartsRenderer.getDataLabelsOptions(additionOptions, ob);
|
|
@@ -1221,7 +1275,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1221
1275
|
|
|
1222
1276
|
let weights = { line: 2,spline: 3 ,area:-2, areaspline: -1, scatter:4, column: 1 };
|
|
1223
1277
|
|
|
1224
|
-
if (opts.comboOptions && lodash.includes(chartType,'combo') && !lodash.isEqual(row_n_keys,
|
|
1278
|
+
if (opts.comboOptions && lodash.includes(chartType,'combo') && !lodash.isEqual(row_n_keys, EMPTY_ROW_N_KEYS)) {
|
|
1225
1279
|
chart_series.forEach((series, seriesIndex) => {
|
|
1226
1280
|
const savedSeriesOption = lodash.find(opts.comboOptions.seriesOptions, {series: series.name});
|
|
1227
1281
|
if (savedSeriesOption) {
|
|
@@ -1234,7 +1288,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1234
1288
|
|
|
1235
1289
|
opts.chart_series = []
|
|
1236
1290
|
|
|
1237
|
-
if (!lodash.isEqual(row_n_keys,
|
|
1291
|
+
if (!lodash.isEqual(row_n_keys, EMPTY_ROW_N_KEYS)) {
|
|
1238
1292
|
chart_series.forEach(series => {
|
|
1239
1293
|
opts.chart_series.push(series.name);
|
|
1240
1294
|
})
|
|
@@ -1284,6 +1338,94 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1284
1338
|
return chart_series;
|
|
1285
1339
|
}
|
|
1286
1340
|
|
|
1341
|
+
highchartsRenderer.ptCreateWaterfallBreakdownSeries = function (pivotData, onlyNumbers, additionOptions, opts) {
|
|
1342
|
+
const colorOptions = opts.breakdown_options.colors;
|
|
1343
|
+
var chart_series = [],
|
|
1344
|
+
row_n_keys = pivotData.getRowKeys(),
|
|
1345
|
+
col_n_keys = pivotData.getColKeys();
|
|
1346
|
+
|
|
1347
|
+
if (row_n_keys.length === 0) {
|
|
1348
|
+
row_n_keys.push([]);
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
let resultObject = {
|
|
1352
|
+
data: [],
|
|
1353
|
+
dataLabels: {
|
|
1354
|
+
allowOverlap: additionOptions && additionOptions.label ? additionOptions.label.overlap : false,
|
|
1355
|
+
enabled: additionOptions && additionOptions.label ? additionOptions.label.show : true,
|
|
1356
|
+
formatter: highchartsRenderer.defaultDataLabelFormatter(pivotData, {'chartOptions': additionOptions, total_value_options: opts.total_value_options}),
|
|
1357
|
+
style: highchartsRenderer.getDataLabelsStyle(additionOptions),
|
|
1358
|
+
},
|
|
1359
|
+
upColor: colorOptions.increase,
|
|
1360
|
+
color: colorOptions.decrease,
|
|
1361
|
+
className: SERIES_CLASSNAMES.WATERFALL_BREAKDOWN
|
|
1362
|
+
};
|
|
1363
|
+
resultObject = highchartsRenderer.getDataLabelsOptions(additionOptions, resultObject);
|
|
1364
|
+
|
|
1365
|
+
const breakdownValues = [];
|
|
1366
|
+
lodash.forEach(col_n_keys, function(col_n_value, col_index) {
|
|
1367
|
+
breakdownValues.push([]);
|
|
1368
|
+
lodash.forEach(row_n_keys, function (row_n_value, row_index) {
|
|
1369
|
+
var agg = pivotData.getAggregator(row_n_value, col_n_value);
|
|
1370
|
+
var val = agg.value();
|
|
1371
|
+
|
|
1372
|
+
if (val != null && $.isNumeric(val)) {
|
|
1373
|
+
val = parseFloat(val);
|
|
1374
|
+
} else if (onlyNumbers) {
|
|
1375
|
+
val = NaN;
|
|
1376
|
+
} else {
|
|
1377
|
+
val = 0;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
breakdownValues[col_index][row_index] = val;
|
|
1381
|
+
|
|
1382
|
+
if (col_index) {
|
|
1383
|
+
const value = val - breakdownValues[col_index - 1][row_index];
|
|
1384
|
+
|
|
1385
|
+
if (value) {
|
|
1386
|
+
var tmoobj = {};
|
|
1387
|
+
var key = row_n_value;
|
|
1388
|
+
if (lodash.isArray(row_n_value)) {
|
|
1389
|
+
key = row_n_value[0];
|
|
1390
|
+
}
|
|
1391
|
+
tmoobj.name = lodash.unescape(key);
|
|
1392
|
+
|
|
1393
|
+
if (tmoobj.name) {
|
|
1394
|
+
tmoobj.name = tmoobj.name.replace('DR_Others', highchartsRenderer.getOthersName(opts));
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
if (lodash.isEmpty(String(tmoobj.name))) {
|
|
1398
|
+
tmoobj.name = lodash.unescape(col_n_value);
|
|
1399
|
+
tmoobj.visible = false;
|
|
1400
|
+
}
|
|
1401
|
+
tmoobj.y = value;
|
|
1402
|
+
tmoobj.colKeys = [lodash.unescape(col_n_keys[col_index - 1]), lodash.unescape(col_n_value)];
|
|
1403
|
+
resultObject.data.push(tmoobj);
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
});
|
|
1407
|
+
|
|
1408
|
+
resultObject.data.push({
|
|
1409
|
+
y: pivotData.colTotals[col_n_value].sum,
|
|
1410
|
+
name: lodash.unescape(col_n_value).replace('DR_Others', highchartsRenderer.getOthersName(opts)),
|
|
1411
|
+
isSum: !!col_index,
|
|
1412
|
+
isTotal: true,
|
|
1413
|
+
color: colorOptions.total,
|
|
1414
|
+
});
|
|
1415
|
+
});
|
|
1416
|
+
|
|
1417
|
+
chart_series.push(resultObject);
|
|
1418
|
+
|
|
1419
|
+
opts.chart_series = [];
|
|
1420
|
+
if (!lodash.isEqual(row_n_keys, EMPTY_ROW_N_KEYS)) {
|
|
1421
|
+
chart_series.forEach(series => {
|
|
1422
|
+
opts.chart_series.push(series.name);
|
|
1423
|
+
});
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
return chart_series;
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1287
1429
|
highchartsRenderer.setChartTypeBySeriesType = function (type, series) {
|
|
1288
1430
|
const types = {
|
|
1289
1431
|
'line-chart': 'line',
|
|
@@ -1397,7 +1539,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1397
1539
|
var num_rows = row_n_keys.length;
|
|
1398
1540
|
|
|
1399
1541
|
const isOthersIncludedInRow = num_rows === 1 && lodash.includes(row_n_keys[0], 'DR_Others');
|
|
1400
|
-
const othersName =
|
|
1542
|
+
const othersName = highchartsRenderer.getOthersName(opts);
|
|
1401
1543
|
|
|
1402
1544
|
lodash.forEach(col_n_keys, function (col_n_value) {
|
|
1403
1545
|
const row_n_value = isOthersIncludedInRow ? row_n_keys[0] : [];
|
|
@@ -1444,7 +1586,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1444
1586
|
var num_cols = col_n_keys.length;
|
|
1445
1587
|
var num_rows = row_n_keys.length;
|
|
1446
1588
|
|
|
1447
|
-
const othersName =
|
|
1589
|
+
const othersName = highchartsRenderer.getOthersName(opts);
|
|
1448
1590
|
|
|
1449
1591
|
lodash.forEach(col_n_keys, function (col_n_value) {
|
|
1450
1592
|
var col_ob = {};
|
|
@@ -3041,11 +3183,110 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
3041
3183
|
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
|
3042
3184
|
};
|
|
3043
3185
|
|
|
3186
|
+
highchartsRenderer.ptRenderWaterfallBreakdown = function (pivotData, opts, drilldownFunc, chartType) {
|
|
3187
|
+
let chartOptions = {};
|
|
3188
|
+
const additionOptions = opts.chartOptions
|
|
3189
|
+
? opts.chartOptions
|
|
3190
|
+
: highchartsRenderer.getDefaultValueForChart(highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN);
|
|
3191
|
+
|
|
3192
|
+
chartOptions.chart = {
|
|
3193
|
+
type: 'waterfall',
|
|
3194
|
+
zoomType: additionOptions && additionOptions.chart && additionOptions.chart.zoom_type ? additionOptions.chart.zoom_type : 'None',
|
|
3195
|
+
};
|
|
3196
|
+
if (disableAnimation) {
|
|
3197
|
+
chartOptions.chart.animation = false;
|
|
3198
|
+
}
|
|
3199
|
+
|
|
3200
|
+
const breakdownFieldIsNotSet = lodash.some(pivotData.getRowKeys(), rowKey => !rowKey || lodash.isArray(rowKey) && !rowKey.length);
|
|
3201
|
+
chartOptions.xAxis = {
|
|
3202
|
+
type: 'category',
|
|
3203
|
+
crosshair: true,
|
|
3204
|
+
min: 0,
|
|
3205
|
+
title: {
|
|
3206
|
+
text : additionOptions && additionOptions.axisX ? additionOptions.axisX.name : '',
|
|
3207
|
+
},
|
|
3208
|
+
uniqueNames: breakdownFieldIsNotSet,
|
|
3209
|
+
};
|
|
3210
|
+
|
|
3211
|
+
highchartsRenderer.setTitleAndSubTitle(chartOptions, opts, additionOptions);
|
|
3212
|
+
|
|
3213
|
+
chartOptions.yAxis = {
|
|
3214
|
+
min: null,
|
|
3215
|
+
max: null,
|
|
3216
|
+
title: {
|
|
3217
|
+
text: additionOptions && additionOptions.axisY ? additionOptions.axisY.name : '',
|
|
3218
|
+
autoylabel: additionOptions && additionOptions.axisY ? additionOptions.axisY.autoylabel : ''
|
|
3219
|
+
},
|
|
3220
|
+
labels: {
|
|
3221
|
+
formatter: highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts)
|
|
3222
|
+
},
|
|
3223
|
+
};
|
|
3224
|
+
if (additionOptions) {
|
|
3225
|
+
highchartsRenderer.setYAxisMinMax(chartOptions.yAxis, additionOptions.axisY);
|
|
3226
|
+
}
|
|
3227
|
+
|
|
3228
|
+
chartOptions.tooltip = {
|
|
3229
|
+
formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
|
|
3230
|
+
valueDecimals: 2,
|
|
3231
|
+
};
|
|
3232
|
+
|
|
3233
|
+
highchartsRenderer.handleGridLines(additionOptions, chartOptions);
|
|
3234
|
+
|
|
3235
|
+
if (lodash.get(opts, 'paletteOptions.widgetPalette', null)) {
|
|
3236
|
+
const mc_palette = lodash.find(lodash.get(opts.paletteOptions, 'monochromePalettes', []), { selected: true });
|
|
3237
|
+
chartOptions.colors = mc_palette ? mc_palette.colors : opts.paletteOptions.widgetPalette;
|
|
3238
|
+
} else if (lodash.get(opts, 'paletteOptions.dashboardPalette.colors', null)) {
|
|
3239
|
+
chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
|
|
3240
|
+
}
|
|
3241
|
+
chartOptions.series = highchartsRenderer
|
|
3242
|
+
.ptCreateWaterfallBreakdownSeries(pivotData, null, additionOptions, opts);
|
|
3243
|
+
|
|
3244
|
+
chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
|
|
3245
|
+
chartOptions.plotOptions = {
|
|
3246
|
+
waterfall: {
|
|
3247
|
+
pointPadding: 0.2,
|
|
3248
|
+
borderWidth: 0,
|
|
3249
|
+
borderRadius: 1,
|
|
3250
|
+
lineWidth: 0,
|
|
3251
|
+
},
|
|
3252
|
+
series: {
|
|
3253
|
+
animation: !disableAnimation,
|
|
3254
|
+
cropThreshold: 1000,
|
|
3255
|
+
dataLabels: {
|
|
3256
|
+
allowOverlap: additionOptions && additionOptions.label ? additionOptions.label.overlap : false,
|
|
3257
|
+
enabled: additionOptions && additionOptions.label ? additionOptions.label.show : true,
|
|
3258
|
+
formatter: highchartsRenderer.defaultDataLabelFormatter(pivotData, opts),
|
|
3259
|
+
style: highchartsRenderer.getDataLabelsStyle(additionOptions),
|
|
3260
|
+
inside: false
|
|
3261
|
+
}
|
|
3262
|
+
}
|
|
3263
|
+
};
|
|
3264
|
+
|
|
3265
|
+
if (opts.drillDownListFunc) {
|
|
3266
|
+
chartOptions.plotOptions.series.cursor = 'pointer';
|
|
3267
|
+
chartOptions.plotOptions.series.point = {
|
|
3268
|
+
events: {
|
|
3269
|
+
click: opts.drillDownListFunc
|
|
3270
|
+
}
|
|
3271
|
+
};
|
|
3272
|
+
}
|
|
3273
|
+
|
|
3274
|
+
chartOptions.legend = {
|
|
3275
|
+
enabled: false
|
|
3276
|
+
};
|
|
3277
|
+
|
|
3278
|
+
return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
|
|
3279
|
+
};
|
|
3280
|
+
|
|
3044
3281
|
highchartsRenderer.formatFieldValue = function (field, value) {
|
|
3045
3282
|
let currentType = '';
|
|
3283
|
+
let format = field.format;
|
|
3046
3284
|
switch (field.type) {
|
|
3047
3285
|
case 'Date':
|
|
3048
3286
|
currentType = 'd';
|
|
3287
|
+
if (!format) {
|
|
3288
|
+
format = 'MM/DD/YYYY'
|
|
3289
|
+
}
|
|
3049
3290
|
break;
|
|
3050
3291
|
case 'Float':
|
|
3051
3292
|
case 'Integer':
|
|
@@ -3054,7 +3295,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
3054
3295
|
default:
|
|
3055
3296
|
return value;
|
|
3056
3297
|
}
|
|
3057
|
-
const formattedValue = highchartsRenderer.formatValue(currentType,
|
|
3298
|
+
const formattedValue = highchartsRenderer.formatValue(currentType, format, value, null);
|
|
3058
3299
|
if (formattedValue && formattedValue.value === 'Invalid Date') {
|
|
3059
3300
|
formattedValue.value = value;
|
|
3060
3301
|
}
|
|
@@ -4105,7 +4346,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
4105
4346
|
}
|
|
4106
4347
|
};
|
|
4107
4348
|
|
|
4108
|
-
highchartsRenderer.rhPivotView = function (rowData, options, isTable = false) {
|
|
4349
|
+
highchartsRenderer.rhPivotView = function (rowData, options, isTable = false, widget = null) {
|
|
4109
4350
|
if (!rowData || !rowData) {
|
|
4110
4351
|
if (options.onlyOptions) {
|
|
4111
4352
|
return {};
|
|
@@ -4113,6 +4354,32 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
4113
4354
|
return null;
|
|
4114
4355
|
}
|
|
4115
4356
|
|
|
4357
|
+
if (widget && widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
|
|
4358
|
+
const breakdownSettings = widget.options.breakdown_options.settings;
|
|
4359
|
+
const maxCategories = breakdownSettings.maxCategoriesCount;
|
|
4360
|
+
const minCategories = breakdownSettings.minCategoriesCount;
|
|
4361
|
+
const uniqueCategories = lodash.filter(
|
|
4362
|
+
lodash.uniq(
|
|
4363
|
+
lodash.map(rowData, row => row[widget.cols[0].name])
|
|
4364
|
+
),
|
|
4365
|
+
value => !!value
|
|
4366
|
+
);
|
|
4367
|
+
|
|
4368
|
+
if (uniqueCategories && (uniqueCategories.length > maxCategories || uniqueCategories.length < minCategories )) {
|
|
4369
|
+
const commonErrorSentence = `Please choose ${ minCategories }-${ maxCategories } items in the Category section.`
|
|
4370
|
+
options.error_has_occurred = true;
|
|
4371
|
+
options.error_params = {
|
|
4372
|
+
title: uniqueCategories.length > maxCategories
|
|
4373
|
+
? `There is too much data. ${ commonErrorSentence }`
|
|
4374
|
+
: `Not enough data. ${ commonErrorSentence }`,
|
|
4375
|
+
text: '',
|
|
4376
|
+
btnText: 'Edit Widget',
|
|
4377
|
+
class: 'too-much-data',
|
|
4378
|
+
}
|
|
4379
|
+
return highchartsRenderer.getNoDataResult(options.rendererOptions, true);
|
|
4380
|
+
}
|
|
4381
|
+
}
|
|
4382
|
+
|
|
4116
4383
|
if (rowData.length == 0) {
|
|
4117
4384
|
if (options.onlyOptions) {
|
|
4118
4385
|
return {};
|
|
@@ -6521,6 +6788,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
6521
6788
|
};
|
|
6522
6789
|
|
|
6523
6790
|
highchartsRenderer.chartsTypesInfo = {
|
|
6791
|
+
[highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN]: {
|
|
6792
|
+
name: 'Waterfall Breakdown Chart ',
|
|
6793
|
+
label: 'Waterfall Breakdown Chart ',
|
|
6794
|
+
title: 'TODO: add text',
|
|
6795
|
+
description: 'TODO: add text',
|
|
6796
|
+
axisName: 'Category',
|
|
6797
|
+
legendName: 'Breakdown',
|
|
6798
|
+
startedMessage: 'To get started, drag one field to the Category and one field to the Value section.',
|
|
6799
|
+
axisTooltipTitle: 'TODO: add text',
|
|
6800
|
+
legendTooltipTitle: 'TODO: add text',
|
|
6801
|
+
},
|
|
6524
6802
|
'combo-chart': {
|
|
6525
6803
|
name: 'Combo Chart ',
|
|
6526
6804
|
label: 'Combo Chart ',
|
|
@@ -7153,6 +7431,32 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7153
7431
|
}
|
|
7154
7432
|
]
|
|
7155
7433
|
},
|
|
7434
|
+
{
|
|
7435
|
+
type: 'waterfall-chart',
|
|
7436
|
+
name: 'Waterfall',
|
|
7437
|
+
hidden: true,
|
|
7438
|
+
class: 'google-visualization-charteditor-mini-column',
|
|
7439
|
+
subtypes: [
|
|
7440
|
+
{
|
|
7441
|
+
type: highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN,
|
|
7442
|
+
name: highchartsRenderer.chartsTypesInfo[highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN].name,
|
|
7443
|
+
class: 'google-visualization-charteditor-thumbs-columnchart',
|
|
7444
|
+
render: highchartsRenderer.ptRenderWaterfallBreakdown,
|
|
7445
|
+
suboptions: [
|
|
7446
|
+
highchartsRenderer.suboptions["axisY"],
|
|
7447
|
+
highchartsRenderer.suboptions["axisX"],
|
|
7448
|
+
highchartsRenderer.suboptions["tooltips"],
|
|
7449
|
+
highchartsRenderer.suboptions["label"],
|
|
7450
|
+
highchartsRenderer.suboptions["subtitle"],
|
|
7451
|
+
highchartsRenderer.suboptions["widget_library"],
|
|
7452
|
+
highchartsRenderer.suboptions["chart"],
|
|
7453
|
+
highchartsRenderer.suboptions["negative_number_format"],
|
|
7454
|
+
highchartsRenderer.suboptions["advanced"],
|
|
7455
|
+
highchartsRenderer.suboptions["legends"],
|
|
7456
|
+
]
|
|
7457
|
+
},
|
|
7458
|
+
]
|
|
7459
|
+
},
|
|
7156
7460
|
];
|
|
7157
7461
|
|
|
7158
7462
|
highchartsRenderer.richTextSubType = {
|
|
@@ -7602,6 +7906,16 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7602
7906
|
|
|
7603
7907
|
};
|
|
7604
7908
|
|
|
7909
|
+
highchartsRenderer.createDateFromString = function (dateString, format) {
|
|
7910
|
+
if ((format && !highchartsRenderer.isDateFormat(dateString, format)) || !highchartsRenderer.isDate(dateString)) {
|
|
7911
|
+
return null;
|
|
7912
|
+
}
|
|
7913
|
+
const utcDate = format
|
|
7914
|
+
? moment_lib.utc(dateString, format, true)
|
|
7915
|
+
: moment_lib.utc(dateString);
|
|
7916
|
+
return utcDate.startOf('day').unix();
|
|
7917
|
+
}
|
|
7918
|
+
|
|
7605
7919
|
highchartsRenderer.prepareDrillDownFilters = function (r_keys, c_keys, widget) {
|
|
7606
7920
|
let row_key = r_keys;
|
|
7607
7921
|
let col_key = c_keys;
|
|
@@ -7615,26 +7929,46 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7615
7929
|
|
|
7616
7930
|
let filters = [];
|
|
7617
7931
|
|
|
7618
|
-
|
|
7619
|
-
|
|
7620
|
-
|
|
7621
|
-
|
|
7622
|
-
|
|
7932
|
+
if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
|
|
7933
|
+
const colFilter = highchartsRenderer.createFilterObject(widget.cols[0]);
|
|
7934
|
+
const labels = [];
|
|
7935
|
+
colFilter.values = [];
|
|
7936
|
+
lodash.forEach(col_key, function (col_value) {
|
|
7937
|
+
if (widget.cols[0].type === 'Date') {
|
|
7938
|
+
let date = highchartsRenderer.createDateFromString(
|
|
7623
7939
|
col_value,
|
|
7624
|
-
highchartsRenderer.getDateFieldFormat(widget, widget.cols[
|
|
7940
|
+
highchartsRenderer.getDateFieldFormat(widget, widget.cols[0])
|
|
7625
7941
|
);
|
|
7626
|
-
|
|
7627
|
-
if ($.isEmptyObject(datetrange)) {
|
|
7628
|
-
return;
|
|
7629
|
-
}
|
|
7630
|
-
temp.values = datetrange;
|
|
7631
|
-
temp.values.label = col_value;
|
|
7942
|
+
colFilter.values.push(date);
|
|
7632
7943
|
} else {
|
|
7633
|
-
|
|
7944
|
+
colFilter.values.push(col_value);
|
|
7634
7945
|
}
|
|
7635
|
-
|
|
7636
|
-
}
|
|
7637
|
-
|
|
7946
|
+
labels.push(col_value);
|
|
7947
|
+
});
|
|
7948
|
+
colFilter.value_to_show = labels.join(', ');
|
|
7949
|
+
filters.push(colFilter);
|
|
7950
|
+
} else {
|
|
7951
|
+
lodash.forEach(col_key, function (col_value, index) {
|
|
7952
|
+
if (widget && widget.cols[index]) {
|
|
7953
|
+
let temp = highchartsRenderer.createFilterObject(widget.cols[index]);
|
|
7954
|
+
if (widget.cols[index].type === 'Date') {
|
|
7955
|
+
let datetrange = highchartsRenderer.createDateTypeFromValue(
|
|
7956
|
+
col_value,
|
|
7957
|
+
highchartsRenderer.getDateFieldFormat(widget, widget.cols[index])
|
|
7958
|
+
);
|
|
7959
|
+
|
|
7960
|
+
if ($.isEmptyObject(datetrange)) {
|
|
7961
|
+
return;
|
|
7962
|
+
}
|
|
7963
|
+
temp.values = datetrange;
|
|
7964
|
+
temp.values.label = col_value;
|
|
7965
|
+
} else {
|
|
7966
|
+
temp.values = [col_value];
|
|
7967
|
+
}
|
|
7968
|
+
filters.push(temp);
|
|
7969
|
+
}
|
|
7970
|
+
});
|
|
7971
|
+
}
|
|
7638
7972
|
|
|
7639
7973
|
lodash.forEach(row_key, function (row_value, index) {
|
|
7640
7974
|
if (widget && widget.rows[index]) {
|
|
@@ -7679,6 +8013,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7679
8013
|
});
|
|
7680
8014
|
|
|
7681
8015
|
lodash.forEach(filters, function (filter) {
|
|
8016
|
+
if (filter.value_to_show) {
|
|
8017
|
+
return;
|
|
8018
|
+
}
|
|
7682
8019
|
if (Array.isArray(filter.values)) {
|
|
7683
8020
|
if (filter.type) {
|
|
7684
8021
|
for (let i = 0; i < filter.values.length; i++) {
|
|
@@ -7717,15 +8054,36 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7717
8054
|
filters.push(highchartsRenderer.createDrillDownFilterObject(widget, widget.rows[i], rowKey[i]))
|
|
7718
8055
|
}
|
|
7719
8056
|
}
|
|
7720
|
-
|
|
7721
|
-
|
|
8057
|
+
|
|
8058
|
+
if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
|
|
8059
|
+
let filter = lodash.find(filters, {name: widget.cols[0].name});
|
|
7722
8060
|
if (filter) {
|
|
7723
8061
|
filter.is_excluded = false;
|
|
7724
|
-
filter.values = widget.cols[i].type === 'Date' ?
|
|
7725
|
-
highchartsRenderer.createDateTypeFromValue(colKey[i], highchartsRenderer.getDateFieldFormat(widget, widget.cols[i])) :
|
|
7726
|
-
[colKey[i]];
|
|
7727
8062
|
} else {
|
|
7728
|
-
|
|
8063
|
+
filter = highchartsRenderer.createDrillDownFilterObject(widget, widget.cols[0], colKey[0]);
|
|
8064
|
+
}
|
|
8065
|
+
filter.values = [];
|
|
8066
|
+
for (let i = 0; i < colKey.length; i++) {
|
|
8067
|
+
filter.values.push(
|
|
8068
|
+
widget.cols[0].type === 'Date'
|
|
8069
|
+
? highchartsRenderer.createDateFromString(
|
|
8070
|
+
colKey[i],
|
|
8071
|
+
highchartsRenderer.getDateFieldFormat(widget, widget.cols[0])
|
|
8072
|
+
)
|
|
8073
|
+
: colKey[i]
|
|
8074
|
+
);
|
|
8075
|
+
}
|
|
8076
|
+
} else {
|
|
8077
|
+
for (let i = 0; i < colKey.length; i++) {
|
|
8078
|
+
let filter = lodash.find(filters, {name: widget.cols[i].name});
|
|
8079
|
+
if (filter) {
|
|
8080
|
+
filter.is_excluded = false;
|
|
8081
|
+
filter.values = widget.cols[i].type === 'Date' ?
|
|
8082
|
+
highchartsRenderer.createDateTypeFromValue(colKey[i], highchartsRenderer.getDateFieldFormat(widget, widget.cols[i])) :
|
|
8083
|
+
[colKey[i]];
|
|
8084
|
+
} else {
|
|
8085
|
+
filters.push(highchartsRenderer.createDrillDownFilterObject(widget, widget.cols[i], colKey[i]))
|
|
8086
|
+
}
|
|
7729
8087
|
}
|
|
7730
8088
|
}
|
|
7731
8089
|
return filters;
|
|
@@ -7817,7 +8175,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7817
8175
|
if ($.pivotUtilities && !$.pivotUtilities.additionalFieldsList) {
|
|
7818
8176
|
$.pivotUtilities.additionalFieldsList = [
|
|
7819
8177
|
{key: 'DR_Average', name: 'DR_Average'},
|
|
7820
|
-
{key: 'DR_Others', name:
|
|
8178
|
+
{key: 'DR_Others', name: highchartsRenderer.getOthersName(widget.options)}
|
|
7821
8179
|
];
|
|
7822
8180
|
}
|
|
7823
8181
|
|
|
@@ -7866,9 +8224,16 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7866
8224
|
lodash.forEach(datesFields, function (row) {
|
|
7867
8225
|
row.values = lodash.uniq(row.values);
|
|
7868
8226
|
|
|
7869
|
-
const isTimestampDateField = row.type === 'Date' &&
|
|
8227
|
+
const isTimestampDateField = row.type === 'Date' && lodash.some(row.values, value => typeof value ==='number');
|
|
7870
8228
|
if (isTimestampDateField) {
|
|
8229
|
+
const nullValueIndex = row.values.indexOf(NULL_VALUE);
|
|
8230
|
+
if (~nullValueIndex) {
|
|
8231
|
+
row.values.splice(nullValueIndex, 1);
|
|
8232
|
+
}
|
|
7871
8233
|
row.values = row.values.sort((a, b) => a - b);
|
|
8234
|
+
if (~nullValueIndex) {
|
|
8235
|
+
row.values.push(NULL_VALUE);
|
|
8236
|
+
}
|
|
7872
8237
|
} else {
|
|
7873
8238
|
row.values = row.values.sort();
|
|
7874
8239
|
}
|
|
@@ -8058,7 +8423,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
8058
8423
|
subopts.onlyOptions = true;
|
|
8059
8424
|
}
|
|
8060
8425
|
|
|
8061
|
-
let hc_options = highchartsRenderer.rhPivotView(res, subopts, is_table);
|
|
8426
|
+
let hc_options = highchartsRenderer.rhPivotView(res, subopts, is_table, widget_obj);
|
|
8062
8427
|
|
|
8063
8428
|
return hc_options;
|
|
8064
8429
|
}
|
|
@@ -8285,6 +8650,24 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
8285
8650
|
}
|
|
8286
8651
|
}
|
|
8287
8652
|
|
|
8653
|
+
highchartsRenderer.getOthersName = function(opts) {
|
|
8654
|
+
return lodash.get(opts, "total_value_options.filter_options.filteredOutFieldName") || 'Others';
|
|
8655
|
+
}
|
|
8656
|
+
|
|
8657
|
+
highchartsRenderer.transformRowsAndColsForBreakdown = function(rows, cols, point, opts) {
|
|
8658
|
+
const othersIndex = cols.indexOf(highchartsRenderer.getOthersName(opts));
|
|
8659
|
+
if (othersIndex !== -1) {
|
|
8660
|
+
cols[othersIndex] = 'DR_Others';
|
|
8661
|
+
}
|
|
8662
|
+
if (point.options.isTotal) {
|
|
8663
|
+
rows = [];
|
|
8664
|
+
} else {
|
|
8665
|
+
rows = cols;
|
|
8666
|
+
cols = [];
|
|
8667
|
+
}
|
|
8668
|
+
return { rows, cols };
|
|
8669
|
+
}
|
|
8670
|
+
|
|
8288
8671
|
return highchartsRenderer;
|
|
8289
8672
|
};
|
|
8290
8673
|
|