@datarailsshared/dr_renderer 1.2.365 → 1.2.366
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/.circleci/config.yml +2 -2
- package/package.json +1 -1
- package/src/dr-renderer-helpers.js +7 -0
- package/src/dr_pivottable.js +63 -14
- package/src/highcharts_renderer.js +1378 -1087
- package/src/novix_renderer.js +13 -11
- package/src/pivottable.js +28 -4
- package/tests/dr-renderer-helpers.test.js +34 -0
- package/tests/highcharts_renderer.test.js +5386 -14
- package/tests/mock/add-in-dynamic-ranges.json +133 -0
- package/tests/mock/add-in-functions.json +412 -0
- package/tests/mock/add-in-tables.json +347 -0
- package/tests/mock/tables.json +2258 -0
- package/tests/mock/widgets.json +411 -0
package/src/novix_renderer.js
CHANGED
@@ -376,13 +376,14 @@ let initNovixRenderer = function($, window, document, Handsontable){
|
|
376
376
|
//data columns
|
377
377
|
if (pvtData.colKeys.length > 0) {
|
378
378
|
|
379
|
+
const formattedColKeys = pvtData.getFormattedColKeys(colKeys);
|
379
380
|
var aux = rowData.length;
|
380
381
|
var startCol = aux;
|
381
|
-
var prior =
|
382
|
+
var prior = formattedColKeys[0][nn];
|
382
383
|
var toMerge = 0;
|
383
|
-
for (var cc = 0; cc <
|
384
|
+
for (var cc = 0; cc < formattedColKeys.length; cc++) {
|
384
385
|
|
385
|
-
var textHeader =
|
386
|
+
var textHeader = formattedColKeys[cc][nn];
|
386
387
|
|
387
388
|
if (nn < pvtData.colAttrs.length - 1 && prior != textHeader) {
|
388
389
|
rowData.push(textHeader);
|
@@ -456,8 +457,9 @@ let initNovixRenderer = function($, window, document, Handsontable){
|
|
456
457
|
// DATA
|
457
458
|
|
458
459
|
var mergeDic = {};
|
460
|
+
const formattedRowKeys = pvtData.getFormattedRowKeys(rowKeys);
|
459
461
|
|
460
|
-
for (var rr = 0; rr <
|
462
|
+
for (var rr = 0; rr < formattedRowKeys.length; rr++) {
|
461
463
|
|
462
464
|
var rowData = [];
|
463
465
|
|
@@ -466,29 +468,29 @@ let initNovixRenderer = function($, window, document, Handsontable){
|
|
466
468
|
mergeDic[cc] = {
|
467
469
|
toMerge: 1,
|
468
470
|
row: 0,
|
469
|
-
priorText:
|
471
|
+
priorText: formattedRowKeys[rr][cc]
|
470
472
|
};
|
471
473
|
}
|
472
474
|
}
|
473
475
|
|
474
476
|
//column for row atts
|
475
477
|
for (var cc = 0; cc < pvtData.rowAttrs.length; cc++) {
|
476
|
-
rowData.push(
|
477
|
-
if (
|
478
|
+
rowData.push(formattedRowKeys[rr][cc]);
|
479
|
+
if (formattedRowKeys[rr][cc] === subtotal) {
|
478
480
|
addMergeCell(rr + pvtData.colAttrs.length + 1, cc, 1, dataSource.fixedColumns - cc, true, true);
|
479
|
-
} else if (cc ===
|
481
|
+
} else if (cc === formattedRowKeys[rr].length - 1 && hasColumnAttr) {
|
480
482
|
addMergeCell(rr + pvtData.colAttrs.length + 1, cc, 1, 2, true, true);
|
481
483
|
}
|
482
484
|
// merge cell (last column)
|
483
485
|
if (opts.chartOptions.table_options.show_column_total && rr != 0 && mergeDic[cc]) { // check for merge dic
|
484
|
-
if (
|
486
|
+
if (formattedRowKeys[rr][cc] == mergeDic[cc].priorText) {
|
485
487
|
mergeDic[cc].toMerge++;
|
486
|
-
} else if (cc <
|
488
|
+
} else if (cc < formattedRowKeys[rr].length - 1) {
|
487
489
|
//create merge cell for this column
|
488
490
|
addMergeCell(mergeDic[cc].row + pvtData.colAttrs.length + 1, cc, mergeDic[cc].toMerge, 1);
|
489
491
|
mergeDic[cc].row = rr;
|
490
492
|
mergeDic[cc].toMerge = 1;
|
491
|
-
mergeDic[cc].priorText =
|
493
|
+
mergeDic[cc].priorText = formattedRowKeys[rr][cc];
|
492
494
|
}
|
493
495
|
}
|
494
496
|
}
|
package/src/pivottable.js
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
const helpers = require('./dr-renderer-helpers');
|
2
|
+
|
1
3
|
// from pivottable@2.23.0
|
2
4
|
let initPivotTable = function($, window, document) {
|
3
5
|
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
@@ -577,6 +579,7 @@ let initPivotTable = function($, window, document) {
|
|
577
579
|
l_mapping = {};
|
578
580
|
for (i in order) {
|
579
581
|
x = order[i];
|
582
|
+
if (order[i] === null) x = '[null]';
|
580
583
|
mapping[x] = i;
|
581
584
|
if (typeof x === "string") {
|
582
585
|
l_mapping[x.toLowerCase()] = i;
|
@@ -684,13 +687,30 @@ let initPivotTable = function($, window, document) {
|
|
684
687
|
return true;
|
685
688
|
});
|
686
689
|
this.tree = {};
|
687
|
-
this.
|
688
|
-
|
690
|
+
this.insights = [];
|
691
|
+
|
692
|
+
this.isKeysSortingDoneOnBackendSide = opts.keysObject && typeof opts.keysObject === 'object' && helpers.backendSortingKeysAreNotEmpty(opts.keysObject);
|
693
|
+
if (this.isKeysSortingDoneOnBackendSide) {
|
694
|
+
this.rowKeys = opts.keysObject.row_keys;
|
695
|
+
this.colKeys = opts.keysObject.col_keys;
|
696
|
+
// TODO: add also for breakdown sort object when BE story is ready.
|
697
|
+
} else {
|
698
|
+
this.rowKeys = [];
|
699
|
+
this.colKeys = [];
|
700
|
+
}
|
701
|
+
|
689
702
|
this.rowTotals = {};
|
690
703
|
this.colTotals = {};
|
691
704
|
this.allTotal = this.aggregator(this, [], []);
|
692
705
|
this.sorted = false;
|
693
706
|
this.dateValuesDictionary = opts.dateValuesDictionary;
|
707
|
+
this.sortByValueAttrs = opts.sortByValueAttrs || [];
|
708
|
+
this.colFormats = opts.colFormats || [];
|
709
|
+
this.rowFormats = opts.rowFormats || [];
|
710
|
+
this.isFormattingAxisLabels = opts.rendererOptions && opts.rendererOptions.isFormattingAxisLabels;
|
711
|
+
this.getFormattedColKeys = (keys) => opts.getFormattedColKeys(this, keys);
|
712
|
+
this.getFormattedRowKeys = (keys) => opts.getFormattedRowKeys(this, keys);
|
713
|
+
|
694
714
|
PivotData.forEachRecord(this.input, this.derivedAttributes, (function(_this) {
|
695
715
|
return function(record) {
|
696
716
|
if (_this.filter(record)) {
|
@@ -850,12 +870,16 @@ let initPivotTable = function($, window, document) {
|
|
850
870
|
};
|
851
871
|
|
852
872
|
PivotData.prototype.getColKeys = function() {
|
853
|
-
this.
|
873
|
+
if (!this.isKeysSortingDoneOnBackendSide) {
|
874
|
+
this.sortKeys();
|
875
|
+
}
|
854
876
|
return this.colKeys;
|
855
877
|
};
|
856
878
|
|
857
879
|
PivotData.prototype.getRowKeys = function() {
|
858
|
-
this.
|
880
|
+
if (!this.isKeysSortingDoneOnBackendSide) {
|
881
|
+
this.sortKeys();
|
882
|
+
}
|
859
883
|
return this.rowKeys;
|
860
884
|
};
|
861
885
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
describe('dr-renderer-helpers', () => {
|
2
|
+
const drRendererHelpers = require('../src/dr-renderer-helpers');
|
3
|
+
|
4
|
+
describe('backendSortingKeysAreNotEmpty', () => {
|
5
|
+
it('should return true if keys are not empty', () => {
|
6
|
+
const keys = {
|
7
|
+
row_keys: [1, 2, 3],
|
8
|
+
col_keys: [1, 2, 3]
|
9
|
+
};
|
10
|
+
expect(drRendererHelpers.backendSortingKeysAreNotEmpty(keys)).toBe(true);
|
11
|
+
});
|
12
|
+
|
13
|
+
it('should return true if one of the keys is not empty', () => {
|
14
|
+
const keys = {
|
15
|
+
row_keys: [1, 2, 3],
|
16
|
+
col_keys: []
|
17
|
+
};
|
18
|
+
expect(drRendererHelpers.backendSortingKeysAreNotEmpty(keys)).toBe(true);
|
19
|
+
});
|
20
|
+
|
21
|
+
it('should return false if keys are empty', () => {
|
22
|
+
const keys = {
|
23
|
+
row_keys: [],
|
24
|
+
col_keys: [],
|
25
|
+
};
|
26
|
+
expect(drRendererHelpers.backendSortingKeysAreNotEmpty(keys)).toBe(false);
|
27
|
+
});
|
28
|
+
|
29
|
+
it('should return false if keys are null', () => {
|
30
|
+
const keys = null;
|
31
|
+
expect(drRendererHelpers.backendSortingKeysAreNotEmpty(keys)).toBe(false);
|
32
|
+
});
|
33
|
+
});
|
34
|
+
});
|