@datarailsshared/dr_renderer 1.2.213-rocket → 1.2.214-dragons
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/dr_pivottable.js +8 -2
- package/src/highcharts_renderer.js +67 -111
- package/src/novix_renderer.js +8 -5
- package/src/pivot.css +24 -8
package/package.json
CHANGED
package/src/dr_pivottable.js
CHANGED
|
@@ -2421,8 +2421,14 @@ let initDRPivotTable = function($, window, document) {
|
|
|
2421
2421
|
if (colAttrs.length > 0 && colKeys.length > 0) {
|
|
2422
2422
|
colHeaders = processKeys(colKeys, "pvtColLabel", 'cols', colAttrs);
|
|
2423
2423
|
}
|
|
2424
|
-
var tableClasses =
|
|
2425
|
-
|
|
2424
|
+
var tableClasses = ['pvtTable'];
|
|
2425
|
+
if (opts.chartOptions.table_options.use_new_table_design) {
|
|
2426
|
+
tableClasses.push('newPvtTable');
|
|
2427
|
+
}
|
|
2428
|
+
if (!pivotData.aggregator().uniq) {
|
|
2429
|
+
tableClasses.push('numbers-to-right');
|
|
2430
|
+
}
|
|
2431
|
+
result = createElement("table", tableClasses.join(' ') , null, {
|
|
2426
2432
|
style: "display: none;"
|
|
2427
2433
|
});
|
|
2428
2434
|
|
|
@@ -87,6 +87,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
87
87
|
EXCEL_VIEWER: 'excel_viewer',
|
|
88
88
|
};
|
|
89
89
|
|
|
90
|
+
highchartsRenderer.VIRTUAL_FIELDS = {
|
|
91
|
+
WATERFALL_VARIANCE: 'DR_WATERFALL_BREAKDOWN_VARIANCE',
|
|
92
|
+
};
|
|
93
|
+
|
|
90
94
|
highchartsRenderer.highcharts_theme = {
|
|
91
95
|
"colors": highchartsRenderer.defaults_colors,
|
|
92
96
|
"chart": {
|
|
@@ -1339,15 +1343,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1339
1343
|
return chart_series;
|
|
1340
1344
|
}
|
|
1341
1345
|
|
|
1342
|
-
highchartsRenderer.ptCreateWaterfallBreakdownSeries = function (pivotData,
|
|
1346
|
+
highchartsRenderer.ptCreateWaterfallBreakdownSeries = function (pivotData, additionOptions, opts) {
|
|
1343
1347
|
const colorOptions = opts.breakdown_options.colors;
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
if (row_n_keys.length === 0) {
|
|
1349
|
-
row_n_keys.push([]);
|
|
1350
|
-
}
|
|
1348
|
+
const chart_series = [];
|
|
1349
|
+
const row_n_keys = pivotData.getRowKeys();
|
|
1350
|
+
const col_n_keys = pivotData.getColKeys();
|
|
1351
1351
|
|
|
1352
1352
|
let resultObject = {
|
|
1353
1353
|
data: [],
|
|
@@ -1363,60 +1363,46 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
1363
1363
|
};
|
|
1364
1364
|
resultObject = highchartsRenderer.getDataLabelsOptions(additionOptions, resultObject);
|
|
1365
1365
|
|
|
1366
|
-
const breakdownValues = [];
|
|
1367
1366
|
lodash.forEach(col_n_keys, function(col_n_value, col_index) {
|
|
1368
|
-
breakdownValues.push([]);
|
|
1369
|
-
lodash.forEach(row_n_keys, function (row_n_value, row_index) {
|
|
1370
|
-
var agg = pivotData.getAggregator(row_n_value, col_n_value);
|
|
1371
|
-
var val = agg.value();
|
|
1372
|
-
|
|
1373
|
-
if (val != null && $.isNumeric(val)) {
|
|
1374
|
-
val = parseFloat(val);
|
|
1375
|
-
} else if (onlyNumbers) {
|
|
1376
|
-
val = NaN;
|
|
1377
|
-
} else {
|
|
1378
|
-
val = 0;
|
|
1379
|
-
}
|
|
1380
1367
|
|
|
1381
|
-
|
|
1368
|
+
const totalColumnValue = pivotData.getAggregator([], col_n_value).value();
|
|
1369
|
+
resultObject.data.push({
|
|
1370
|
+
y: totalColumnValue,
|
|
1371
|
+
name: lodash.unescape(col_n_value).replace('DR_Others', highchartsRenderer.getOthersName(opts)),
|
|
1372
|
+
isSum: !!col_index,
|
|
1373
|
+
isTotal: true,
|
|
1374
|
+
color: colorOptions.total,
|
|
1375
|
+
});
|
|
1382
1376
|
|
|
1383
|
-
|
|
1384
|
-
|
|
1377
|
+
if (col_index !== col_n_keys.length - 1) {
|
|
1378
|
+
lodash.forEach(row_n_keys, function (row_n_value) {
|
|
1379
|
+
const agg = pivotData.getAggregator(row_n_value, col_n_value);
|
|
1380
|
+
let val = agg.value();
|
|
1385
1381
|
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
key = row_n_value[0];
|
|
1391
|
-
}
|
|
1382
|
+
val = $.isNumeric(val) ? parseFloat(val) : 0;
|
|
1383
|
+
if (val) {
|
|
1384
|
+
const tmoobj = {};
|
|
1385
|
+
const key = lodash.isArray(row_n_value) ? row_n_value[0] : row_n_value;
|
|
1392
1386
|
tmoobj.name = lodash.unescape(key);
|
|
1393
|
-
|
|
1387
|
+
|
|
1394
1388
|
if (tmoobj.name) {
|
|
1395
1389
|
tmoobj.name = tmoobj.name.replace('DR_Others', highchartsRenderer.getOthersName(opts));
|
|
1396
1390
|
}
|
|
1397
|
-
|
|
1398
1391
|
if (lodash.isEmpty(String(tmoobj.name))) {
|
|
1399
1392
|
tmoobj.name = lodash.unescape(col_n_value);
|
|
1400
1393
|
tmoobj.visible = false;
|
|
1401
1394
|
}
|
|
1402
|
-
|
|
1395
|
+
|
|
1396
|
+
tmoobj.y = val;
|
|
1403
1397
|
tmoobj.colKeys = [lodash.unescape(col_n_keys[col_index - 1]), lodash.unescape(col_n_value)];
|
|
1404
1398
|
resultObject.data.push(tmoobj);
|
|
1405
1399
|
}
|
|
1406
|
-
}
|
|
1407
|
-
});
|
|
1408
1400
|
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
name: lodash.unescape(col_n_value).replace('DR_Others', highchartsRenderer.getOthersName(opts)),
|
|
1412
|
-
isSum: !!col_index,
|
|
1413
|
-
isTotal: true,
|
|
1414
|
-
color: colorOptions.total,
|
|
1415
|
-
});
|
|
1401
|
+
});
|
|
1402
|
+
}
|
|
1416
1403
|
});
|
|
1417
1404
|
|
|
1418
1405
|
chart_series.push(resultObject);
|
|
1419
|
-
|
|
1420
1406
|
opts.chart_series = [];
|
|
1421
1407
|
if (!lodash.isEqual(row_n_keys, EMPTY_ROW_N_KEYS)) {
|
|
1422
1408
|
chart_series.forEach(series => {
|
|
@@ -3190,6 +3176,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
3190
3176
|
? opts.chartOptions
|
|
3191
3177
|
: highchartsRenderer.getDefaultValueForChart(highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN);
|
|
3192
3178
|
|
|
3179
|
+
pivotData.colKeys = lodash.map(lodash.keys(pivotData.colTotals), key => [key]);
|
|
3180
|
+
|
|
3193
3181
|
chartOptions.chart = {
|
|
3194
3182
|
type: 'waterfall',
|
|
3195
3183
|
zoomType: additionOptions && additionOptions.chart && additionOptions.chart.zoom_type ? additionOptions.chart.zoom_type : 'None',
|
|
@@ -3240,7 +3228,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
3240
3228
|
chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
|
|
3241
3229
|
}
|
|
3242
3230
|
chartOptions.series = highchartsRenderer
|
|
3243
|
-
.ptCreateWaterfallBreakdownSeries(pivotData,
|
|
3231
|
+
.ptCreateWaterfallBreakdownSeries(pivotData, additionOptions, opts);
|
|
3244
3232
|
|
|
3245
3233
|
chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
|
|
3246
3234
|
chartOptions.plotOptions = {
|
|
@@ -4376,7 +4364,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
4376
4364
|
title: 'Data Conflict',
|
|
4377
4365
|
text: `Please adjust your dashboard's reference date and filter selections as \
|
|
4378
4366
|
the quantity of data doesn't match the chart's ${ minCategories }-${ maxCategories } value limit.`,
|
|
4379
|
-
class: 'nodata',
|
|
4367
|
+
class: uniqueCategories.length < minCategories ? 'waterfall-nodata' : 'waterfall-too-much-data',
|
|
4380
4368
|
}
|
|
4381
4369
|
return highchartsRenderer.getNoDataResult(options.rendererOptions, true);
|
|
4382
4370
|
}
|
|
@@ -4965,12 +4953,28 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
4965
4953
|
}
|
|
4966
4954
|
});
|
|
4967
4955
|
|
|
4956
|
+
// add virtual fields to rows if required
|
|
4957
|
+
let rows = widgetOptions.rows;
|
|
4958
|
+
if (!lodash.get(widgetOptions, 'rows.length') && widgetOptions.options.breakdown_options) {
|
|
4959
|
+
rows = [
|
|
4960
|
+
{
|
|
4961
|
+
id: -1,
|
|
4962
|
+
name: highchartsRenderer.VIRTUAL_FIELDS.WATERFALL_VARIANCE,
|
|
4963
|
+
type: 'Text',
|
|
4964
|
+
},
|
|
4965
|
+
];
|
|
4966
|
+
}
|
|
4967
|
+
|
|
4968
4968
|
// fill rows fields
|
|
4969
|
-
lodash.forEach(
|
|
4970
|
-
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
lodash.
|
|
4969
|
+
lodash.forEach(rows, function (valObj) {
|
|
4970
|
+
if (lodash.includes(highchartsRenderer.VIRTUAL_FIELDS, valObj.name)) {
|
|
4971
|
+
legendFields.push(valObj);
|
|
4972
|
+
} else {
|
|
4973
|
+
fieldOb = lodash.find(fields, {id: valObj.id});
|
|
4974
|
+
if (fieldOb) {
|
|
4975
|
+
legendFields.push(fieldOb);
|
|
4976
|
+
lodash.remove(fields, {id: fieldOb.id});
|
|
4977
|
+
}
|
|
4974
4978
|
}
|
|
4975
4979
|
});
|
|
4976
4980
|
|
|
@@ -5097,71 +5101,22 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
5097
5101
|
highchartsRenderer.addTemplateDataToCalcModel = function (selectedTemplate, calcModelOptions) {
|
|
5098
5102
|
highchartsRenderer.setWidgetFieldsToTemplate(selectedTemplate);
|
|
5099
5103
|
|
|
5100
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
5103
|
-
const fieldScenario = _.find(fields, field => (field.name || '').toLowerCase() === scenarioName)
|
|
5104
|
-
const filters = calcModelOptions.config && calcModelOptions.config.filters;
|
|
5105
|
-
|
|
5106
|
-
const filterFields = [];
|
|
5107
|
-
const valueFields = [];
|
|
5108
|
-
const dateFields = [];
|
|
5109
|
-
const dataTypeFields = [];
|
|
5110
|
-
const dataSeriesFields = [];
|
|
5111
|
-
|
|
5112
|
-
let scenarioField = lodash.get(calcModelOptions, 'config.scenario', undefined) || fieldScenarioAlias || fieldScenario;
|
|
5113
|
-
let fieldOb;
|
|
5114
|
-
|
|
5115
|
-
const fillData = (fieldsArr, destinationArr) => {
|
|
5116
|
-
lodash.forEach(fieldsArr, function (valObj) {
|
|
5117
|
-
fieldOb = lodash.find(fields, { id: valObj.id });
|
|
5118
|
-
if (fieldOb) {
|
|
5119
|
-
destinationArr.push(fieldOb);
|
|
5120
|
-
lodash.remove(fields, { id: fieldOb.id });
|
|
5121
|
-
}
|
|
5122
|
-
});
|
|
5123
|
-
}
|
|
5104
|
+
var fields = highchartsRenderer.objectCopyJsonMethod(selectedTemplate.widget_fields);
|
|
5105
|
+
var fieldOb;
|
|
5106
|
+
var selectedFields = [];
|
|
5124
5107
|
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
} else if (fieldOb && filterObj.values && filterObj.values.type === 'advanced') {
|
|
5132
|
-
fieldOb.values = filterObj.values;
|
|
5133
|
-
}
|
|
5134
|
-
if (fieldOb && filterObj.values && filterObj.values instanceof Array) {
|
|
5135
|
-
if (filterObj.is_excluded == true) {
|
|
5136
|
-
fieldOb.excludes = filterObj.values;
|
|
5137
|
-
} else {
|
|
5138
|
-
fieldOb.includes = filterObj.values;
|
|
5139
|
-
}
|
|
5140
|
-
}
|
|
5141
|
-
if (filterObj.allow_nulls && fieldOb) {
|
|
5142
|
-
fieldOb.allow_nulls = filterObj.allow_nulls;
|
|
5108
|
+
// fill selected fields
|
|
5109
|
+
lodash.forEach(calcModelOptions.fields, function (valObj) {
|
|
5110
|
+
fieldOb = lodash.find(fields, {id: valObj.id});
|
|
5111
|
+
if (fieldOb) {
|
|
5112
|
+
selectedFields.push(fieldOb);
|
|
5113
|
+
lodash.remove(fields, {id: fieldOb.id});
|
|
5143
5114
|
}
|
|
5144
5115
|
});
|
|
5145
5116
|
|
|
5146
|
-
const storedGroupByFields = lodash.get(calcModelOptions, 'config.group_by', []);
|
|
5147
|
-
const storedDateFields = [lodash.get(calcModelOptions, 'config.date_field', undefined)].filter(f => !!f);
|
|
5148
|
-
const storedAggFields = [lodash.get(calcModelOptions, 'config.agg_field', undefined)].filter(f => !!f);
|
|
5149
|
-
const storedDataTypeFields = [lodash.get(calcModelOptions, 'config.data_type_field', undefined)].filter(f => !!f);
|
|
5150
|
-
|
|
5151
|
-
fillData(storedGroupByFields, dataSeriesFields);
|
|
5152
|
-
fillData(storedDateFields, dateFields);
|
|
5153
|
-
fillData(storedAggFields, valueFields);
|
|
5154
|
-
fillData(storedDataTypeFields, dataTypeFields);
|
|
5155
|
-
fillData(filters, filterFields);
|
|
5156
|
-
|
|
5157
5117
|
calcModelOptions.pivot = {
|
|
5158
5118
|
fieldsArray: fields,
|
|
5159
|
-
selectedFieldsArray:
|
|
5160
|
-
filtersArray: filterFields,
|
|
5161
|
-
scenarioField,
|
|
5162
|
-
dateFields,
|
|
5163
|
-
dataTypeFields,
|
|
5164
|
-
valueFields
|
|
5119
|
+
selectedFieldsArray: selectedFields
|
|
5165
5120
|
};
|
|
5166
5121
|
}
|
|
5167
5122
|
|
|
@@ -7987,7 +7942,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
7987
7942
|
};
|
|
7988
7943
|
|
|
7989
7944
|
highchartsRenderer.createDateFromString = function (dateString, format) {
|
|
7990
|
-
if ((format &&
|
|
7945
|
+
if (!(format && highchartsRenderer.isDateFormat(dateString, format) || highchartsRenderer.isDate(dateString))) {
|
|
7991
7946
|
return null;
|
|
7992
7947
|
}
|
|
7993
7948
|
const utcDate = format
|
|
@@ -8141,6 +8096,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
8141
8096
|
filter.is_excluded = false;
|
|
8142
8097
|
} else {
|
|
8143
8098
|
filter = highchartsRenderer.createDrillDownFilterObject(widget, widget.cols[0], colKey[0]);
|
|
8099
|
+
filters.push(filter);
|
|
8144
8100
|
}
|
|
8145
8101
|
filter.values = [];
|
|
8146
8102
|
for (let i = 0; i < colKey.length; i++) {
|
|
@@ -8743,7 +8699,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
|
|
|
8743
8699
|
rows = [];
|
|
8744
8700
|
} else {
|
|
8745
8701
|
rows = cols;
|
|
8746
|
-
cols = [];
|
|
8702
|
+
cols = [point.colKeys[1]];
|
|
8747
8703
|
}
|
|
8748
8704
|
return { rows, cols };
|
|
8749
8705
|
}
|
package/src/novix_renderer.js
CHANGED
|
@@ -28,8 +28,6 @@ let initNovixRenderer = function($, window, document, Handsontable){
|
|
|
28
28
|
const delim = " , ";
|
|
29
29
|
const subtotal = "subtotalDatarailsPlaceholder";
|
|
30
30
|
const replaceValue = "SubTotals";
|
|
31
|
-
const useNewUx = document.ReportHippo && document.ReportHippo && document.ReportHippo.user &&
|
|
32
|
-
document.ReportHippo.user.organization.settings && document.ReportHippo.user.organization.settings.use_new_ux;
|
|
33
31
|
|
|
34
32
|
$.pivotUtilities.novix_renderers = {
|
|
35
33
|
|
|
@@ -889,9 +887,14 @@ let initNovixRenderer = function($, window, document, Handsontable){
|
|
|
889
887
|
|
|
890
888
|
// inject the widgetId to the class name so we can separate the tables by it
|
|
891
889
|
// look for the search side on line 653 "opts.$el.find(".widget-id-" + opts.widgetId);"
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
890
|
+
var tableClasses = ['novixPivot', `widget-id-${opts.widgetId}`];
|
|
891
|
+
if (opts.chartOptions.table_options.use_new_table_design) {
|
|
892
|
+
tableClasses.push('handsontable-new');
|
|
893
|
+
}
|
|
894
|
+
if (!pvtData.aggregator().uniq) {
|
|
895
|
+
tableClasses.push('numbers-to-right');
|
|
896
|
+
}
|
|
897
|
+
return `<div class='${tableClasses.join(' ')}' style='overflow:auto'></div>`;
|
|
895
898
|
}
|
|
896
899
|
|
|
897
900
|
};
|
package/src/pivot.css
CHANGED
|
@@ -29,9 +29,6 @@ table.pvtTable tbody tr th > i {
|
|
|
29
29
|
font-size: 10px;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
table.pvtTable .pvtColLabel {text-align: center;}
|
|
33
|
-
table.pvtTable .pvtTotalLabel {text-align: right;}
|
|
34
|
-
|
|
35
32
|
table.pvtTable tbody tr td {
|
|
36
33
|
color: #3D3D3D;
|
|
37
34
|
padding: 5px;
|
|
@@ -263,11 +260,6 @@ table.pvtTable.newPvtTable tbody tr td.rowTotal {
|
|
|
263
260
|
background-color: #dfe6ec !important;
|
|
264
261
|
border-color: #ffffff !important;
|
|
265
262
|
}
|
|
266
|
-
table.pvtTable.newPvtTable .pvtColLabel,
|
|
267
|
-
table.pvtTable.newPvtTable .pvtTotalLabel,
|
|
268
|
-
table.pvtTable.newPvtTable .pvtTotalLabel.rowTotal {
|
|
269
|
-
text-align: left;
|
|
270
|
-
}
|
|
271
263
|
|
|
272
264
|
table.pvtTable.newPvtTable tbody tr th .fa {
|
|
273
265
|
padding: 2px;
|
|
@@ -408,3 +400,27 @@ table.pvtTable.newPvtTable tbody tr td:hover:after {
|
|
|
408
400
|
top: 4px;
|
|
409
401
|
font-size: 12px;
|
|
410
402
|
}
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
/* Table cells alignment */
|
|
406
|
+
table.pvtTable .pvtColLabel {text-align: center;}
|
|
407
|
+
table.pvtTable .pvtTotalLabel {text-align: right;}
|
|
408
|
+
|
|
409
|
+
table.pvtTable.newPvtTable .pvtColLabel,
|
|
410
|
+
table.pvtTable.newPvtTable .pvtTotalLabel,
|
|
411
|
+
table.pvtTable.newPvtTable .pvtTotalLabel.rowTotal {
|
|
412
|
+
text-align: left;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
table.pvtTable thead tr th.pvtColLabel,
|
|
416
|
+
table.pvtTable thead tr th.pvtTotalLabel {
|
|
417
|
+
text-align: center !important;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
table.pvtTable.numbers-to-right tbody tr td.pvtVal,
|
|
421
|
+
table.pvtTable.numbers-to-right tbody tr td.rowTotal.rowTotal,
|
|
422
|
+
table.pvtTable.numbers-to-right tbody tr td.pvtGrandTotal {
|
|
423
|
+
text-align: right !important;
|
|
424
|
+
padding-right: 9px;
|
|
425
|
+
line-height: 15px;
|
|
426
|
+
}
|