@esfaenza/es-charts 11.2.15 → 11.2.19
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/bundles/esfaenza-es-charts.umd.js +80 -33
- package/bundles/esfaenza-es-charts.umd.js.map +1 -1
- package/bundles/esfaenza-es-charts.umd.min.js +1 -1
- package/bundles/esfaenza-es-charts.umd.min.js.map +1 -1
- package/esfaenza-es-charts.metadata.json +1 -1
- package/esm2015/lib/components/base/base-chart.component.js +16 -3
- package/esm2015/lib/services/classes/LineChartService.js +66 -32
- package/fesm2015/esfaenza-es-charts.js +80 -33
- package/fesm2015/esfaenza-es-charts.js.map +1 -1
- package/lib/components/base/base-chart.component.d.ts +9 -0
- package/lib/services/classes/LineChartService.d.ts +4 -0
- package/package.json +3 -3
|
@@ -1173,6 +1173,11 @@
|
|
|
1173
1173
|
* Evento lanciato al termine del caricamento di una nuova pagina del grafico
|
|
1174
1174
|
*/
|
|
1175
1175
|
this.onLoadEnd = new core.EventEmitter();
|
|
1176
|
+
/**
|
|
1177
|
+
* Evento lanciato al termine della creazione del grafico referenziando l'istanza nativa del grafico creato in modo da poter effettuare modifiche
|
|
1178
|
+
* post inizializzazione lato applicativo
|
|
1179
|
+
*/
|
|
1180
|
+
this.chartLoaded = new core.EventEmitter();
|
|
1176
1181
|
/**
|
|
1177
1182
|
* Serve a decidere se sarà presente l'interfaccia di paginazione
|
|
1178
1183
|
*/
|
|
@@ -1264,7 +1269,7 @@
|
|
|
1264
1269
|
_this.Chart = _this.ChartService.ChartInstance;
|
|
1265
1270
|
if (!_this.Chart)
|
|
1266
1271
|
_this.log("Chart " + _this.name + ": Could not create graph");
|
|
1267
|
-
return _this.Charter.applyLocale(_this.Chart, _this.Locale).then(function () {
|
|
1272
|
+
return _this.Charter.applyLocale(_this.Chart, _this.Locale).then(function () { _this.initDone = true; _this.chartLoaded.emit(_this.Chart); });
|
|
1268
1273
|
})
|
|
1269
1274
|
]);
|
|
1270
1275
|
};
|
|
@@ -1366,6 +1371,13 @@
|
|
|
1366
1371
|
});
|
|
1367
1372
|
this.Dispatcher.register(this.name, function () { return _this.loadChart(); });
|
|
1368
1373
|
};
|
|
1374
|
+
/**
|
|
1375
|
+
* Permette di aggiungere un blocco di dati in maniera "live" ad un grafico
|
|
1376
|
+
*/
|
|
1377
|
+
BaseChartComponent.prototype.addData = function (chartData) {
|
|
1378
|
+
this.ChartService.refreshData(chartData);
|
|
1379
|
+
};
|
|
1380
|
+
;
|
|
1369
1381
|
/**
|
|
1370
1382
|
* Funzione che si occupa di caricare i temi necessari per il grafico in oggetto. Prima applica il tema, poi, se serve, applica le animazioni
|
|
1371
1383
|
*/
|
|
@@ -1434,7 +1446,8 @@
|
|
|
1434
1446
|
onSelectionChanged: [{ type: core.Output }],
|
|
1435
1447
|
onSeriesClicked: [{ type: core.Output }],
|
|
1436
1448
|
onLoadStart: [{ type: core.Output }],
|
|
1437
|
-
onLoadEnd: [{ type: core.Output }]
|
|
1449
|
+
onLoadEnd: [{ type: core.Output }],
|
|
1450
|
+
chartLoaded: [{ type: core.Output }]
|
|
1438
1451
|
};
|
|
1439
1452
|
|
|
1440
1453
|
/**
|
|
@@ -1449,6 +1462,8 @@
|
|
|
1449
1462
|
this.DataGroupBucketSize = 1500;
|
|
1450
1463
|
/** @ignore */
|
|
1451
1464
|
this.OpacityOnSelected = 0.3;
|
|
1465
|
+
/** @ignore */
|
|
1466
|
+
this.singleDataSet = false;
|
|
1452
1467
|
//******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate
|
|
1453
1468
|
//TODO: spostarla in un metodo di utilità (esfaenza/extensions)
|
|
1454
1469
|
/** @ignore */
|
|
@@ -1462,7 +1477,7 @@
|
|
|
1462
1477
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
1463
1478
|
var dataConverted = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;
|
|
1464
1479
|
var threshold = (_a = settings.DataGroupingThreshold) !== null && _a !== void 0 ? _a : 3000;
|
|
1465
|
-
|
|
1480
|
+
this.singleDataSet = (_b = settings.MergeDatasets) !== null && _b !== void 0 ? _b : false;
|
|
1466
1481
|
var showTicks = settings.ShowTicks == null ? true : settings === null || settings === void 0 ? void 0 : settings.ShowTicks;
|
|
1467
1482
|
var dataShouldBeGrouped = Math.max.apply(Math, __spread(dataConverted.series.map(function (t) { return t.values.length; }))) > threshold;
|
|
1468
1483
|
var showTimeline = settings.Timeline || dataShouldBeGrouped;
|
|
@@ -1491,6 +1506,7 @@
|
|
|
1491
1506
|
range.label.text = dataConverted.limit.upperLabel;
|
|
1492
1507
|
range.label.fill = range.grid.stroke;
|
|
1493
1508
|
range.label.verticalCenter = "bottom";
|
|
1509
|
+
range.label.stroke = am4core__namespace.color(dataConverted.limit.upperColor || "#F92200");
|
|
1494
1510
|
range.grid.stroke = am4core__namespace.color(dataConverted.limit.upperColor || "#F92200");
|
|
1495
1511
|
range.grid.strokeWidth = 2;
|
|
1496
1512
|
range.grid.strokeOpacity = 1;
|
|
@@ -1502,6 +1518,7 @@
|
|
|
1502
1518
|
range.label.text = dataConverted.limit.lowerLabel;
|
|
1503
1519
|
range.label.fill = range.grid.stroke;
|
|
1504
1520
|
range.label.verticalCenter = "bottom";
|
|
1521
|
+
range.label.stroke = am4core__namespace.color(dataConverted.limit.lowerColor || "#F92200");
|
|
1505
1522
|
range.grid.stroke = am4core__namespace.color(dataConverted.limit.lowerColor || "#F92200");
|
|
1506
1523
|
range.grid.strokeWidth = 2;
|
|
1507
1524
|
range.grid.strokeOpacity = 1;
|
|
@@ -1539,31 +1556,9 @@
|
|
|
1539
1556
|
var seriesColors = [];
|
|
1540
1557
|
var defaultIndex = 0;
|
|
1541
1558
|
//-- Generazione di un unico dataset invece che N, per poter gestire un unico tooltip
|
|
1542
|
-
if (singleDataSet) {
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
for (var i = 0; i < vs.values.length; i++) {
|
|
1546
|
-
var dataitem = vs.values[i];
|
|
1547
|
-
var indexer = new Date(dataitem.d).valueOf();
|
|
1548
|
-
if (!dto_1[indexer])
|
|
1549
|
-
dto_1[indexer] = {};
|
|
1550
|
-
dto_1[indexer]['v' + index] = dataitem.v;
|
|
1551
|
-
}
|
|
1552
|
-
});
|
|
1553
|
-
var dates = Object.keys(dto_1);
|
|
1554
|
-
var singleDS = [];
|
|
1555
|
-
for (var i = 0; i < dates.length; i++) {
|
|
1556
|
-
var values = dto_1[dates[i]];
|
|
1557
|
-
var item = { d: new Date(parseInt(dates[i])) };
|
|
1558
|
-
var vals = Object.keys(values);
|
|
1559
|
-
for (var ii = 0; ii < vals.length; ii++) {
|
|
1560
|
-
var series = vals[ii];
|
|
1561
|
-
var singleVal = values[series];
|
|
1562
|
-
item[series] = singleVal;
|
|
1563
|
-
}
|
|
1564
|
-
singleDS.push(item);
|
|
1565
|
-
}
|
|
1566
|
-
this.ChartInstance.data = singleDS;
|
|
1559
|
+
if (this.singleDataSet) {
|
|
1560
|
+
this.ChartInstance.data = this.generateSingleDataset(dataConverted);
|
|
1561
|
+
;
|
|
1567
1562
|
dateAxis.cursorTooltipEnabled = false;
|
|
1568
1563
|
}
|
|
1569
1564
|
//-- Fine generazione
|
|
@@ -1587,14 +1582,14 @@
|
|
|
1587
1582
|
s.values.sort(function (d1, d2) { return d1.d.getTime() - d2.d.getTime(); });
|
|
1588
1583
|
var fill = s.fill != null && s.fill != undefined ? s.fill : ((_a = settings === null || settings === void 0 ? void 0 : settings.Fill) !== null && _a !== void 0 ? _a : false);
|
|
1589
1584
|
var series = (settings === null || settings === void 0 ? void 0 : settings.Step) ? new am4charts__namespace.StepLineSeries() : new am4charts__namespace.LineSeries();
|
|
1590
|
-
series.dataFields.valueY = "v" + (singleDataSet ? index : "");
|
|
1585
|
+
series.dataFields.valueY = "v" + (_this.singleDataSet ? index : "");
|
|
1591
1586
|
series.dataFields.dateX = "d";
|
|
1592
1587
|
series.dataFields.measureUnit = s.uom;
|
|
1593
1588
|
series.name = s.name;
|
|
1594
1589
|
series.strokeWidth = (_b = settings === null || settings === void 0 ? void 0 : settings.StrokeSize) !== null && _b !== void 0 ? _b : 1;
|
|
1595
1590
|
series.connect = !gapsAllowed;
|
|
1596
1591
|
series.minBulletDistance = 10;
|
|
1597
|
-
series.tooltipText = singleDataSet ? "" : "{name}: [bold]{valueY}[/]";
|
|
1592
|
+
series.tooltipText = _this.singleDataSet ? "" : "{name}: [bold]{valueY}[/]";
|
|
1598
1593
|
series.tooltip.pointerOrientation = "vertical";
|
|
1599
1594
|
series.tooltip.background.fillOpacity = 0.5;
|
|
1600
1595
|
series.tooltip.label.padding(12, 12, 12, 12);
|
|
@@ -1602,7 +1597,7 @@
|
|
|
1602
1597
|
series.stacked = fill;
|
|
1603
1598
|
//Dataset singolo, i dati sono registrati a livello di chart, creo il tooltip che permette di vederli tutti insieme
|
|
1604
1599
|
//altrimenti assegno i dati della serie direttamente alla serie
|
|
1605
|
-
if (singleDataSet) {
|
|
1600
|
+
if (_this.singleDataSet) {
|
|
1606
1601
|
series.tooltip.getFillFromObject = false;
|
|
1607
1602
|
series.tooltip.background.fill = am4core__namespace.color("#eee");
|
|
1608
1603
|
series.tooltip.label.fill = am4core__namespace.color("#00");
|
|
@@ -1692,7 +1687,7 @@
|
|
|
1692
1687
|
//******************************************************************************************************************************
|
|
1693
1688
|
this.ChartInstance.cursor.xAxis = dateAxis;
|
|
1694
1689
|
this.ChartInstance.cursor.yAxis = yAxis;
|
|
1695
|
-
if (singleDataSet)
|
|
1690
|
+
if (this.singleDataSet)
|
|
1696
1691
|
this.ChartInstance.cursor.maxTooltipDistance = -1;
|
|
1697
1692
|
//TODO: Cercare di capire perché è figlio di puttana......
|
|
1698
1693
|
dateAxis.events.on("startchanged", function (t) { return _this.emitSelectionChanged(t, settings); });
|
|
@@ -1701,7 +1696,59 @@
|
|
|
1701
1696
|
};
|
|
1702
1697
|
/** @ignore */
|
|
1703
1698
|
LineChartService.prototype.refreshData = function (data) {
|
|
1704
|
-
|
|
1699
|
+
var dataConverted = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;
|
|
1700
|
+
if (this.singleDataSet) {
|
|
1701
|
+
var data = this.generateSingleDataset(dataConverted);
|
|
1702
|
+
this.ChartInstance.addData(data);
|
|
1703
|
+
return;
|
|
1704
|
+
}
|
|
1705
|
+
this.ChartInstance.series.each(function (s) {
|
|
1706
|
+
var relativeSerie = dataConverted.series.find(function (t) { return t.name == s.name; });
|
|
1707
|
+
// Una serie del grafico è stata ggiornata, ordino i datapoint e li aggiungo
|
|
1708
|
+
var correctOrder = true;
|
|
1709
|
+
var prevDate = null;
|
|
1710
|
+
for (var v = 0; v < relativeSerie.values.length; v++) {
|
|
1711
|
+
if (!prevDate)
|
|
1712
|
+
prevDate = relativeSerie.values[v].d;
|
|
1713
|
+
else if (relativeSerie.values[v].d < prevDate) {
|
|
1714
|
+
correctOrder = false;
|
|
1715
|
+
break;
|
|
1716
|
+
}
|
|
1717
|
+
}
|
|
1718
|
+
if (!correctOrder)
|
|
1719
|
+
relativeSerie.values.sort(function (d1, d2) { return d1.d.getTime() - d2.d.getTime(); });
|
|
1720
|
+
for (var v = 0; v < relativeSerie.values.length; v++) {
|
|
1721
|
+
var obj = relativeSerie.values[v];
|
|
1722
|
+
s.addData({ date: obj.d, value: obj.v });
|
|
1723
|
+
}
|
|
1724
|
+
});
|
|
1725
|
+
};
|
|
1726
|
+
/** Partendo da dati divisi per seriue genera un dataset unito con la data come chiave e i vari valori dopo */
|
|
1727
|
+
LineChartService.prototype.generateSingleDataset = function (data) {
|
|
1728
|
+
var dto = {};
|
|
1729
|
+
data.series.forEach(function (vs, index) {
|
|
1730
|
+
for (var i = 0; i < vs.values.length; i++) {
|
|
1731
|
+
var dataitem = vs.values[i];
|
|
1732
|
+
var indexer = new Date(dataitem.d).valueOf();
|
|
1733
|
+
if (!dto[indexer])
|
|
1734
|
+
dto[indexer] = {};
|
|
1735
|
+
dto[indexer]['v' + index] = dataitem.v;
|
|
1736
|
+
}
|
|
1737
|
+
});
|
|
1738
|
+
var dates = Object.keys(dto);
|
|
1739
|
+
var ret = [];
|
|
1740
|
+
for (var i = 0; i < dates.length; i++) {
|
|
1741
|
+
var values = dto[dates[i]];
|
|
1742
|
+
var item = { d: new Date(parseInt(dates[i])) };
|
|
1743
|
+
var vals = Object.keys(values);
|
|
1744
|
+
for (var ii = 0; ii < vals.length; ii++) {
|
|
1745
|
+
var series = vals[ii];
|
|
1746
|
+
var singleVal = values[series];
|
|
1747
|
+
item[series] = singleVal;
|
|
1748
|
+
}
|
|
1749
|
+
ret.push(item);
|
|
1750
|
+
}
|
|
1751
|
+
return ret;
|
|
1705
1752
|
};
|
|
1706
1753
|
/** @ignore */
|
|
1707
1754
|
LineChartService.prototype.emitSelectionChanged = function (ev, settings) {
|