@esfaenza/es-charts 13.1.3 → 13.1.4
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/esm2020/lib/components/base/base-chart.component.mjs +17 -3
- package/esm2020/lib/services/classes/LineChartService.mjs +64 -32
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/esfaenza-es-charts.mjs +80 -34
- package/fesm2015/esfaenza-es-charts.mjs.map +1 -1
- package/fesm2020/esfaenza-es-charts.mjs +80 -34
- package/fesm2020/esfaenza-es-charts.mjs.map +1 -1
- package/lib/components/base/base-chart.component.d.ts +10 -1
- package/lib/services/classes/LineChartService.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -797,6 +797,11 @@ class BaseChartComponent {
|
|
|
797
797
|
* Evento lanciato al termine del caricamento di una nuova pagina del grafico
|
|
798
798
|
*/
|
|
799
799
|
this.onLoadEnd = new EventEmitter();
|
|
800
|
+
/**
|
|
801
|
+
* Evento lanciato al termine della creazione del grafico referenziando l'istanza nativa del grafico creato in modo da poter effettuare modifiche
|
|
802
|
+
* post inizializzazione lato applicativo
|
|
803
|
+
*/
|
|
804
|
+
this.chartLoaded = new EventEmitter();
|
|
800
805
|
/**
|
|
801
806
|
* Serve a decidere se sarà presente l'interfaccia di paginazione
|
|
802
807
|
*/
|
|
@@ -884,7 +889,7 @@ class BaseChartComponent {
|
|
|
884
889
|
this.Chart = this.ChartService.ChartInstance;
|
|
885
890
|
if (!this.Chart)
|
|
886
891
|
this.log("Chart " + this.name + ": Could not create graph");
|
|
887
|
-
return this.Charter.applyLocale(this.Chart, this.Locale).then(() => this.initDone = true);
|
|
892
|
+
return this.Charter.applyLocale(this.Chart, this.Locale).then(() => { this.initDone = true; this.chartLoaded.emit(this); });
|
|
888
893
|
})
|
|
889
894
|
]);
|
|
890
895
|
}
|
|
@@ -979,6 +984,13 @@ class BaseChartComponent {
|
|
|
979
984
|
this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name); });
|
|
980
985
|
this.Dispatcher.register(this.name, () => { return this.loadChart(); });
|
|
981
986
|
}
|
|
987
|
+
/**
|
|
988
|
+
* Permette di aggiungere un blocco di dati in maniera "live" ad un grafico
|
|
989
|
+
*/
|
|
990
|
+
addData(chartData) {
|
|
991
|
+
this.ChartService.refreshData(chartData);
|
|
992
|
+
}
|
|
993
|
+
;
|
|
982
994
|
/**
|
|
983
995
|
* Funzione che si occupa di caricare i temi necessari per il grafico in oggetto. Prima applica il tema, poi, se serve, applica le animazioni
|
|
984
996
|
*/
|
|
@@ -1008,7 +1020,7 @@ class BaseChartComponent {
|
|
|
1008
1020
|
}
|
|
1009
1021
|
}
|
|
1010
1022
|
BaseChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseChartComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
1011
|
-
BaseChartComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaseChartComponent, inputs: { XTitle: "XTitle", YTitle: "YTitle", Settings: "Settings", Legend: "Legend", LegendPosition: "LegendPosition", Timeline: "Timeline", name: "name", Animations: "Animations", Theme: "Theme", Locale: "Locale", HideSeriesOnLabelClick: "HideSeriesOnLabelClick", MinGridDistance: "MinGridDistance", AdaptLabelSizeAndOrientation: "AdaptLabelSizeAndOrientation", LegendPadding: "LegendPadding", DataDtos: "DataDtos", DataDtoStartIndex: "DataDtoStartIndex", DataRetrieve: "DataRetrieve", BrowseDelayMs: "BrowseDelayMs" }, outputs: { onSelectionChanged: "onSelectionChanged", onSeriesClicked: "onSeriesClicked", onLoadStart: "onLoadStart", onLoadEnd: "onLoadEnd" }, queries: [{ propertyName: "header_tr", first: true, predicate: ["header"], descendants: true }, { propertyName: "loading_template", first: true, predicate: ["loading"], descendants: true }], usesOnChanges: true, ngImport: i0 });
|
|
1023
|
+
BaseChartComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaseChartComponent, inputs: { XTitle: "XTitle", YTitle: "YTitle", Settings: "Settings", Legend: "Legend", LegendPosition: "LegendPosition", Timeline: "Timeline", name: "name", Animations: "Animations", Theme: "Theme", Locale: "Locale", HideSeriesOnLabelClick: "HideSeriesOnLabelClick", MinGridDistance: "MinGridDistance", AdaptLabelSizeAndOrientation: "AdaptLabelSizeAndOrientation", LegendPadding: "LegendPadding", DataDtos: "DataDtos", DataDtoStartIndex: "DataDtoStartIndex", DataRetrieve: "DataRetrieve", BrowseDelayMs: "BrowseDelayMs" }, outputs: { onSelectionChanged: "onSelectionChanged", onSeriesClicked: "onSeriesClicked", onLoadStart: "onLoadStart", onLoadEnd: "onLoadEnd", chartLoaded: "chartLoaded" }, queries: [{ propertyName: "header_tr", first: true, predicate: ["header"], descendants: true }, { propertyName: "loading_template", first: true, predicate: ["loading"], descendants: true }], usesOnChanges: true, ngImport: i0 });
|
|
1012
1024
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseChartComponent, decorators: [{
|
|
1013
1025
|
type: Directive
|
|
1014
1026
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Object }, { type: i0.NgZone }, { type: ChartLoader }, { type: ChartDispatcher }, { type: undefined }, { type: undefined }, { type: undefined }, { type: undefined }]; }, propDecorators: { XTitle: [{
|
|
@@ -1061,6 +1073,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
|
1061
1073
|
type: Output
|
|
1062
1074
|
}], onLoadEnd: [{
|
|
1063
1075
|
type: Output
|
|
1076
|
+
}], chartLoaded: [{
|
|
1077
|
+
type: Output
|
|
1064
1078
|
}] } });
|
|
1065
1079
|
|
|
1066
1080
|
/**
|
|
@@ -1075,6 +1089,8 @@ class LineChartService {
|
|
|
1075
1089
|
this.DataGroupBucketSize = 1500;
|
|
1076
1090
|
/** @ignore */
|
|
1077
1091
|
this.OpacityOnSelected = 0.3;
|
|
1092
|
+
/** @ignore */
|
|
1093
|
+
this.singleDataSet = false;
|
|
1078
1094
|
//******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate
|
|
1079
1095
|
//TODO: spostarla in un metodo di utilità (esfaenza/extensions)
|
|
1080
1096
|
/** @ignore */
|
|
@@ -1086,7 +1102,7 @@ class LineChartService {
|
|
|
1086
1102
|
graphicate(data, settings) {
|
|
1087
1103
|
let dataConverted = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;
|
|
1088
1104
|
let threshold = settings.DataGroupingThreshold ?? 3000;
|
|
1089
|
-
|
|
1105
|
+
this.singleDataSet = settings.MergeDatasets ?? false;
|
|
1090
1106
|
let showTicks = settings.ShowTicks == null ? true : settings?.ShowTicks;
|
|
1091
1107
|
let dataShouldBeGrouped = Math.max(...dataConverted.series.map(t => t.values.length)) > threshold;
|
|
1092
1108
|
let showTimeline = settings.Timeline || dataShouldBeGrouped;
|
|
@@ -1165,31 +1181,9 @@ class LineChartService {
|
|
|
1165
1181
|
let seriesColors = [];
|
|
1166
1182
|
let defaultIndex = 0;
|
|
1167
1183
|
//-- Generazione di un unico dataset invece che N, per poter gestire un unico tooltip
|
|
1168
|
-
if (singleDataSet) {
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
for (let i = 0; i < vs.values.length; i++) {
|
|
1172
|
-
var dataitem = vs.values[i];
|
|
1173
|
-
var indexer = new Date(dataitem.d).valueOf();
|
|
1174
|
-
if (!dto[indexer])
|
|
1175
|
-
dto[indexer] = {};
|
|
1176
|
-
dto[indexer]['v' + index] = dataitem.v;
|
|
1177
|
-
}
|
|
1178
|
-
});
|
|
1179
|
-
var dates = Object.keys(dto);
|
|
1180
|
-
let singleDS = [];
|
|
1181
|
-
for (let i = 0; i < dates.length; i++) {
|
|
1182
|
-
let values = dto[dates[i]];
|
|
1183
|
-
let item = { d: new Date(parseInt(dates[i])) };
|
|
1184
|
-
var vals = Object.keys(values);
|
|
1185
|
-
for (let ii = 0; ii < vals.length; ii++) {
|
|
1186
|
-
let series = vals[ii];
|
|
1187
|
-
let singleVal = values[series];
|
|
1188
|
-
item[series] = singleVal;
|
|
1189
|
-
}
|
|
1190
|
-
singleDS.push(item);
|
|
1191
|
-
}
|
|
1192
|
-
this.ChartInstance.data = singleDS;
|
|
1184
|
+
if (this.singleDataSet) {
|
|
1185
|
+
this.ChartInstance.data = this.generateSingleDataset(dataConverted);
|
|
1186
|
+
;
|
|
1193
1187
|
dateAxis.cursorTooltipEnabled = false;
|
|
1194
1188
|
}
|
|
1195
1189
|
//-- Fine generazione
|
|
@@ -1212,14 +1206,14 @@ class LineChartService {
|
|
|
1212
1206
|
s.values.sort((d1, d2) => d1.d.getTime() - d2.d.getTime());
|
|
1213
1207
|
let fill = s.fill != null && s.fill != undefined ? s.fill : (settings?.Fill ?? false);
|
|
1214
1208
|
let series = settings?.Step ? new am4charts.StepLineSeries() : new am4charts.LineSeries();
|
|
1215
|
-
series.dataFields.valueY = "v" + (singleDataSet ? index : "");
|
|
1209
|
+
series.dataFields.valueY = "v" + (this.singleDataSet ? index : "");
|
|
1216
1210
|
series.dataFields.dateX = "d";
|
|
1217
1211
|
series.dataFields.measureUnit = s.uom;
|
|
1218
1212
|
series.name = s.name;
|
|
1219
1213
|
series.strokeWidth = settings?.StrokeSize ?? 1;
|
|
1220
1214
|
series.connect = !gapsAllowed;
|
|
1221
1215
|
series.minBulletDistance = 10;
|
|
1222
|
-
series.tooltipText = singleDataSet ? "" : "{name}: [bold]{valueY}[/]";
|
|
1216
|
+
series.tooltipText = this.singleDataSet ? "" : "{name}: [bold]{valueY}[/]";
|
|
1223
1217
|
series.tooltip.pointerOrientation = "vertical";
|
|
1224
1218
|
series.tooltip.background.fillOpacity = 0.5;
|
|
1225
1219
|
series.tooltip.label.padding(12, 12, 12, 12);
|
|
@@ -1227,7 +1221,7 @@ class LineChartService {
|
|
|
1227
1221
|
series.stacked = fill;
|
|
1228
1222
|
//Dataset singolo, i dati sono registrati a livello di chart, creo il tooltip che permette di vederli tutti insieme
|
|
1229
1223
|
//altrimenti assegno i dati della serie direttamente alla serie
|
|
1230
|
-
if (singleDataSet) {
|
|
1224
|
+
if (this.singleDataSet) {
|
|
1231
1225
|
series.tooltip.getFillFromObject = false;
|
|
1232
1226
|
series.tooltip.background.fill = am4core.color("#eee");
|
|
1233
1227
|
series.tooltip.label.fill = am4core.color("#00");
|
|
@@ -1317,7 +1311,7 @@ class LineChartService {
|
|
|
1317
1311
|
//******************************************************************************************************************************
|
|
1318
1312
|
this.ChartInstance.cursor.xAxis = dateAxis;
|
|
1319
1313
|
this.ChartInstance.cursor.yAxis = yAxis;
|
|
1320
|
-
if (singleDataSet)
|
|
1314
|
+
if (this.singleDataSet)
|
|
1321
1315
|
this.ChartInstance.cursor.maxTooltipDistance = -1;
|
|
1322
1316
|
//TODO: Cercare di capire perché è figlio di puttana......
|
|
1323
1317
|
dateAxis.events.on("startchanged", t => this.emitSelectionChanged(t, settings));
|
|
@@ -1326,7 +1320,59 @@ class LineChartService {
|
|
|
1326
1320
|
}
|
|
1327
1321
|
/** @ignore */
|
|
1328
1322
|
refreshData(data) {
|
|
1329
|
-
|
|
1323
|
+
let dataConverted = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;
|
|
1324
|
+
if (this.singleDataSet) {
|
|
1325
|
+
var data = this.generateSingleDataset(dataConverted);
|
|
1326
|
+
this.ChartInstance.addData(data);
|
|
1327
|
+
return;
|
|
1328
|
+
}
|
|
1329
|
+
this.ChartInstance.series.each(s => {
|
|
1330
|
+
var relativeSerie = dataConverted.series.find(t => t.name == s.name);
|
|
1331
|
+
// Una serie del grafico è stata ggiornata, ordino i datapoint e li aggiungo
|
|
1332
|
+
var correctOrder = true;
|
|
1333
|
+
var prevDate = null;
|
|
1334
|
+
for (let v = 0; v < relativeSerie.values.length; v++) {
|
|
1335
|
+
if (!prevDate)
|
|
1336
|
+
prevDate = relativeSerie.values[v].d;
|
|
1337
|
+
else if (relativeSerie.values[v].d < prevDate) {
|
|
1338
|
+
correctOrder = false;
|
|
1339
|
+
break;
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1342
|
+
if (!correctOrder)
|
|
1343
|
+
relativeSerie.values.sort((d1, d2) => d1.d.getTime() - d2.d.getTime());
|
|
1344
|
+
for (let v = 0; v < relativeSerie.values.length; v++) {
|
|
1345
|
+
let obj = relativeSerie.values[v];
|
|
1346
|
+
s.addData({ date: obj.d, value: obj.v });
|
|
1347
|
+
}
|
|
1348
|
+
});
|
|
1349
|
+
}
|
|
1350
|
+
/** Partendo da dati divisi per seriue genera un dataset unito con la data come chiave e i vari valori dopo */
|
|
1351
|
+
generateSingleDataset(data) {
|
|
1352
|
+
let dto = {};
|
|
1353
|
+
data.series.forEach((vs, index) => {
|
|
1354
|
+
for (let i = 0; i < vs.values.length; i++) {
|
|
1355
|
+
var dataitem = vs.values[i];
|
|
1356
|
+
var indexer = new Date(dataitem.d).valueOf();
|
|
1357
|
+
if (!dto[indexer])
|
|
1358
|
+
dto[indexer] = {};
|
|
1359
|
+
dto[indexer]['v' + index] = dataitem.v;
|
|
1360
|
+
}
|
|
1361
|
+
});
|
|
1362
|
+
var dates = Object.keys(dto);
|
|
1363
|
+
var ret = [];
|
|
1364
|
+
for (let i = 0; i < dates.length; i++) {
|
|
1365
|
+
let values = dto[dates[i]];
|
|
1366
|
+
let item = { d: new Date(parseInt(dates[i])) };
|
|
1367
|
+
var vals = Object.keys(values);
|
|
1368
|
+
for (let ii = 0; ii < vals.length; ii++) {
|
|
1369
|
+
let series = vals[ii];
|
|
1370
|
+
let singleVal = values[series];
|
|
1371
|
+
item[series] = singleVal;
|
|
1372
|
+
}
|
|
1373
|
+
ret.push(item);
|
|
1374
|
+
}
|
|
1375
|
+
return ret;
|
|
1330
1376
|
}
|
|
1331
1377
|
/** @ignore */
|
|
1332
1378
|
emitSelectionChanged(ev, settings) {
|
|
@@ -2697,5 +2743,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
|
2697
2743
|
* Generated bundle index. Do not edit.
|
|
2698
2744
|
*/
|
|
2699
2745
|
|
|
2700
|
-
export { AreaChartData, AreaChartSettings, BaseAdapter, BaseInterval, BaseSettings, ChartThemes, DateValue, EsAreaChartComponent, EsChartComponent, EsChartsModule, EsLineChartComponent, EsPieChartComponent, EsVertical2DChartComponent, EsVerticalChartComponent, EsVerticalStackedChartComponent, KeyValue, KeyValueColor, LegendPad, Limit, LineChartData, LineChartSettings, LineSerie, PageChartSelector, PagedChartData, PieChartData, PieChartSettings, Vertical2DChartData, Vertical2DChartSettings, VerticalChartData, VerticalChartSettings, VerticalStackedChartData, VerticalStackedChartSettings };
|
|
2746
|
+
export { AreaChartData, AreaChartSettings, BaseAdapter, BaseChartComponent, BaseInterval, BaseSettings, ChartThemes, DateValue, EsAreaChartComponent, EsChartComponent, EsChartsModule, EsLineChartComponent, EsPieChartComponent, EsVertical2DChartComponent, EsVerticalChartComponent, EsVerticalStackedChartComponent, KeyValue, KeyValueColor, LegendPad, Limit, LineChartData, LineChartSettings, LineSerie, PageChartSelector, PagedChartData, PieChartData, PieChartSettings, Vertical2DChartData, Vertical2DChartSettings, VerticalChartData, VerticalChartSettings, VerticalStackedChartData, VerticalStackedChartSettings };
|
|
2701
2747
|
//# sourceMappingURL=esfaenza-es-charts.mjs.map
|