@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datarailsshared/dr_renderer",
3
- "version": "1.2.213-rocket",
3
+ "version": "1.2.214-dragons",
4
4
  "description": "DataRails charts and tables renderer",
5
5
  "keywords": [
6
6
  "datarails",
@@ -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 = useNewUx && opts.chartOptions.table_options.use_new_table_design ? 'pvtTable newPvtTable' : 'pvtTable';
2425
- result = createElement("table", tableClasses , null, {
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, onlyNumbers, additionOptions, opts) {
1346
+ highchartsRenderer.ptCreateWaterfallBreakdownSeries = function (pivotData, additionOptions, opts) {
1343
1347
  const colorOptions = opts.breakdown_options.colors;
1344
- var chart_series = [],
1345
- row_n_keys = pivotData.getRowKeys(),
1346
- col_n_keys = pivotData.getColKeys();
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
- breakdownValues[col_index][row_index] = val;
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
- if (col_index) {
1384
- const value = val - breakdownValues[col_index - 1][row_index];
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
- if (value) {
1387
- var tmoobj = {};
1388
- var key = row_n_value;
1389
- if (lodash.isArray(row_n_value)) {
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
- tmoobj.y = value;
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
- resultObject.data.push({
1410
- y: pivotData.colTotals[col_n_value].sum,
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, null, additionOptions, opts);
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(widgetOptions.rows, function (valObj) {
4970
- fieldOb = lodash.find(fields, {id: valObj.id});
4971
- if (fieldOb) {
4972
- legendFields.push(fieldOb);
4973
- lodash.remove(fields, {id: fieldOb.id});
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
- const scenarioName = 'scenario';
5101
- const fields = highchartsRenderer.objectCopyJsonMethod(selectedTemplate.fields);
5102
- const fieldScenarioAlias = _.find(fields, field => (field.alias || '').toLowerCase() === scenarioName)
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
- lodash.forEach(filters, function (filterObj) {
5126
- fieldOb = lodash.find(fields, { id: filterObj.id });
5127
- if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype === 'list') {
5128
- filterObj.values = filterObj.values.val
5129
- } else if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype !== 'list') {
5130
- fieldOb.values = filterObj.values;
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: dataSeriesFields,
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 && !highchartsRenderer.isDateFormat(dateString, format)) || !highchartsRenderer.isDate(dateString)) {
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
  }
@@ -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
- return `<div class='novixPivot widget-id-${opts.widgetId} ${
893
- useNewUx && opts.chartOptions.table_options.use_new_table_design ? 'handsontable-new' : ''
894
- }' style='overflow:auto'></div>`;
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
+ }