@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.
@@ -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 () { return _this.initDone = true; });
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
- var singleDataSet = (_b = settings.MergeDatasets) !== null && _b !== void 0 ? _b : false;
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
- var dto_1 = {};
1544
- dataConverted.series.forEach(function (vs, index) {
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
- //TODO:IMPL
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) {