@esfaenza/es-charts 19.2.21 → 19.2.25

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.
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-es-charts.mjs","sources":["../../../projects/es-charts/src/lib/adapters/BaseAdapter.ts","../../../projects/es-charts/src/lib/models/data/LineChartData.ts","../../../projects/es-charts/src/lib/models/data/PieChartData.ts","../../../projects/es-charts/src/lib/models/data/AreaChartData.ts","../../../projects/es-charts/src/lib/models/data/Vertical2DChartData.ts","../../../projects/es-charts/src/lib/models/data/VerticalChartData.ts","../../../projects/es-charts/src/lib/models/data/VerticalStackedChartData.ts","../../../projects/es-charts/src/lib/models/settings/base/BaseSettings.ts","../../../projects/es-charts/src/lib/models/settings/AreaChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/LineChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/PieChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/Vertical2DChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/VerticalChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/VerticalStackedChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/base/BaseInterval.ts","../../../projects/es-charts/src/lib/models/settings/base/LegendPad.ts","../../../projects/es-charts/src/lib/models/data/base/Limit.ts","../../../projects/es-charts/src/lib/models/data/base/DateValue.ts","../../../projects/es-charts/src/lib/models/data/base/KeyValue.ts","../../../projects/es-charts/src/lib/models/data/base/KeyValueColor.ts","../../../projects/es-charts/src/lib/models/data/base/LineSerie.ts","../../../projects/es-charts/src/lib/components/chart-pager/chart-pager.component.ts","../../../projects/es-charts/src/lib/components/chart-pager/chart-pager.component.html","../../../projects/es-charts/src/lib/models/core/ChartThemes.ts","../../../projects/es-charts/src/lib/tokens.ts","../../../projects/es-charts/src/lib/models/core/ChartLoader.ts","../../../projects/es-charts/src/lib/models/core/ChartDispatcher.ts","../../../projects/es-charts/src/lib/components/base/base-chart.component.ts","../../../projects/es-charts/src/lib/services/LineChartService.ts","../../../projects/es-charts/src/lib/services/PieChartService.ts","../../../projects/es-charts/src/lib/services/VerticalChartService.ts","../../../projects/es-charts/src/lib/services/Vertical2DChartService.ts","../../../projects/es-charts/src/lib/services/VerticalStackedChartService.ts","../../../projects/es-charts/src/lib/services/AreaChartService.ts","../../../projects/es-charts/src/lib/components/specializations/es-chart.component.ts","../../../projects/es-charts/src/lib/components/base/base-chart.component.html","../../../projects/es-charts/src/lib/components/specializations/es-area-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-line-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-pie-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-vertical-2d-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-vertical-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-vertical-stacked-chart.component.ts","../../../projects/es-charts/src/lib/models/data/PagedChartData.ts","../../../projects/es-charts/src/lib/es-charts.module.ts","../../../projects/es-charts/src/public-api.ts","../../../projects/es-charts/src/esfaenza-es-charts.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\nimport { LineChartData } from \"../models/data/LineChartData\";\r\nimport { PieChartData } from \"../models/data/PieChartData\";\r\nimport { VerticalChartData } from \"../models/data/VerticalChartData\";\r\nimport { Vertical2DChartData } from \"../models/data/Vertical2DChartData\";\r\nimport { VerticalStackedChartData } from \"../models/data/VerticalStackedChartData\";\r\nimport { AreaChartData } from \"../models/data/AreaChartData\";\r\nimport { IBaseAdapter } from './IBaseAdapter';\r\n\r\n/**\r\n * Adapter Base da reimplementare per trasformare i dati da una libreria di grafici a questa per evitare di riscrivere tutto il codice di\r\n * generazione delle serie in caso si fossero usati grafici di altre librerie\r\n */\r\n@Injectable()\r\nexport class BaseAdapter implements IBaseAdapter {\r\n \r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per gli Area Chart\r\n */\r\n adaptDataForAreaChart(anyData: any): AreaChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart\r\n */\r\n adaptDataForLineChart(anyData: any): LineChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart\r\n */\r\n adaptDataForPieChart(anyData: any): PieChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart\r\n */\r\n adaptDataForVerticalChart(anyData: any): VerticalChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart a due dimensioni\r\n */\r\n adaptDataForVertical2DChart(anyData: any): Vertical2DChartData {\r\n return anyData;\r\n }\r\n \r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart sovrapposti\r\n */\r\n adaptDataForVerticalStackedChart(anyData: any): VerticalStackedChartData {\r\n return anyData;\r\n }\r\n}","import { Limit } from './base/Limit';\r\nimport { LineSerie } from './base/LineSerie';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo LineChart\r\n */\r\nexport class LineChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {LineSerie[]} series Lista di serie da graficare\r\n * @param {{upper: lower}}\r\n */\r\n constructor(public series: LineSerie[] = [], public limit?: Limit | Limit[]) { }\r\n}","import { KeyValueColor } from './base/KeyValueColor';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo PieChart\r\n */\r\nexport class PieChartData {\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @param {KeyValueColor[]} values Lista di Chiave-Valore-Colore che rappresentano ognuno uno spicchio del grafico a torta\r\n */\r\n constructor(public values: KeyValueColor[] = []) { }\r\n}","import { BaseInterval } from '../settings/base/BaseInterval';\r\nimport { KeyValue } from './base/KeyValue';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo AreaChart\r\n */\r\nexport class AreaChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {{ name: Date; values: KeyValue[]; }[]} groups Gruppi di valori raggruppati per data\r\n * @param {BaseInterval} interval Intervallo della serie. Viene utilizzato per gestire eventuali Gap\r\n */\r\n constructor(public groups: { name: Date; values: KeyValue[]; }[] = [], public interval?: BaseInterval) { }\r\n}","import { KeyValue } from './base/KeyValue';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo Vertical2DChart\r\n */\r\nexport class Vertical2DChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {{ name: string; values: KeyValue[];, uom: string }[]} groups Gruppi di valori raggruppati per nome\r\n * @param {{ color: string }[]} colorinfos Lista dei colori da utilizzare. Vanno a sovrascrivere quelli di default di amcharts\r\n */\r\n constructor(public groups: { name: string, values: KeyValue[], uom?: string }[] = [], public colorinfos?: { color: string }[]) { }\r\n}","import { KeyValueColor } from './base/KeyValueColor';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo VerticalChart\r\n */\r\nexport class VerticalChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {KeyValueColor[]} values Lista di Chiave-Valore-Colore che rappresentano ognuno una colonna\r\n */\r\n constructor(public values: KeyValueColor[] = []) { }\r\n}","import { KeyValue } from './base/KeyValue';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo VerticalStackedChart\r\n */\r\nexport class VerticalStackedChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {{ name: string; values: KeyValue[], uom: string }[]} groups Gruppi di valori raggruppati per nome\r\n */\r\n constructor(public groups: { name: string, values: KeyValue[], uom?: string }[] = []) { }\r\n}","import { LegendPad } from \"../base/LegendPad\";\r\n\r\n/**\r\n * Classe che racchiude le impostazioni base bene o male applicabili ad ogni Grafico\r\n */\r\nexport abstract class BaseSettings {\r\n\r\n /**\r\n * Utilizza o no la Timeline\r\n */\r\n Timeline: boolean;\r\n\r\n /**\r\n * Visualizza o no la Legenda\r\n */\r\n Legend: boolean;\r\n\r\n /**\r\n * Nome del grafico (identificativo univoco)\r\n */\r\n Name: string;\r\n\r\n /**\r\n * Titolo dell'asse X\r\n */\r\n XAxisTitle: string;\r\n\r\n /**\r\n * Titolo dell'asse Y\r\n */\r\n YAxisTitle: string;\r\n\r\n /**\r\n * Dà evidenza, nell'asse X dei momenti in cui cambia il valore\r\n */\r\n ShowTicks: boolean;\r\n\r\n /**\r\n * Indica se utilizzare il comportamento di default per i click delle serie sulla Legenda. Mettendo questa variabile a **false**\r\n * e collegando l'output **onSeriesClicked** è possibile generare un evento ogni volta che l'utente fa click su una serie della Legenda\r\n */\r\n HideSeriesOnLabelClick: boolean;\r\n\r\n /**\r\n * Minima distanza nella griglia fra i valori, modifica la quantità di step fra i valori dell'asse X e quindi la granularità dei dati.\r\n * \r\n * Più piccola è, più valori verranno inseriti nell'asse X\r\n */\r\n MinGridDistance: number;\r\n\r\n /**\r\n * Indica la posizione della Legenda rispetto al grafico\r\n */\r\n LegendPosition: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\n /**\r\n * Cerca di aggiustare i vari step dell'asse X ruotandoli e diminuendone le dimensioni abbastanza per mostrarne il più possibile\r\n */\r\n AdaptLabelSizeAndOrientation: boolean;\r\n\r\n /**\r\n * Padding da applicare alla Legenda in caso si voglia spostare un po'\r\n */\r\n LegendPadding: LegendPad;\r\n\r\n /**\r\n * Tema da utilizzare, valido solo per il grafico in questione. Gli altri grafici della pagina possono avere stili diversi.\r\n * \r\n * Essendo i temi caricati in maniera asincrona in base all'utilizzo utilizzarne tanti diversi in un'unica pagina potrebbe rallentare il primo caricamento\r\n */\r\n Theme: 'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none';\r\n\r\n /**\r\n * Locale del singolo grafico\r\n */\r\n Locale: string;\r\n\r\n /**\r\n * Utilizzo o meno delle animazioni. Senza animazioni il grafico è leggermente più performante, specialmente all'aumentare dei punti nella serie\r\n */\r\n Animations: boolean;\r\n\r\n //TODO\r\n //SeriesLabelTemplate: string;\r\n\r\n //Nascosto, lo uso come collegamento fra le service e il base_charts\r\n //OnSeriesClickCallback: Function;\r\n //OnSelectionChangedCallback: Function;\r\n //ContainerHeight: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo AreaChart\r\n */\r\nexport class AreaChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo LineChart\r\n */\r\nexport class LineChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n\r\n /**\r\n * Indica se sono permessi dei Gap fra un valore e l'altro.\r\n * \r\n * Normalmente quando ci sono dei buchi l'ultimo datapoint del buco viene collegato direttamente al primo datapoint disponibile. \r\n * \r\n * Impostando questo Input a true invece, posto di aver assegnato la variabile **interval** della classe **LineChartData**, è possibile \r\n * far apparire il blocco di dati mancanti come un buco vero e proprio, senza alcun collegamento fra i due datapoint estremi\r\n */\r\n AllowGaps: boolean;\r\n\r\n /**\r\n * Soglia per controllare oltre che numero di datapoint il grafico deve iniziare ad effettuare raggruppamenti considerando l'Input **DataGroupBucketSize**\r\n */\r\n DataGroupingThreshold: number;\r\n \r\n /**\r\n * Indica il numero massimo di datapoint visualizzabile in una singola vista del grafico. L'eccedenza viene raggruppata e verrà mostrata sullo zoom.\r\n * \r\n * ATTENZIONE: Utilizzando il sistema di default di raggruppamento di am-charts si rischia di tagliare via pezzi da serie molto ondulate\r\n * in quanto il comportamento di default è quello di eliminare i datapoint che non ci stanno, non di interpolarli\r\n */\r\n DataGroupBucketSize: number\r\n \r\n /**\r\n * Indica se la curva deve collegare direttamente un datapoint all'altro o se deve fare degli step\r\n */\r\n Step: boolean;\r\n \r\n /**\r\n * Indica le dimnsioni, in pixel della linea del grafico\r\n */\r\n StrokeSize: number;\r\n \r\n /**\r\n * Input che permette di rielaborare i dati del grafico per generare un solo Dataset\r\n * \r\n * Viene utilizzato semplicemente per dare un tooltip molto più bello/avanzato sullo scorrimentodel cursore all'interno del grafico\r\n */\r\n MergeDatasets: boolean;\r\n \r\n /**\r\n * Indica se le date che arrivano all'asse X devono essere considerate \"Istante finale\" e aggiustate di conseguenza. \r\n * Se non è valorizzata la variabile **interval** della classe **LineChartData** non ha alcun effetto\r\n * \r\n * Ad esempio, la data 16/07/2021 con intervallo orario verrebbe trasformata in 15/07/2021 24:00:00 (Ovviamente è utilizzato solo lato presentazione)\r\n */\r\n FinalInstants: boolean;\r\n \r\n /**\r\n * Indica se effettuare il Fill della serie in modo da non vedere solo la linea ma proprio l'area sottessa completamente colorata\r\n */\r\n Fill: boolean;\r\n\r\n /**\r\n * Indica se effettuare lo Stack della serie in modo da vedere tutte le linee una sopra l'altra. Implicitamente include anche il **Fill**\r\n */\r\n Stacked: boolean;\r\n\r\n /**\r\n * Gestisce il minimo dell'asse Y\r\n */\r\n Min: number;\r\n \r\n /**\r\n * Gestisce il massimo dell'asse Y\r\n */\r\n Max: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo PieChart\r\n */\r\nexport class PieChartSettings extends BaseSettings{\r\n\r\n /**\r\n * Indica se apparire in modalità 3D o 2D\r\n */\r\n Mode3D: boolean;\r\n\r\n /**\r\n * Indica se mostrare o meno le serie con percentuale a 0\r\n */\r\n HideZeroes: boolean;\r\n\r\n /**\r\n * Percentuale dell'altezza del grafico che viene utilizzata per creare il buco all'interno della ciambella **wink** **wink**\r\n */\r\n DonutRadiusPercentage: number;\r\n\r\n /**\r\n * Indica se wrappare le label che non stanno nel contenitore\r\n */\r\n LabelsWrap: boolean;\r\n\r\n /**\r\n * Indica se troncare le label che non stanno nel contenitore\r\n */\r\n LabelsTruncate: boolean;\r\n\r\n /**\r\n * Indica la dimensione massima che possono assumere le label\r\n */\r\n LabelsWidth: number;\r\n\r\n /**\r\n * Indica se mostrare o meno le labels\r\n */\r\n LabelsVisible: boolean;\r\n\r\n /**\r\n * Customizzazioni sulla label del Totale\r\n */\r\n Total: {\r\n Show: boolean;\r\n TitleSize: number;\r\n NumberSize: number;\r\n UnitOfMeasure: string;\r\n }\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo Vertical2DChart\r\n */\r\nexport class Vertical2DChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n LabelWidth: number;\r\n\r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n LabelVerticalOrientationCutoffWidth: number;\r\n\r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelRightWhenCompressed: number;\r\n\r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelTopWhenCompressed: number;\r\n\r\n /**\r\n * Indica il padding percentuale rispetto alla cella da lasciare fra un gruppo di barre e l'altro. Un valore pari a 0 indica la mancanza di\r\n * spazio fra un gruppo e l'altro, un valore pari a 5 indica il 5% della dimensione della cella in cui appare il gruppo come padding a destra e sinistra\r\n */\r\n GroupPaddingPercentage: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo VerticalChart\r\n */\r\nexport class VerticalChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n \r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n LabelWidth: number;\r\n \r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n LabelVerticalOrientationCutoffWidth: number;\r\n \r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelRightWhenCompressed: number;\r\n \r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelTopWhenCompressed: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo VerticalStackedChart\r\n */\r\nexport class VerticalStackedChartSettings extends BaseSettings{\r\n\r\n /**\r\n * @ignore\r\n */\r\n\tconstructor() { super(); }\r\n \r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n LabelWidth: number;\r\n \r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n LabelVerticalOrientationCutoffWidth: number;\r\n \r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelRightWhenCompressed: number;\r\n \r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelTopWhenCompressed: number;\r\n}","/**\r\n * Classe che identifica un intervallo di tempo fra un dato e l'altro\r\n */\r\nexport class BaseInterval {\r\n\r\n /**\r\n * Numero di unità\r\n */\r\n count: number;\r\n\r\n /**\r\n * Tipo di unità\r\n */\r\n timeunit: \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\";\r\n}","\r\n/**\r\n * Classe che identifica le informazioni di Padding per la Legenda\r\n */\r\nexport class LegendPad {\r\n\r\n /**\r\n * Padding in alto\r\n */\r\n top: number;\r\n\r\n /**\r\n * Padding in basso\r\n */\r\n bottom: number;\r\n\r\n /**\r\n * Padding a sinistra\r\n */\r\n left: number;\r\n\r\n /**\r\n * Padding a destra\r\n */\r\n right: number;\r\n}","/**\r\n * Modello che identifica un limite superiore - inferiore\r\n */\r\nexport class Limit {\r\n /** @ignore */\r\n constructor(\r\n public upper?: number,\r\n public upperlabel?: string,\r\n public uppercolor?: string,\r\n public lower?: number,\r\n public lowerlabel?: string,\r\n public lowercolor?: string,\r\n public fillColor: string = \"\") {\r\n }\r\n}","/**\r\n * Modello che identifica la coppia Data-Valore\r\n */\r\nexport class DateValue {\r\n /** @ignore */\r\n constructor(public d: Date, public v: number) { }\r\n}","/**\r\n * Modello che identifica la coppia Chiave-Valore\r\n */\r\nexport class KeyValue {\r\n /** @ignore */\r\n constructor(public k: string, public v: number) { }\r\n}","/**\r\n * Modello che identifica la coppia Chiave-Valore con in aggiunta il Colore da usare per la serie che verrà creata da questo modello\r\n */\r\nexport class KeyValueColor {\r\n /** @ignore */\r\n constructor(public k: string, public v: number, public c?: string, public t?: string) { }\r\n}","import { DateValue } from './DateValue';\r\nimport { BaseInterval } from '../../settings/base/BaseInterval';\r\n\r\n/**\r\n * Modello che identifica una serie a Linea\r\n */\r\nexport class LineSerie {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} name Nome della serie\r\n * @param {DateValue[]} values Valori della serie\r\n * @param {BaseInterval} interval Intervallo della serie. Viene utilizzato per gestire Gap e date in Istante Finale\r\n * @param {string} color Colore della serie, verrà usato sia per la linea base che eventualmente per il riempimento (in caso si utilizzi l'Input **Fill** nel grafico)\r\n * @param {string} uom Unità di misura da presentare nell'asse delle Y\r\n * @param {boolean} fill Override della proprietà **Fill** del grafico, specifico per ogni serie\r\n * @param {boolean} stacked Override della proprietà **Stacked** del grafico, specifico per ogni serie\r\n * @param {boolean} hidden Indica se la serie deve partire nascosta di default\r\n */\r\n constructor(public name: string, public values: DateValue[], public interval?: BaseInterval, public color?: string, public uom?: string, public fill?: boolean, public stacked?: boolean, public hidden?: boolean) {\r\n }\r\n}","import { EventEmitter, Component, Input, ChangeDetectionStrategy, Output, ContentChild } from '@angular/core';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente che si occupa della paginazione dei grafici qualora servisse\r\n */\r\n@Component({\r\n selector: \"chart-pager\",\r\n templateUrl: \"chart-pager.component.html\",\r\n styleUrls: ['chart-pager.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class PageChartSelector {\r\n\r\n /**\r\n * Lista dei dati precaricata in memoria\r\n */\r\n @Input() Items: PagedChartData<any>[];\r\n\r\n /**\r\n * Lista dei Dto da utilizzare per caricare i valori dei vari grafici\r\n */\r\n @Input() Dtos: any[];\r\n\r\n /**\r\n * Dopo aver navigato a un nuovo grafico verranno attesi questi millisecondi prima di richiedere i dati attraverso la **DataRetrieve**.\r\n * \r\n * Questo per evitare che l'utente cliccando velocemente \"avanti\" generi tonnellate di richieste inutili\r\n */\r\n @Input() BrowseDelayMs;\r\n\r\n /**\r\n * Indice dell'array **Dtos** o dell'array **Items** da cui iniziare ad emettere i valori, utile per supportare il \"back\" da un eventuale pagina di dettaglio\r\n */\r\n @Input() StartIndex: number;\r\n\r\n /**\r\n * Indica un cambio di pagina ed emette un oggetto con i dati attuali e l'indice attuale.\r\n * \r\n * Qualora la proprietà **data** fosse null indica un evento di \"loading\"\r\n */\r\n @Output() onPageChange: EventEmitter<{ data: any, index: number }> = new EventEmitter<{ data: any, index: number }>();\r\n\r\n /**\r\n * Override del titolo di default\r\n */\r\n @ContentChild('header_inner', { static: false }) headerInner_tr;\r\n\r\n /**\r\n * @ignore\r\n */\r\n public currentpage: number;\r\n /**\r\n * @ignore\r\n */\r\n private currentindex: number;\r\n /**\r\n * @ignore\r\n */\r\n private finalIndex: number;\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnChanges() {\r\n if (!(this.Items || this.Dtos) || (this.Items || this.Dtos).length == 0)\r\n throw new Error(\"Chart array cannot be empty!\");\r\n\r\n var idx = (this.StartIndex || 0);\r\n this.currentindex = idx;\r\n this.currentpage = idx + 1;\r\n this.handlePageChange();\r\n }\r\n\r\n /**\r\n * Gestisce un cambio pagina inviando al callback **onPageChange** i dati attuali (siano essi il Dto per il caricamento dati i \r\n * o i dati già presenti) e l'indice di visualizzazione\r\n */\r\n private handlePageChange() {\r\n this.finalIndex = this.currentpage - 1;\r\n this.currentindex = this.currentpage - 1;\r\n let data = this.Items && this.Items.length > 0 ? this.Items[this.finalIndex].data : this.Dtos[this.finalIndex]\r\n this.onPageChange.emit({ data: data, index: this.finalIndex });\r\n }\r\n\r\n /**\r\n * Visualizza il grafico successivo\r\n */\r\n public Next() {\r\n // Per passare da page a index è sempre un -1\r\n this.currentpage++;\r\n this.onPageChange.emit({ data: null, index: this.currentpage - 1 });\r\n\r\n // Delay pseudo-intelligente per click compulsivi. \r\n // Se dopo questo delay sono andato avanti solo di 1 effettuo il callback altrimenti incremento l'indice\r\n setTimeout(() => {\r\n if (this.currentindex == this.currentpage - 2)\r\n this.handlePageChange();\r\n else\r\n this.currentindex++;\r\n }, this.BrowseDelayMs);\r\n }\r\n\r\n /**\r\n * Visualizza il grafico precedente\r\n */\r\n Previous() {\r\n // Per passare da page a index è sempre un -1\r\n this.currentpage--;\r\n this.onPageChange.emit({ data: null, index: this.currentpage - 1 });\r\n\r\n // Delay pseudo-intelligente per click compulsivi. \r\n // Se dopo questo delay sono andato indietro solo di 1 effettuo il callback altrimenti decremento l'indice\r\n setTimeout(() => {\r\n if (this.currentindex == this.currentpage)\r\n this.handlePageChange();\r\n else\r\n this.currentindex--;\r\n }, this.BrowseDelayMs);\r\n }\r\n}","<div *ngIf=\"(Items || Dtos) && (Items || Dtos).length > 0\" class=\"pcs-no-selection\">\r\n <div class=\"pcs-button pcs-backward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"currentpage != 1 && Previous(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"currentpage == 1 ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-left\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"pcs-infos\">\r\n <ng-container *ngIf=\"headerInner_tr\">\r\n <ng-container *ngTemplateOutlet=\"headerInner_tr; context : {$implicit: (Items || Dtos)[currentpage - 1]}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"pcs-button pcs-forward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"(Items || Dtos).length != currentpage && Next(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"(Items || Dtos).length == currentpage ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-right\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n</div>","/** @ignore */\r\nconst _spiritedaway: string = 'spiritedaway';\r\n/** @ignore */\r\nconst _moonrisekingdom: string = 'moonrisekingdom';\r\n/** @ignore */\r\nconst _frozen: string = 'frozen';\r\n/** @ignore */\r\nconst _dark: string = 'dark';\r\n/** @ignore */\r\nconst _kelly: string = 'kelly';\r\n/** @ignore */\r\nconst _material: string = 'material';\r\n/** @ignore */\r\nconst _dataviz: string = 'dataviz';\r\n/** @ignore */\r\nconst _none: string = 'none';\r\n/** @ignore */\r\nconst _animated: string = 'animated';\r\n\r\n/**\r\n * Classe per enumerare i temi disponibili nella libreria\r\n */\r\n// @dynamic\r\nexport class ChartThemes {\r\n public get spiritedaway() { return _spiritedaway; };\r\n public get moonrisekingdom() { return _moonrisekingdom; };\r\n public get frozen() { return _frozen; };\r\n public get dark() { return _dark; };\r\n public get kelly() { return _kelly; };\r\n public get material() { return _material; };\r\n public get dataviz() { return _dataviz; };\r\n public get none() { return _none; };\r\n public get animated() { return _animated; };\r\n\r\n public static get spiritedaway() { return _spiritedaway; };\r\n public static get moonrisekingdom() { return _moonrisekingdom; };\r\n public static get frozen() { return _frozen; };\r\n public static get dark() { return _dark; };\r\n public static get kelly() { return _kelly; };\r\n public static get material() { return _material; };\r\n public static get dataviz() { return _dataviz; };\r\n public static get none() { return _none; };\r\n public static get animated() { return _animated; };\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che identifica il default per l'utilizzo o meno delle Animazioni per tutti i grafici, può essere sovrascritto dalle impostazioni locali (Settings e Input)\r\n */\r\nexport const ESC_ANIMATIONS: InjectionToken<boolean> = new InjectionToken<boolean>('ESC_ANIMATIONS');\r\n\r\n/**\r\n * Token che identifica il Tema di default per tutti i grafici, può essere sovrascritto dalle impostazioni locali (Settings e Input)\r\n */\r\nexport const ESC_THEME: InjectionToken<string> = new InjectionToken<string>('ESC_THEME');\r\n\r\n/**\r\n * Token che identifica l'utilizzo o meno del sistema di Log per l'intera libreria\r\n */\r\nexport const ESC_DEBUG_MODE: InjectionToken<string> = new InjectionToken<string>('ESC_DEBUG_MODE');","import { Inject, Injectable } from '@angular/core';\r\nimport { ChartThemes } from './ChartThemes'\r\nimport { ESC_DEBUG_MODE } from '../../tokens';\r\nimport { EsChartsModule } from '../../es-charts.module';\r\n\r\n/**\r\n * Classe di supporto al caricamento dinamico dei vari pezzi di amcharts che mi servono per il grafico (temi, locali, ecc...)\r\n * \r\n * Essenzialmente ogni volta che viene creato un grafico, questo acquisisce il tema e il locale applicato IN QUEL MOMENTO,\r\n * questo significa che per creare due grafici con temi diversi bisogna fare:\r\n * \r\n * 1) Caricamento tema 1\r\n * \r\n * 2) Creazione grafico 1\r\n * \r\n * 3) Scaricamento tema 1\r\n * \r\n * 3) Caricamento tema 2\r\n * \r\n * 4) Creazione grafico 2\r\n * \r\n */\r\n@Injectable()\r\nexport class ChartLoader {\r\n\r\n /**\r\n * Indica se attualmente ho le animazioni caricate in modo da non ricaricarle inutilmente\r\n */\r\n private AnimationsAreLoaded: boolean = false;\r\n\r\n /**\r\n * Indica l'ultimo tema caricato in modo da non ricaricarlo inutilmente qualora il prossimo grafico da creare richieda lo stesso tema\r\n */\r\n private LastLoadedTheme: string = \"\";\r\n\r\n /**\r\n * Cache dei temi (moduli caricati dinamicamente)\r\n */\r\n private themeCache: {} = {};\r\n\r\n /**\r\n * Cache delle localizzazioni (moduli caricati dinamicamente)\r\n */\r\n private localizationCache: {} = {};\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Inject(ESC_DEBUG_MODE) private logs: boolean) { }\r\n\r\n /**\r\n * Applica il tema con le animazioni all'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n public applyAnimations(chartsCore: any): Promise<any> {\r\n if (!this.AnimationsAreLoaded) {\r\n return this.importIfNeeded('themes', ChartThemes.animated).then(() => {\r\n this.log(\"CORE: Applying theme \" + ChartThemes.animated);\r\n chartsCore.useTheme(this.themeCache[ChartThemes.animated]);\r\n this.AnimationsAreLoaded = true;\r\n });\r\n }\r\n else {\r\n this.log(\"CORE: theme already applyed \" + ChartThemes.animated);\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n }\r\n\r\n /**\r\n * De-applica il tema con le animazioni dall'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n * @returns {Promise} Promise che identifica la fine dello scarico\r\n */\r\n unapplyAnimations(chartsCore: any): Promise<any> {\r\n if (this.AnimationsAreLoaded) {\r\n this.log(\"CORE: Animations in use, unapplying theme \" + ChartThemes.animated);\r\n chartsCore.unuseTheme(this.themeCache[ChartThemes.animated]);\r\n this.AnimationsAreLoaded = false;\r\n }\r\n else\r\n this.log(\"CORE: Animations already unused, no need to unapply them\");\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n /**\r\n * Applica il tema specificato all'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n * @param {'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none'} theme Tema da applicare\r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n applyTheme(chartsCore: any, theme: 'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none'): Promise<any> {\r\n // Ultimo tema applicato è lo stesso che mi è stato richiesto di applicare --> NO-OP\r\n if (this.LastLoadedTheme == theme) {\r\n this.log(\"CORE: theme already applied \" + theme);\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n // Scarico il tema precedente a prescindere, ormai non mi serve più\r\n this.unapplyPreviousTheme(chartsCore)\r\n\r\n // Il tema è il none --> registro la cosa e basta, il tema precedente è stato rimosso subito qui sopra ^\r\n if (theme == ChartThemes.none) {\r\n this.LastLoadedTheme = ChartThemes.none;\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n // Il tema è diverso dal precedente e non è il tema vuoto --> Importo il tema specificato se non presente in memoria e lo applico al grafico attuale\r\n return this.importIfNeeded('themes', theme).then(() => {\r\n this.log(\"CORE: Applying theme \" + theme);\r\n chartsCore.useTheme(this.themeCache[theme]);\r\n this.LastLoadedTheme = theme;\r\n });\r\n }\r\n\r\n /**\r\n * De-applica il tema precedente dall'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n */\r\n unapplyPreviousTheme(chartsCore: any) {\r\n if (!this.LastLoadedTheme || this.LastLoadedTheme == ChartThemes.none)\r\n return;\r\n\r\n this.log(\"CORE: Unapplying previously used theme \" + this.LastLoadedTheme);\r\n chartsCore.unuseTheme(this.themeCache[this.LastLoadedTheme])\r\n }\r\n\r\n /**\r\n * Applica il locale specificato all'istanza specifica del grafico\r\n * \r\n * @param {amCharts.Chart} chart Istanza specifica del grafico a cui applicare il locale\r\n * @param {string} locale Locale da applicare\r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n applyLocale(chart: any, locale: string): Promise<any> {\r\n return this.importIfNeeded('lang', locale).then(() => {\r\n this.log(\"Chart \" + chart.htmlContainer.id + \": applying locale \" + locale);\r\n chart.language.locale = this.localizationCache[locale];\r\n });\r\n }\r\n\r\n /**\r\n * Permette di importare, se serve un dato tema o localizzazione\r\n * \r\n * @param {'lang' | 'themes'} what Oggetto da importare, se localizzazione o tema\r\n * @param {string} item Chiave dell'oggetto da importare\r\n * \r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n importIfNeeded(what: 'lang' | 'themes', item: string): Promise<any> {\r\n\r\n // Se sto cercando di caricare qualcosa di già caricato non faccio nulla\r\n if (!(what == 'themes' && !this.themeCache[item]) && !(what == 'lang' && !this.localizationCache[item])) {\r\n this.log(\"CORE: \" + (what == 'lang' ? \"Language \" : \"Theme \") + item + \" already loaded\");\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n this.log(\"CORE: Loading \" + (what == 'lang' ? \"language \" : \"theme \") + item);\r\n\r\n /*\r\n * ****************************\r\n * ******** ATTENZIONE ********\r\n * ****************************\r\n * \r\n * Se stai vedendo questo codice di import e stai valutando di riscriverlo come:\r\n * \r\n * V V \r\n * import(`@amcharts/amcharts4/${what}/${item}`).then(module => {\r\n * if (what == 'themes') this.themeCache[item] = module.default;\r\n * else if (what == 'lang') this.localizationCache[item] = module.default;\r\n * });\r\n * \r\n * Sappi che è una pessima idea. Gli import sono valutati da webpack in compiletime per generare i chunk,\r\n * mettere la navigazione agli import con la concatenazione viene preso malissimo ed essenzialmente dice a webpack\r\n * di tirare su e bundlare l'intera node_modules. Divertente, no?\r\n *\r\n */\r\n\r\n switch (what) {\r\n case 'themes':\r\n switch (item) {\r\n case ChartThemes.spiritedaway:\r\n return import(\"@amcharts/amcharts4/themes/spiritedaway\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.moonrisekingdom:\r\n return import(\"@amcharts/amcharts4/themes/moonrisekingdom\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.frozen:\r\n return import(\"@amcharts/amcharts4/themes/frozen\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.dark:\r\n return import(\"@amcharts/amcharts4/themes/dark\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.kelly:\r\n return import(\"@amcharts/amcharts4/themes/kelly\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.material:\r\n return import(\"@amcharts/amcharts4/themes/material\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.dataviz:\r\n return import(\"@amcharts/amcharts4/themes/dataviz\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.animated:\r\n return import(\"@amcharts/amcharts4/themes/animated\").then(theme => this.themeCache[item] = theme.default);\r\n }\r\n break;\r\n case 'lang':\r\n switch (item) {\r\n case 'it-IT':\r\n return import(\"@amcharts/amcharts4/lang/it_IT\").then(lang => this.localizationCache[item] = lang.default);\r\n case 'en-US':\r\n return import(\"@amcharts/amcharts4/lang/en_US\").then(lang => this.localizationCache[item] = lang.default);\r\n }\r\n }\r\n\r\n this.log(\"CORE: Loading Failed. \" + (what == 'lang' ? \"Language \" : \"Theme\") + \" not recognized: \" + item);\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n log(text: string) {\r\n if (this.logs)\r\n console.log(\"@esfaenza/es-charts: \" + text);\r\n }\r\n}","import { Injectable, Inject } from '@angular/core';\r\n\r\nimport { ESC_DEBUG_MODE } from '../../tokens';\r\n\r\n/**\r\n * Classe che si occupa del dispatch delle operazioni di rendering dei grafici utilizzando una coda per permettere ad ogni grafico di avere temi e localizzazione custom\r\n */\r\n@Injectable()\r\nexport class ChartDispatcher {\r\n\r\n /**\r\n * Coda di inizializzazioni ancora da eseguire. Quando questa è vuota significa che nessuno sta creando grafici\r\n */\r\n private Initializations: { name: string, function: any }[] = [];\r\n\r\n /**\r\n * Lista dei grafici inizializzati e attivi in un dato momento (viene registrata la proprietà **name**). Non è possibile registrare due grafici con lo stesso identificativo\r\n */\r\n private InitializedGraphs: string[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Inject(ESC_DEBUG_MODE) private logs: boolean) { }\r\n\r\n /**\r\n * Registra un grafico da visualizzare insieme alla propria funzione di creazione. Quest'ultima sarà differita fino a che tutti i grafici\r\n * precedentemente registati non hanno finito la fase di inizializzazione\r\n * \r\n * @param {string} name Identificativo del grafico da registrare\r\n * @param {Function} chartCreationFunction Funzione che fisicamente dovrà occuparsi della creazione del grafico\r\n */\r\n public register(name: string, chartCreationFunction: Function) {\r\n if (this.InitializedGraphs.indexOf(name) != -1)\r\n throw \"Attempting to register a duplicate chart '\" + name + \"'. Make sure the 'name' properties of your charts are univoque\";\r\n\r\n this.log(\"DISPATCHER: Registering chart creation function execution for \" + name);\r\n this.Initializations.push({ name: name, function: chartCreationFunction });\r\n if (this.Initializations.length == 1) {\r\n this.log(\"DISPATCHER: Initial drain started\");\r\n this.drainInitQueues();\r\n }\r\n }\r\n\r\n /**\r\n * Deregistra un grafico presente. Chiamata generalmente al dispose del grafico in questione quando non dev'essere più mostrato nella pagina corrente\r\n * \r\n * @param {string} name Identificativo del grafico da deregistrare\r\n */\r\n public deregisterGraph(name: string) {\r\n let index = this.InitializedGraphs.indexOf(name);\r\n if (index == -1)\r\n {\r\n //Questo succede quando si cerca di distruggere il grafico mentre sta venendo graficato\r\n this.log(\"DISPATCHER: Registration missing for chart \" + name + \" it was probably destroyed during load\");\r\n return;\r\n }\r\n\r\n this.log(\"DISPATCHER: Chart deregistered \" + name);\r\n this.InitializedGraphs.splice(index, 1)\r\n }\r\n\r\n /**\r\n * Metodo che esegue in maniera sequenziale le funzioni di inizializzazione dei grafici finché presenti \r\n * in modo che nessun grafico possa essere inizializzato contemporaneamente ad un altro.\r\n * \r\n * Questo è il punto chiave che permette di avere per ogni grafico temi e locale differenti\r\n */\r\n private drainInitQueues() {\r\n let toExecute = this.Initializations[0];\r\n this.log(\"DISPATCHER: Executing initialization function for chart \" + toExecute.name);\r\n\r\n toExecute.function().then(() => {\r\n this.log(\"DISPATCHER: initialization for chart \" + toExecute.name + \" is done\");\r\n this.InitializedGraphs.push(toExecute.name);\r\n this.Initializations.splice(0, 1);\r\n if (this.Initializations.length >= 1) {\r\n this.log(\"DISPATCHER: Found queued initializations. Continuing\");\r\n this.drainInitQueues();\r\n }\r\n else\r\n this.log(\"DISPATCHER: queue is over, nothing more to do\");\r\n });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private log(text: string) {\r\n if (this.logs)\r\n console.log(\"@esfaenza/es-charts: \" + text);\r\n }\r\n}","import { isPlatformBrowser } from '@angular/common';\r\nimport { Input, SimpleChanges, AfterViewInit, NgZone, OnDestroy, OnInit, OnChanges, Output, EventEmitter, ContentChild, Optional, Directive, ElementRef } from '@angular/core';\r\n\r\nimport { IBaseService } from '../../services/base/IBaseService';\r\nimport { BaseSettings } from '../../models/settings/base/BaseSettings';\r\nimport { LegendPad } from '../../models/settings/base/LegendPad';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { LineChartData } from \"../../models/data/LineChartData\";\r\nimport { PieChartData } from \"../../models/data/PieChartData\";\r\nimport { VerticalChartData } from \"../../models/data/VerticalChartData\";\r\nimport { Vertical2DChartData } from \"../../models/data/Vertical2DChartData\";\r\nimport { PagedChartData } from \"../../models/data/PagedChartData\";\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Componente Grafico Base che gestisce tutte le cose comuni dei vari grafici istanziabili, come la presenza o menu di una legenda,\r\n * il tema utilizzato, il locale del singolo grafico, ecc ecc...\r\n */\r\n@Directive()\r\nexport abstract class BaseChartComponent implements AfterViewInit, OnDestroy, OnInit, OnChanges {\r\n\r\n /**\r\n * Titolo per l'asse X\r\n */\r\n @Input() XTitle: string;\r\n\r\n /**\r\n * Titolo per l'asse Y\r\n */\r\n @Input() YTitle: string;\r\n\r\n /**\r\n * Impostazioni di base\r\n */\r\n @Input() Settings: BaseSettings;\r\n\r\n /**\r\n * Presenza o meno della legenda\r\n */\r\n @Input() Legend: boolean;\r\n\r\n /**\r\n * Posizione della legenda\r\n */\r\n @Input() LegendPosition: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\n /**\r\n * Presenza o meno della timeline\r\n */\r\n @Input() Timeline: boolean;\r\n\r\n /**\r\n * Nome del grafico, fondamentale assegnarlo per permettere alla libreria di schedularne la creazione\r\n */\r\n @Input() name: string = \"\";\r\n\r\n /**\r\n * Utilizzo o meno delle animazioni. Senza animazioni il grafico è leggermente più performante, specialmente all'aumentare dei punti nella serie\r\n */\r\n @Input() Animations: boolean;\r\n\r\n /**\r\n * Tema da utilizzare, valido solo per il grafico in questione. Gli altri grafici della pagina possono avere stili diversi.\r\n * \r\n * Essendo i temi caricati in maniera asincrona in base all'utilizzo utilizzarne tanti diversi in un'unica pagina potrebbe rallentare il primo caricamento\r\n */\r\n @Input() Theme: 'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none';\r\n\r\n /**\r\n * Locale del singolo grafico\r\n */\r\n @Input() Locale: string;\r\n\r\n /**\r\n * Indica se utilizzare il comportamento di default per i click delle serie sulla Legenda. Mettendo questa variabile a **false**\r\n * e collegando l'output **onSeriesClicked** è possibile generare un evento ogni volta che l'utente fa click su una serie della Legenda\r\n */\r\n @Input() HideSeriesOnLabelClick: boolean;\r\n\r\n /**\r\n * Minima distanza nella griglia fra i valori, modifica la quantità di step fra i valori dell'asse X e quindi la granularità dei dati.\r\n * \r\n * Più piccola è, più valori verranno inseriti nell'asse X\r\n */\r\n @Input() MinGridDistance: number;\r\n\r\n /**\r\n * Cerca di aggiustare i vari step dell'asse X ruotandoli e diminuendone le dimensioni abbastanza per mostrarne il più possibile\r\n */\r\n @Input() AdaptLabelSizeAndOrientation: boolean;\r\n\r\n /**\r\n * Padding da applicare alla Legenda in caso si voglia spostare un po'\r\n */\r\n @Input() LegendPadding: LegendPad;\r\n\r\n /**\r\n * Lista di dto generici che verranno emessi dal sistema di grafici uno per uno attraverso la funzione **DataRetrieve**, che dovranno essere\r\n * usati per uan sorta di caricamento \"paginato\" dei grafici\r\n */\r\n @Input() DataDtos: any[];\r\n\r\n /**\r\n * Indice dell'array **DataDtos** o dell'array **DataArray** da cui iniziare ad emettere i valori, utile per supportare il \"back\" da un eventuale pagina di dettaglio\r\n */\r\n @Input() DataDtoStartIndex: number;\r\n\r\n /**\r\n * Funzione definita lato applicativo che in base al **DataDto** corrente restituisce una Promise del tipo di dati richiesto per il grafico corrente\r\n */\r\n @Input() DataRetrieve: (dto: any, index: number) => Promise<any>;\r\n\r\n /**\r\n * Dopo aver navigato a un nuovo grafico verranno attesi questi millisecondi prima di richiedere i dati attraverso la **DataRetrieve**.\r\n * \r\n * Questo per evitare che l'utente cliccando velocemente \"avanti\" generi tonnellate di richieste inutili\r\n */\r\n @Input() BrowseDelayMs: number = 500;\r\n\r\n /**\r\n * Intestazione dei grafici nel caso si utilizzi la modalità paginata\r\n */\r\n @ContentChild('header', { static: false }) header_tr;\r\n\r\n /**\r\n * Messaggio di caricamento fra un grafico e l'altro \r\n */\r\n @ContentChild('loading', { static: false }) loading_template;\r\n\r\n /**\r\n * Evento lanciato sulla selezione di un range di dati o dalla timeline o dal grafico. Valido per tutti i grafici che supportano serie basate sulle date\r\n */\r\n @Output() onSelectionChanged: EventEmitter<{ from: Date, to: Date, initial: boolean }> = new EventEmitter<{ from: Date, to: Date, initial: boolean }>();\r\n\r\n /**\r\n * Evento lanciato dal click di una serie dalla Legenda, a patto che l'Input **HideSeriesOnLabelClick** sia impostato a false\r\n */\r\n @Output() onSeriesClicked: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /**\r\n * Evento lanciato all'inizio del caricamento di una nuova pagina del grafico\r\n */\r\n @Output() onLoadStart: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /**\r\n * Evento lanciato al termine del caricamento di una nuova pagina del grafico\r\n */\r\n @Output() onLoadEnd: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /**\r\n * Evento lanciato al termine della creazione del grafico referenziando l'istanza nativa del grafico creato in modo da poter effettuare modifiche\r\n * post inizializzazione lato applicativo\r\n */\r\n @Output() chartLoaded: EventEmitter<BaseChartComponent> = new EventEmitter<BaseChartComponent>();\r\n\r\n /**\r\n * Serve a decidere se sarà presente l'interfaccia di paginazione\r\n */\r\n public isPaged: boolean = false;\r\n\r\n /**\r\n * @ignore\r\n */\r\n private initDone: boolean = false;\r\n\r\n /**\r\n * Istanza nativa del grafico amcharts. Qualsiasi cosa non fa questa libreria si può prendere questa istanza e modificare a piacimento\r\n */\r\n public Chart: am4charts.Chart;\r\n\r\n /**\r\n * Servizio di graficazione del grafico\r\n */\r\n public ChartService: IBaseService<any>;\r\n\r\n /**\r\n * Variabile che indica se una nuova pagina del grafico è in fase di caricamento\r\n */\r\n public loadingChart: boolean;\r\n\r\n /**\r\n * Dati del grafico. Ogni implementazione gestirà questa variabile in base al proprio tipo di Dati\r\n */\r\n abstract Data: any;\r\n\r\n /**\r\n * Dati del grafico in modalità paginata, per quando tutte le pagine sono precaricate in memoria (in caso contrario verrebberò utilizzati i **DataDtos**)\r\n */\r\n abstract DataArray: PagedChartData<any>[];\r\n\r\n /**\r\n * Indica le proprietà specifica per una data implementazione che devono causare un repaint del grafico\r\n */\r\n abstract getSpecificPropertiesToCheck(): string[];\r\n\r\n /**\r\n * Metodo generico di graficazione, reimplementato dalle varie implementazioni\r\n */\r\n abstract graphicate(castedSettings): IBaseService<any>;\r\n\r\n /**\r\n * Metodo generico che prende le impostazioni generiche del grafico e le casta alla tipologia giusta per il grafico specifico\r\n */\r\n abstract getCastedSettings(): any;\r\n\r\n /**\r\n * Metodo che \"Riempie\" la classe delle impostazioni con tutte le impostazioni specifiche passate a un dato grafico come Input\r\n */\r\n abstract fillSpecificSettings(settingsCasted): void;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {ElementRef} el Contenitore all'interno del cui viene creato il grafico. Utilizzato per estrapolarne la **ContainerHeight**\r\n * @param {Object} platformId piattaforma Angular (browser, ecc...) per essere sicuri che amcharts venga attivato solo lato browser. Non utilizzando SSR nelle applicazioni che consumano questa libreria non è particolarmente significativo, ma non si sa mai\r\n * @param {NgZone} zone NgZone di default per permettere di inizializzare il grafico all'infuori di Angular per avere qualche prestazione in più\r\n * @param {ChartLoader} Charter Istanza del Loader che si occuperà di caricare in memoria tutto ciò che serve per il grafico attuale (temi, locale, animazioni, ecc...)\r\n * @param {ChartDispatcher} Dispatcher Istanza del Dispatcher che si occupa di differire il caricamento dei grafici 1 dopo l'altro in modo che caricamenti pseudo paralleli incasinino tutto\r\n * @param {boolean} logs Indica se effettuare log a console o meno, iniettato dalle classi specializzate dal token ESC_DEBUG_MODE\r\n * @param {boolean} animations Indica se per questo grafico devono essere attive o meno le animazioni. Impostazione generica presa dal token ESC_ANIMATIONS\r\n * @param {string} locale Indica il locale specifico per questo grafico. Impostazione generica presa dal LocalizationService\r\n * @param {string} theme Indica il tema specifico per questo grafico. Impostazione generica presa dal token ESC_THEME\r\n */\r\n constructor(private el: ElementRef, private platformId: Object, private zone: NgZone, private Charter: ChartLoader, private Dispatcher: ChartDispatcher, private logs: boolean,\r\n private animations: boolean, private locale: string, private theme: string) { }\r\n\r\n /**\r\n * Metodo di inizializzazione post valorizzazione degli input, utilizzato per valorizzare correttamente le proprietà essenziali del grafico (Animazioni, Tema e Locale)\r\n * \r\n * Viene data priorità ai Settings (HTML), priorità secondaria agli Input diretti (Lato HTML), priorità ultima alle impostazioni globali,\r\n * impostate in fase di import del modulo assegnando valori ai token ESC_ANIMATIONS, ESC_THEME\r\n */\r\n ngOnInit() {\r\n // Qui servono solo le variabili da conoscere PRE-graficazione per il caricamento dei moduli lazy del grafico\r\n\r\n this.Animations = this.Settings?.Animations != null ? this.Settings?.Animations : (this.Animations != null ? this.Animations : this.animations)\r\n this.Theme = this.Settings?.Theme != null ? this.Settings?.Theme : (this.Theme != null ? this.Theme : <any>this.theme)\r\n this.Locale = this.Settings?.Locale != null ? this.Settings?.Locale : (this.Locale != null ? this.Locale : this.locale)\r\n\r\n this.isPaged = (this.DataArray && this.DataArray.length > 0 && !this.Data) || (this.DataDtos && this.DataDtos.length > 0 && !!this.DataRetrieve);\r\n this.log(\"Chart \" + this.name + \": ngOnInit\");\r\n }\r\n\r\n /**\r\n * Implementazione utilizzata per controllare eventuali proprietà chiave del grafico e rigraficare tutto qualora si rivelasse necessario\r\n * \r\n * @param {SimpleChanges} changes Indicazione dei cambiamenti sulle proprietà del grafico. Vedere documentazione Angular in merito\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.initDone)\r\n return;\r\n\r\n this.log(\"Chart \" + this.name + \": ngOnChanges\");\r\n\r\n let propsToCheck = [\"Timeline\", \"Legend\", \"Settings\", \"Animations\", \"Theme\", \"Locale\", ...this.getSpecificPropertiesToCheck()];\r\n this.checkPropertiesAndRegraphicateAsNeeded(changes, propsToCheck);\r\n }\r\n\r\n /**\r\n * Nel post inizializzazione, a patto che mi trovi in ambiente \"browser\", proseguo al caricamento del grafico sull'HTML\r\n */\r\n ngAfterViewInit() {\r\n if (!this.name)\r\n throw \"a Unique name is mandatory to create a chart\";\r\n\r\n this.log(\"Chart \" + this.name + \": ngAfterViewInit, graphicating chart outside Angular\");\r\n\r\n if (!this.isPaged)\r\n this.dispatchLoadChart();\r\n }\r\n\r\n /**\r\n * All'onDestroy scarico il grafico per liberare memoria\r\n */\r\n ngOnDestroy() {\r\n if (this.Chart) {\r\n this.log(\"Chart \" + this.name + \": Unloading destroyed chart\");\r\n this.browserOnly(() => { this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name) });\r\n }\r\n else\r\n this.log(\"Chart \" + this.name + \": Unloading uncreated chart component. It probably was a duplicated\");\r\n }\r\n\r\n /**\r\n * Registra il grafico attuale nel Dispatcher in modo che venga caricato appena possibile\r\n */\r\n private dispatchLoadChart(): void {\r\n this.browserOnly(() => {\r\n this.Dispatcher.register(this.name, () => { return this.loadChart(); });\r\n })\r\n }\r\n\r\n /**\r\n * Il caricamento del grafico funziona nel seguente modo:\r\n * \r\n * 1) Caricamento del tema e delle animazioni, qualora necessari\r\n * \r\n * 2) Caricamento delle impostazioni specifiche e integrazione con le impostazioni generiche\r\n * \r\n * 3) Graficazione\r\n * \r\n * 4) Caricamento del locale\r\n */\r\n private loadChart() {\r\n this.log(\"Chart \" + this.name + \": Start loading Modules if needed\");\r\n return Promise.all([\r\n this.setupAmChartsThemes().then(() => {\r\n this.log(\"Chart \" + this.name + \": Graphicating after modules load\");\r\n\r\n var castedSettings = this.getCastedSettings();\r\n this.fillSettings(castedSettings);\r\n this.fillSpecificSettings(castedSettings);\r\n this.ChartService = this.graphicate(castedSettings);\r\n this.Chart = this.ChartService.ChartInstance;\r\n\r\n if (!this.Chart) this.log(\"Chart \" + this.name + \": Could not create graph\");\r\n\r\n // Unico punto reale in cui viene utilizzato il locale, tehe\r\n return this.Charter.applyLocale(this.Chart, this.Locale).then(() => { this.initDone = true; this.chartLoaded.emit(this) });\r\n })\r\n ]);\r\n }\r\n\r\n /**\r\n * Riempimento delle impostazioni nella classe Settings. Si danno priorità ai valori già impostati nei Settings, \r\n * integrando eventualmente con le proprietà del grafico\r\n * \r\n * @param {BaseSettings} settings Impostazioni base ricevute dalla specializzazione del grafico\r\n */\r\n private fillSettings(settings: BaseSettings) {\r\n\r\n // Merge degli Input con i Settings, dando priorità ai Settings\r\n\r\n settings.Theme = settings.Theme ? settings.Theme : this.Theme;\r\n settings.Locale = settings.Locale ? settings.Locale : this.Locale;\r\n settings.Animations = settings.Animations != null ? settings.Animations : this.Animations;\r\n\r\n settings.Legend = settings.Legend != null ? settings.Legend : this.Legend;\r\n settings.Name = settings.Name ? settings.Name : this.name;\r\n settings.Timeline = settings.Timeline != null ? settings.Timeline : this.Timeline;\r\n settings.AdaptLabelSizeAndOrientation = settings.AdaptLabelSizeAndOrientation != null ? settings.AdaptLabelSizeAndOrientation : this.AdaptLabelSizeAndOrientation;\r\n settings.XAxisTitle = settings.XAxisTitle ? settings.XAxisTitle : this.XTitle;\r\n settings.YAxisTitle = settings.YAxisTitle ? settings.YAxisTitle : this.YTitle;\r\n settings.LegendPosition = settings.LegendPosition ? settings.LegendPosition : this.LegendPosition;\r\n settings.HideSeriesOnLabelClick = settings.HideSeriesOnLabelClick != null ? settings.HideSeriesOnLabelClick : this.HideSeriesOnLabelClick;\r\n settings.MinGridDistance = settings.MinGridDistance != null ? settings.MinGridDistance : this.MinGridDistance;\r\n settings.LegendPadding = settings.LegendPadding ? settings.LegendPadding : this.LegendPadding ?? null;\r\n\r\n (<any>settings).ContainerHeight = this.el.nativeElement.parentElement.offsetHeight;\r\n (<any>settings).OnSeriesClickCallback = (series) => { this.onSeriesClicked.emit(series); };\r\n (<any>settings).OnSelectionChangedCallback = (event: { from: Date, to: Date, initial: boolean }) => { this.onSelectionChanged.emit({ from: event.from, to: event.to, initial: event.initial }); };\r\n }\r\n\r\n /**\r\n * Controlla i cambiamenti avvenuti alle proprietà chiave e rieffettua la graficazione qualora necessario\r\n * \r\n * @param {SimpleChanges} changes Indicazione della modifiche avvenute nei vari Input\r\n * @param {string[]} propsToCheck Lista degli Input da controllare per cui una modifica causa una rigraficazione\r\n */\r\n private checkPropertiesAndRegraphicateAsNeeded(changes: SimpleChanges, propsToCheck: string[]) {\r\n let toReGraphicate = false;\r\n for (let i = 0; i < propsToCheck.length; i++)\r\n toReGraphicate = toReGraphicate || (changes[propsToCheck[i]] && changes[propsToCheck[i]].currentValue)\r\n\r\n if (toReGraphicate)\r\n this.reloadChart();\r\n }\r\n\r\n /**\r\n * Funzione che effettua un cambio di pagina per i grafici paginati. Qualora **data** fosse nullo significa che è iniziato un caricamento \r\n * e anche lato applicativo il DataRetrieve dovrà considerare che l'assenza di valori non è altro che un'indicazione di inizio caricamento\r\n * \r\n * Il caricamento di qualsiasi pagina genererà comunque una primo evento con **data** nullo in modo da indicare l'inizio caricamento e\r\n * in seconda istanza un altro evento in cui **data** sarà sempre valorizzato, o con il Dto da usare per recuperare i dati, o con i dati\r\n * veri e propri già presenti nel **DataArray**\r\n * \r\n * I callback **onLoadStart** e **onLoadEnd** vengono sempre chiamati\r\n * \r\n * @param {{ data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any, index: number }} nd Indice del caricamento dati, con eventualmente già i dati se disponibili\r\n */\r\n public changePage(nd: { data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any, index: number }) {\r\n if (!nd.data) {\r\n this.loadingChart = true;\r\n // Serve per informare l'applicativo in listening sull'indice attualmente in visualizzazione. \r\n // La mancanza di dati indica che non devono essere effettuate ricerche per ora\r\n if (this.DataRetrieve)\r\n this.DataRetrieve(null, nd.index)\r\n this.onLoadStart.emit();\r\n return;\r\n }\r\n\r\n if (this.DataRetrieve)\r\n this.DataRetrieve(nd.data, nd.index).then(t => { this.changePageDataReceived(t); });\r\n else\r\n this.changePageDataReceived(nd.data);\r\n }\r\n\r\n /**\r\n * Al termine del caricamento dei dati di una pagina questo metodo viene chiamato per rigraficare la situazione con i nuovi dati\r\n * \r\n * @param {LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any} data Dati del grafico\r\n */\r\n private changePageDataReceived(data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any) {\r\n this.loadingChart = false;\r\n this.onLoadEnd.emit();\r\n let firstBind = !this.Data;\r\n this.Data = data;\r\n\r\n if (!firstBind)\r\n this.reloadChart();\r\n else\r\n this.dispatchLoadChart();\r\n }\r\n\r\n /**\r\n * Ricarica il grafico distruggendo il vecchio e ricreando il nuovo\r\n * \r\n * Le chiamate a questo metodo possono essere trasformate in chiamate al metodo **graphicate** della Service, se solo quel metodo fosse abbastanza intelligente per capire\r\n * le differenze fra il grafico com'era prima e come deve diventare, in modo da non ricrearlo ma semplicemente modificare quello che già è disegnato\r\n */\r\n private reloadChart() {\r\n this.browserOnly(() => { if (!this.Chart.isDisposed()) this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name) });\r\n this.Dispatcher.register(this.name, () => { return this.loadChart(); });\r\n }\r\n\r\n /**\r\n * Permette di aggiungere un blocco di dati in maniera \"live\" ad un grafico\r\n */\r\n public addData(chartData: any) {\r\n this.ChartService.refreshData(chartData);\r\n };\r\n\r\n /**\r\n * Funzione che si occupa di caricare i temi necessari per il grafico in oggetto. Prima applica il tema, poi, se serve, applica le animazioni\r\n */\r\n private setupAmChartsThemes() {\r\n return Promise.all([\r\n this.Charter.applyTheme(am4core, this.Theme).then(() => {\r\n return this.Animations ? this.Charter.applyAnimations(am4core) : this.Charter.unapplyAnimations(am4core);\r\n })\r\n ]);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private log(log: string) {\r\n if (this.logs)\r\n console.log(\"@esfaenza/es-charts: \" + log);\r\n }\r\n\r\n /**\r\n * Imposta lo zoom dal **from** al **to**\r\n * \r\n * @param {Date} from Inizio dello zoom\r\n * @param {Date} to Fine dello zoom\r\n */\r\n public setSelection(from: Date, to: Date) {\r\n this.ChartService.setSelection(from, to);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n browserOnly(f: () => void) {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.zone.runOutsideAngular(() => {\r\n f();\r\n });\r\n }\r\n }\r\n}","import { DateService } from \"@esfaenza/extensions\";\r\nimport { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\n\r\nimport { Limit } from \"../models/data/base/Limit\";\r\nimport { LineChartData } from '../models/data/LineChartData';\r\nimport { LineChartSettings } from '../models/settings/LineChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un LineChart\r\n */\r\nexport class LineChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private DataGroupBucketSize: number = 1500;\r\n /** @ignore */\r\n private OpacityOnSelected: number = 0.3;\r\n /** @ignore */\r\n private OpacityOnFill: number = 0.75;\r\n /** @ignore */\r\n private singleDataSet: boolean = false;\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter, private dateExts: DateService) { }\r\n\r\n /** Rifeirmento interno all'asse delle Date per semplicità */\r\n private dateAxis: am4charts.DateAxis;\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un LineChart\r\n */\r\n public graphicate(data: LineChartData | any, settings: LineChartSettings): IBaseService<am4charts.XYChart> {\r\n let dataConverted: LineChartData = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;\r\n let threshold = settings.DataGroupingThreshold ?? 3000;\r\n this.singleDataSet = settings.MergeDatasets ?? false;\r\n let showTicks = settings.ShowTicks == null ? true : settings?.ShowTicks;\r\n let dataShouldBeGrouped = Math.max(...dataConverted.series.map(t => t.values.length)) > threshold;\r\n let showTimeline = settings.Timeline || dataShouldBeGrouped;\r\n let seriesWithInterval = dataConverted.series.some(t => t.interval);\r\n let interval = seriesWithInterval ? dataConverted.series.find(t => t.interval).interval : null;\r\n let gapsAllowed = settings?.AllowGaps == null ? seriesWithInterval : settings?.AllowGaps;\r\n let finalInstant = settings?.FinalInstants ?? true;\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n if (settings.Min)\r\n yAxis.min = settings.Min;\r\n if (settings.Max)\r\n yAxis.max = settings.Max;\r\n\r\n let limitNullOrUndef = dataConverted.limit == null || dataConverted.limit == undefined;\r\n let limits = limitNullOrUndef ? [] : !(<any>dataConverted.limit).length ? [<Limit>dataConverted.limit] : <Limit[]>dataConverted.limit;\r\n if (limits.length > 0) {\r\n\r\n for(let i = 0; i < limits.length; i++){\r\n let limit = limits[i]\r\n\r\n if (limit.upper != null && limit.upper != undefined && limit.lower != null && limit.lower != undefined) {\r\n let range = yAxis.axisRanges.create();\r\n range.value = limit.lower;\r\n range.endValue = limit.upper;\r\n\r\n if (limit.fillColor) {\r\n range.contents.stroke = am4core.color(limit.fillColor);\r\n range.contents.fill = range.contents.stroke;\r\n }\r\n\r\n range.label.inside = true;\r\n range.label.text = limit.upperlabel;\r\n range.label.fill = range.grid.stroke;\r\n range.label.verticalCenter = \"bottom\";\r\n range.label.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.strokeWidth = 2;\r\n range.grid.strokeOpacity = 1;\r\n }\r\n else if ((limit.lower == null || limit.lower == undefined) && limit.upper != null && limit.upper != undefined) {\r\n let range = yAxis.axisRanges.create();\r\n range.value = limit.upper;\r\n range.label.inside = true;\r\n range.label.text = limit.upperlabel;\r\n range.label.fill = range.grid.stroke;\r\n range.label.verticalCenter = \"bottom\";\r\n range.label.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.strokeWidth = 2;\r\n range.grid.strokeOpacity = 1;\r\n }\r\n else if ((limit.upper == null || limit.upper == undefined) && limit.lower != null && limit.lower != undefined) {\r\n let range = yAxis.axisRanges.create();\r\n range.value = limit.lower;\r\n range.label.inside = true;\r\n range.label.text = limit.lowerlabel;\r\n range.label.fill = range.grid.stroke;\r\n range.label.verticalCenter = \"bottom\";\r\n range.label.stroke = am4core.color(limit.lowercolor || \"#F92200\");\r\n range.grid.stroke = am4core.color(limit.lowercolor || \"#F92200\");\r\n range.grid.strokeWidth = 2;\r\n range.grid.strokeOpacity = 1;\r\n }\r\n }\r\n }\r\n \r\n this.dateAxis = ChartInstanceCasted.xAxes.push(new am4charts.DateAxis());\r\n\r\n // Per comatibilità col codice scritto quando non era a livello globale, mi scoccia sostituire\r\n let dateAxis = this.dateAxis;\r\n\r\n if (settings.XAxisTitle) {\r\n dateAxis.title.text = settings.XAxisTitle\r\n dateAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n if (showTicks) {\r\n dateAxis.renderer.ticks.template.disabled = false;\r\n dateAxis.renderer.ticks.template.strokeOpacity = 1;\r\n dateAxis.renderer.ticks.template.stroke = am4core.color(\"#495C43\");\r\n dateAxis.renderer.ticks.template.strokeWidth = 2;\r\n dateAxis.renderer.ticks.template.length = 10;\r\n dateAxis.renderer.ticks.template.location = 0;\r\n }\r\n\r\n dateAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 50;\r\n dateAxis.renderer.grid.template.location = 0;\r\n dateAxis.minZoomCount = 5;\r\n dateAxis.groupData = dataShouldBeGrouped;\r\n dateAxis.groupCount = settings.DataGroupBucketSize ?? this.DataGroupBucketSize;\r\n\r\n //Se ho almeno una serie ad intervallo e i settings non mi impediscono esplicitamente di usare i gaps, visualizzo i dati col gap\r\n\r\n if (gapsAllowed) {\r\n if (!seriesWithInterval) {\r\n console.error(\"Per utilizzare la funzionalità dei gap è obbligatorio definire un intervallo nelle serie del grafico\");\r\n return null;\r\n }\r\n dateAxis.baseInterval = { count: interval.count, timeUnit: this.fixTimeUnit(interval.timeunit) };\r\n }\r\n if (showTimeline)\r\n ChartInstanceCasted.scrollbarX = new am4charts.XYChartScrollbar();\r\n\r\n let seriesToPush = [];\r\n let seriesColors: am4core.Color[] = [];\r\n let defaultIndex = 0;\r\n\r\n // Ordinamento dei dati se serve\r\n dataConverted.series.forEach((s) => {\r\n if (s.values[0] && !(s.values[0].d instanceof Date)) {\r\n for (let v = 0; v < s.values.length; v++)\r\n s.values[v].d = new Date(s.values[v].d);\r\n }\r\n\r\n var correctOrder = true;\r\n var prevDate = null;\r\n for (let v = 0; v < s.values.length; v++) {\r\n if (!prevDate)\r\n prevDate = s.values[v].d;\r\n else\r\n if (s.values[v].d < prevDate) {\r\n correctOrder = false;\r\n break;\r\n }\r\n }\r\n\r\n if (!correctOrder)\r\n s.values.sort((d1, d2) => d1.d.getTime() - d2.d.getTime());\r\n });\r\n\r\n // Generazione di un unico dataset invece che N, per poter gestire un unico tooltip\r\n if (this.singleDataSet) {\r\n this.ChartInstance.data = this.generateSingleDataset(dataConverted);;\r\n dateAxis.cursorTooltipEnabled = false;\r\n }\r\n\r\n dataConverted.series.forEach((s, index) => {\r\n let stacked = s.stacked != null && s.stacked != undefined ? s.stacked : (settings?.Stacked ?? false);\r\n let fill = stacked || (s.fill != null && s.fill != undefined ? s.fill : (settings?.Fill ?? false));\r\n let series: am4charts.StepLineSeries | am4charts.LineSeries = settings?.Step ? new am4charts.StepLineSeries() : new am4charts.LineSeries();\r\n series.dataFields.valueY = \"v\" + (this.singleDataSet ? index : \"\");\r\n series.dataFields.dateX = \"d\";\r\n (<any>series).measureUnit = s.uom;\r\n series.name = s.name;\r\n series.strokeWidth = settings?.StrokeSize ?? 1;\r\n series.connect = !gapsAllowed;\r\n series.minBulletDistance = 10;\r\n series.tooltipText = this.singleDataSet ? \"\" : s.name ? \"{name}: [bold]{valueY}[/]\" : \"[bold]{valueY}[/]\";\r\n series.tooltip.pointerOrientation = \"vertical\";\r\n series.tooltip.background.fillOpacity = 0.5;\r\n series.tooltip.label.padding(12, 12, 12, 12);\r\n series.fillOpacity = fill ? this.OpacityOnFill : 0.0001;\r\n series.stacked = stacked;\r\n series.hidden = s.hidden;\r\n\r\n //Dataset singolo, i dati sono registrati a livello di chart, creo il tooltip che permette di vederli tutti insieme\r\n //altrimenti assegno i dati della serie direttamente alla serie\r\n if (this.singleDataSet) {\r\n series.tooltip.getFillFromObject = false;\r\n series.tooltip.background.fill = am4core.color(\"#eee\");\r\n series.tooltip.label.fill = am4core.color(\"#00\");\r\n series.tooltip.defaultState.transitionDuration = 0;\r\n series.tooltip.hiddenState.transitionDuration = 0;\r\n\r\n //Utilizzo il mio dateService per la formattazione della data in modo che non debba mai gestire n formati fra n librerie... bellissimo\r\n series.dateFormatter.format = (source: Date): string => {\r\n if (interval && finalInstant && [\"hour\", \"minute\", \"second\"].includes(interval.timeunit)) {\r\n let timepart: \"minute\" | \"hour\" | \"day\" = null;\r\n switch (interval.timeunit) {\r\n case \"hour\": timepart = 'day'; break;\r\n case \"minute\": timepart = 'hour'; break;\r\n case \"second\": timepart = 'minute'; break;\r\n }\r\n if (timepart)\r\n return this.dateExts.adjustDateToFinalInstant(source, timepart, interval ? interval.timeunit == \"second\" : false);\r\n }\r\n else\r\n return this.dateExts.getFormatted(source, interval ? [\"day\", \"week\", \"month\", \"year\"].includes(interval.timeunit) : false, interval ? interval.timeunit == \"second\" : false);\r\n }\r\n\r\n (<any>series.adapter).add(\"tooltipText\", () => {\r\n var text = \"[bold]{dateX.formatDate()}[/]\\n\";\r\n this.ChartInstance.series.each((item) => {\r\n let uom = \" [font-style: italic]\" + (<any>series).measureUnit || \"\" + \"[/]\";\r\n text += \"[\" + (<any>item.stroke).hex + \"]●[/] \" + (item.name ? (item.name + \": \") : \"\") + \"[bold]{\" + item.dataFields.valueY + \"}[/]\" + uom + \"\\n\";\r\n });\r\n return text;\r\n });\r\n }\r\n else\r\n series.data = s.values;\r\n\r\n let segment = series.segments.template;\r\n\r\n let hoverState = segment.states.create(\"hover\");\r\n hoverState.properties.strokeWidth = (settings?.StrokeSize ?? 1) + 1;\r\n\r\n let dimmed = segment.states.create(\"dimmed\");\r\n dimmed.properties.stroke = am4core.color(\"#dadada\");\r\n\r\n //Se la serie ha un colore, uso quello, altrimenti pesco dai colori di default andando in ordine\r\n if (s.color)\r\n seriesColors.push(am4core.color(s.color));\r\n else {\r\n seriesColors.push(ChartInstanceCasted.colors.list[defaultIndex % ChartInstanceCasted.colors.list.length])\r\n defaultIndex++;\r\n }\r\n\r\n seriesToPush.push(series);\r\n });\r\n\r\n\r\n ChartInstanceCasted.colors.list = seriesColors;\r\n //Scrivo le serie nel grafico\r\n seriesToPush.forEach(s => {\r\n ChartInstanceCasted.series.push(s);\r\n if (showTimeline)\r\n (<am4charts.XYChartScrollbar>ChartInstanceCasted.scrollbarX).series.push(s);\r\n });\r\n\r\n if (settings.Legend) {\r\n this.ChartInstance.legend = new am4charts.Legend();\r\n this.ChartInstance.legend.position = settings?.LegendPosition ?? 'right';\r\n this.ChartInstance.legend.scrollable = true;\r\n\r\n this.ChartInstance.legend.itemContainers.template.tooltipText = \"{name}\";\r\n this.ChartInstance.legend.itemContainers.template.events.on(\"over\", (event) => { this.processOver(<am4charts.LineSeries>event.target.dataItem.dataContext); });\r\n this.ChartInstance.legend.itemContainers.template.events.on(\"out\", () => { this.processOut(); });\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n this.ChartInstance.cursor = new am4charts.XYCursor();\r\n\r\n //Prove******************************************************************************************************************************\r\n // this.ChartInstance.cursor.events.on(\"cursorpositionchanged\", (ev) => {\r\n // //var value = dateAxis.positionToDate(dateAxis.toAxisPosition(ev.target.xPosition));\r\n // var dt = dateAxis.series.values.find(t => t.dataItem.values.dateX);\r\n // if (dt && dt.dataItem) {\r\n // console.log(dt.dataItem.values);\r\n // // this.ChartInstance.tooltipText = dt;\r\n // }\r\n // else {\r\n // this.ChartInstance.tooltipText = \"\";\r\n // }\r\n // });\r\n //******************************************************************************************************************************\r\n\r\n this.ChartInstance.cursor.xAxis = dateAxis;\r\n this.ChartInstance.cursor.yAxis = yAxis;\r\n if (this.singleDataSet)\r\n this.ChartInstance.cursor.maxTooltipDistance = -1;\r\n\r\n //TODO: Cercare di capire perché è figlio di puttana......\r\n dateAxis.events.on(\"startchanged\", t => this.emitSelectionChanged(t, settings));\r\n dateAxis.events.on(\"endchanged\", t => this.emitSelectionChanged(t, settings));\r\n return this;\r\n }\r\n\r\n fixTimeUnit(tu: any): \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\" {\r\n if (tu === 0) return \"millisecond\";\r\n else if (tu === 1) return \"second\";\r\n else if (tu === 2) return \"minute\";\r\n else if (tu === 3) return \"hour\";\r\n else if (tu === 4) return \"day\";\r\n else if (tu === 5) return \"week\";\r\n else if (tu === 6) return \"month\";\r\n else if (tu === 7) return \"year\";\r\n else return tu;\r\n }\r\n \r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n this.dateAxis.zoomToDates(from, to, true, true);\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: LineChartData | any) {\r\n let dataConverted: LineChartData = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;\r\n\r\n if (this.singleDataSet) {\r\n var data = this.generateSingleDataset(dataConverted);\r\n this.ChartInstance.addData(data);\r\n return;\r\n }\r\n\r\n throw \"Impossibile aggiornare i dati senza unire il dataset. Si prega di impostare [MergeDatasets] a true\"\r\n\r\n }\r\n\r\n /** Partendo da dati divisi per seriue genera un dataset unito con la data come chiave e i vari valori dopo */\r\n private generateSingleDataset(data: LineChartData): any {\r\n let dto: { [index: number]: { [sindex: string]: number } } = {};\r\n data.series.forEach((vs, index) => {\r\n for (let i = 0; i < vs.values.length; i++) {\r\n var dataitem = vs.values[i];\r\n var indexer = new Date(dataitem.d).valueOf();\r\n\r\n if (!dto[indexer])\r\n dto[indexer] = {};\r\n\r\n dto[indexer]['v' + index] = dataitem.v;\r\n }\r\n });\r\n\r\n var dates = Object.keys(dto);\r\n var ret = [];\r\n for (let i = 0; i < dates.length; i++) {\r\n let values: { [sindex: string]: number } = dto[dates[i]];\r\n let item = { d: new Date(parseInt(dates[i])) };\r\n\r\n var vals = Object.keys(values);\r\n for (let ii = 0; ii < vals.length; ii++) {\r\n let series = vals[ii];\r\n let singleVal = values[series];\r\n item[series] = singleVal;\r\n }\r\n ret.push(item);\r\n }\r\n return ret;\r\n }\r\n\r\n /** @ignore */\r\n private emitSelectionChanged(ev, settings) {\r\n if ((<any>settings).OnSelectionChangedCallback) {\r\n this.throttla(\"selchange\", () => {\r\n var axis = <am4charts.DateAxis>ev.target\r\n var start = new Date(axis.minZoomed);\r\n var end = new Date(axis.maxZoomed);\r\n var initial = axis.min == axis.minZoomed && axis.max == axis.maxZoomed;\r\n (<any>settings).OnSelectionChangedCallback({ from: start, to: end, initial: initial });\r\n }, 150)\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private processOver(hoveredSeries: am4charts.LineSeries) {\r\n hoveredSeries.zIndex = 999;\r\n let fill = hoveredSeries.fillOpacity == this.OpacityOnFill;\r\n hoveredSeries.segments.each((segment) => {\r\n segment.setState(\"hover\");\r\n if (!fill)\r\n segment.fillSprite.fillOpacity = this.OpacityOnSelected;\r\n });\r\n if (!fill)\r\n hoveredSeries.legendDataItem.marker.children.getIndex(1).fillOpacity = this.OpacityOnSelected;\r\n\r\n this.ChartInstance.series.each((series) => {\r\n if (series != hoveredSeries) {\r\n let fill = series.fillOpacity == this.OpacityOnFill;\r\n (<am4charts.LineSeries>series).segments.each((segment) => {\r\n segment.setState(\"dimmed\");\r\n if (!fill)\r\n segment.fillSprite.fillOpacity = 0;\r\n });\r\n }\r\n });\r\n }\r\n\r\n /** @ignore */\r\n private processOut() {\r\n this.ChartInstance.series.each((series, i) => {\r\n series.zIndex = i;\r\n let fill = series.fillOpacity == this.OpacityOnFill;\r\n (<am4charts.LineSeries>series).segments.each((segment) => {\r\n segment.setState(\"default\");\r\n if (!fill)\r\n segment.fillSprite.fillOpacity = 0;\r\n });\r\n if (!fill)\r\n series.legendDataItem.marker.children.getIndex(1).fillOpacity = 0;\r\n });\r\n }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { PieChartData } from '../models/data/PieChartData';\r\nimport { KeyValueColor } from '../models/data/base/KeyValueColor';\r\nimport { PieChartSettings } from '../models/settings/PieChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un PieChart\r\n */\r\nexport class PieChartService implements IBaseService<am4charts.PieChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.PieChart3D | am4charts.PieChart;\r\n /** @ignore */\r\n private ViewAbsoluteValues: boolean = true;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un PieChart\r\n */\r\n public graphicate(data: PieChartData | any, settings: PieChartSettings): IBaseService<am4charts.PieChart> {\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for pie chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, settings.Mode3D ? am4charts.PieChart3D : am4charts.PieChart);\r\n this.ChartInstance.innerRadius = ((settings.DonutRadiusPercentage || 15) / 100) * (<any>settings).ContainerHeight;\r\n\r\n let series: am4charts.PieSeries3D | am4charts.PieSeries = this.ChartInstance.series.push(settings.Mode3D ? new am4charts.PieSeries3D() : new am4charts.PieSeries());\r\n series.dataFields.value = \"v\";\r\n series.dataFields.category = \"k\";\r\n //Il default sono valori percentuali\r\n if (this.ViewAbsoluteValues) {\r\n series.legendSettings.valueText = \"{value}\";\r\n series.labels.template.text = \"{category}: [bold]{value}[/]\"\r\n }\r\n series.slices.template.stroke = am4core.color(\"#fff\");\r\n series.slices.template.strokeOpacity = 1;\r\n series.slices.template.togglable = false;\r\n series.hiddenState.properties.opacity = 1;\r\n series.hiddenState.properties.endAngle = -90;\r\n series.hiddenState.properties.startAngle = -90;\r\n\r\n if (settings.HideZeroes == null ? true : settings.HideZeroes) {\r\n series.ticks.template.events.on(\"ready\", this.hideZeroes);\r\n series.ticks.template.events.on(\"visibilitychanged\", this.hideZeroes);\r\n series.labels.template.events.on(\"ready\", this.hideZeroes);\r\n series.labels.template.events.on(\"visibilitychanged\", this.hideZeroes);\r\n }\r\n\r\n series.slices.template.events.on(\"hit\", (ev) => {\r\n if ((<any>settings).OnSeriesClickCallback) {\r\n let clickedSeries = (<KeyValueColor>ev.target.dataItem.dataContext).k;\r\n (<any>settings).OnSeriesClickCallback(clickedSeries);\r\n }\r\n });\r\n\r\n let dataConverted: PieChartData = this.Adapter ? this.Adapter.adaptDataForPieChart(data) : data;\r\n\r\n let defaultIndex = 0;\r\n for (let i = 0; i < dataConverted.values.length; i++) {\r\n if (!dataConverted.values[i].c) {\r\n dataConverted.values[i].c = <any>this.ChartInstance.colors.list[defaultIndex % this.ChartInstance.colors.list.length];\r\n defaultIndex++;\r\n }\r\n else\r\n dataConverted.values[i].c = <any>am4core.color(dataConverted.values[i].c)\r\n }\r\n\r\n series.slices.template.propertyFields.fill = \"c\";\r\n this.ChartInstance.data = dataConverted.values;\r\n\r\n if (!settings.LabelsVisible) {\r\n series.labels.template.disabled = true;\r\n series.ticks.template.disabled = true;\r\n }\r\n else if (settings.LabelsWrap || settings.LabelsTruncate) {\r\n series.labels.template.maxWidth = settings.LabelsWidth || 100;\r\n if (settings.LabelsWrap)\r\n series.labels.template.wrap = true;\r\n else if (settings.LabelsTruncate)\r\n series.labels.template.truncate = true;\r\n }\r\n\r\n if (settings.Total?.Show) {\r\n var label = this.ChartInstance.seriesContainer.createChild(am4core.Label);\r\n label.textAlign = \"middle\";\r\n label.horizontalCenter = \"middle\";\r\n label.verticalCenter = \"middle\";\r\n label.adapter.add(\"text\", function (text, target) {\r\n let sumString = series.dataItem.values.value.sum.toString();\r\n let fs = 0;\r\n if (sumString.length >= 9)\r\n fs = 18;\r\n else if (sumString.length == 8)\r\n fs = 20;\r\n else if (sumString.length == 7)\r\n fs = 23;\r\n else if (sumString.length <= 7)\r\n fs = 28;\r\n return `[font-size:${settings.Total.TitleSize || 18}px]Totale[/]:\\n[bold font-size:${settings.Total.NumberSize || fs}px]${sumString}${settings.Total.UnitOfMeasure ? (' ' + settings.Total.UnitOfMeasure) : ''}[/]`;\r\n })\r\n }\r\n\r\n if (settings.Legend) {\r\n let legend = new am4charts.Legend();\r\n this.ChartInstance.legend = legend\r\n legend.position = settings?.LegendPosition || \"bottom\";\r\n legend.itemContainers.template.togglable = settings.HideSeriesOnLabelClick === true;\r\n legend.itemContainers.template.tooltipText = \"{category}\";\r\n\r\n //Se la legenda non fa il toggle della serie la considero come se fosse un click sulla serie in se\r\n if (!settings.HideSeriesOnLabelClick) {\r\n legend.itemContainers.template.events.on(\"hit\", (ev) => {\r\n if ((<any>settings).OnSeriesClickCallback) {\r\n let clickedSeries = (<any>ev.target.dataItem.dataContext).legendDataItem.name;\r\n (<any>settings).OnSeriesClickCallback(clickedSeries);\r\n }\r\n });\r\n }\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n \r\n /** @ignore */\r\n public refreshData(data: PieChartData | any){\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private hideZeroes(ev) {\r\n if (ev.target.dataItem && (ev.target.dataItem.values.value.percent == 0))\r\n ev.target.hide();\r\n else\r\n ev.target.show();\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { VerticalChartData } from '../models/data/VerticalChartData';\r\nimport { KeyValueColor } from '../models/data/base/KeyValueColor';\r\nimport { VerticalChartSettings } from '../models/settings/VerticalChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un VerticalChart\r\n */\r\nexport class VerticalChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private dangerZone: number = 50;\r\n /** @ignore */\r\n private LabelWidth: number = 150;\r\n /** @ignore */\r\n private LabelRightWhenCompressed: number = 20;\r\n /** @ignore */\r\n private LabelTopWhenCompressed: number = -5;\r\n /** @ignore */\r\n private DefaultColumnWidthPercentage: number = 85;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un VerticalChart\r\n */\r\n public graphicate(data: VerticalChartData | any, settings: VerticalChartSettings): IBaseService<am4charts.XYChart> {\r\n\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for vertical chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n \r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n let dataConverted: VerticalChartData = this.Adapter ? this.Adapter.adaptDataForVerticalChart(data) : data;\r\n ChartInstanceCasted.data = dataConverted.values;\r\n\r\n let noStrokes = dataConverted.values.some(t => !!t.c);\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n \r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n let categoryAxis: am4charts.CategoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis())\r\n if (settings.XAxisTitle) {\r\n categoryAxis.title.text = settings.XAxisTitle\r\n categoryAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n categoryAxis.dataFields.category = \"k\";\r\n categoryAxis.renderer.grid.template.location = 0;\r\n categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;\r\n\r\n let label = categoryAxis.renderer.labels.template;\r\n label.truncate = true;\r\n label.maxWidth = settings.LabelWidth ?? this.LabelWidth;\r\n label.tooltipText = \"{category}\";\r\n\r\n if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {\r\n categoryAxis.events.on(\"sizechanged\", (ev) => {\r\n let axis = ev.target;\r\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\r\n if (cellWidth < axis.renderer.labels.template.maxWidth) {\r\n let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);\r\n axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;\r\n axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;\r\n axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;\r\n axis.renderer.labels.template.horizontalCenter = \"right\";\r\n axis.renderer.labels.template.verticalCenter = \"middle\";\r\n }\r\n else {\r\n axis.renderer.labels.template.rotation = 0;\r\n axis.renderer.labels.template.dx = 0;\r\n axis.renderer.labels.template.dy = 0;\r\n axis.renderer.labels.template.horizontalCenter = \"middle\";\r\n axis.renderer.labels.template.verticalCenter = \"top\";\r\n }\r\n });\r\n }\r\n\r\n // Create series\r\n let series = ChartInstanceCasted.series.push(new am4charts.ColumnSeries());\r\n series.dataFields.valueY = \"v\";\r\n series.dataFields.categoryX = \"k\";\r\n series.name = \"\";\r\n\r\n let columnTemplate = series.columns.template;\r\n columnTemplate.tooltipText = \"{categoryX}: [bold]{valueY}[/] {t}\";\r\n columnTemplate.fillOpacity = .8;\r\n columnTemplate.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);\r\n if (noStrokes) {\r\n columnTemplate.strokeOpacity = 0;\r\n columnTemplate.strokeWidth = 0;\r\n columnTemplate.adapter.add(\"fill\", (_, target) => <any>am4core.color((<KeyValueColor>target.dataItem.dataContext).c));\r\n }\r\n else {\r\n columnTemplate.strokeWidth = 2;\r\n columnTemplate.strokeOpacity = 1;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n \r\n /** @ignore */\r\n public refreshData(data: VerticalChartData | any) {\r\n //TODO:IMPL\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { Vertical2DChartData } from '../models/data/Vertical2DChartData';\r\nimport { Vertical2DChartSettings } from '../models/settings/Vertical2DChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un Vertical2DChart\r\n */\r\nexport class Vertical2DChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private DefaultGroupPaddingPercentage: number = 5;\r\n /** @ignore */\r\n private dangerZone: number = 50;\r\n /** @ignore */\r\n private LabelWidth: number = 150;\r\n /** @ignore */\r\n private LabelRightWhenCompressed: number = 20;\r\n /** @ignore */\r\n private LabelTopWhenCompressed: number = -5;\r\n /** @ignore */\r\n private DefaultColumnWidthPercentage: number = 85;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un Vertical2DChart\r\n */\r\n public graphicate(data: Vertical2DChartData | any, settings: Vertical2DChartSettings): IBaseService<am4charts.XYChart> {\r\n\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for vertical chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n \r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n let categoryAxis: am4charts.CategoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis())\r\n if (settings.XAxisTitle) {\r\n categoryAxis.title.text = settings.XAxisTitle\r\n categoryAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n yAxis.min = 0;\r\n categoryAxis.dataFields.category = 'key'\r\n categoryAxis.renderer.cellStartLocation = am4core.percent(settings.GroupPaddingPercentage ?? this.DefaultGroupPaddingPercentage).value\r\n categoryAxis.renderer.cellEndLocation = am4core.percent(100 - (settings.GroupPaddingPercentage ?? this.DefaultGroupPaddingPercentage)).value\r\n categoryAxis.renderer.grid.template.location = 0;\r\n categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;\r\n\r\n let label = categoryAxis.renderer.labels.template;\r\n label.truncate = true;\r\n label.maxWidth = settings.LabelWidth ?? this.LabelWidth;\r\n label.tooltipText = \"{category}\";\r\n\r\n if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {\r\n categoryAxis.events.on(\"sizechanged\", (ev) => {\r\n let axis = ev.target;\r\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\r\n if (cellWidth < axis.renderer.labels.template.maxWidth) {\r\n let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);\r\n axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;\r\n axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;\r\n axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;\r\n axis.renderer.labels.template.horizontalCenter = \"right\";\r\n axis.renderer.labels.template.verticalCenter = \"middle\";\r\n }\r\n else {\r\n axis.renderer.labels.template.rotation = 0;\r\n axis.renderer.labels.template.dx = 0;\r\n axis.renderer.labels.template.dy = 0;\r\n axis.renderer.labels.template.horizontalCenter = \"middle\";\r\n axis.renderer.labels.template.verticalCenter = \"top\";\r\n }\r\n });\r\n }\r\n\r\n let dataPreConverted: Vertical2DChartData = this.Adapter ? this.Adapter.adaptDataForVertical2DChart(data) : data;\r\n\r\n let dataConverted = [];\r\n for (let i = 0; i < dataPreConverted.groups.length; i++) {\r\n let item = dataPreConverted.groups[i];\r\n let obj = { key: item.name };\r\n for (let p = 0; p < item.values.length; p++) {\r\n let value = item.values[p];\r\n obj[value.k] = value.v;\r\n }\r\n dataConverted.push(obj);\r\n }\r\n\r\n ChartInstanceCasted.data = dataConverted;\r\n if (dataPreConverted.colorinfos)\r\n ChartInstanceCasted.colors.list = dataPreConverted.colorinfos.map(c => am4core.color(c.color));\r\n\r\n //Prendo la prima categoria e mi baso sulle proprietà per dfeinire le serie\r\n for (let prop in dataConverted[0])\r\n if (prop !== \"key\")\r\n this.createSeries(ChartInstanceCasted, settings, prop, prop);\r\n\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: Vertical2DChartData | any) {\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private createSeries(chart, settings: Vertical2DChartSettings, value, name) {\r\n let series: am4charts.ColumnSeries = chart.series.push(new am4charts.ColumnSeries())\r\n series.dataFields.valueY = value;\r\n series.dataFields.categoryX = 'key';\r\n series.name = name;\r\n series.columns.template.tooltipText = \"{name} {categoryX}: [bold]{valueY}[/]\";\r\n series.columns.template.fillOpacity = .8;\r\n series.columns.template.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);\r\n\r\n series.events.on(\"hidden\", () => this.arrangeColumns);\r\n series.events.on(\"shown\", () => this.arrangeColumns);\r\n\r\n return series;\r\n }\r\n\r\n /** @ignore */\r\n private arrangeColumns() {\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n let series = ChartInstanceCasted.series.getIndex(0);\r\n let xAxis = ChartInstanceCasted.xAxes.getIndex(0);\r\n\r\n let w = 1 - xAxis.renderer.cellStartLocation - (1 - xAxis.renderer.cellEndLocation);\r\n if (series.dataItems.length > 1) {\r\n let x0 = xAxis.getX(series.dataItems.getIndex(0), \"categoryX\");\r\n let x1 = xAxis.getX(series.dataItems.getIndex(1), \"categoryX\");\r\n let delta = ((x1 - x0) / ChartInstanceCasted.series.length) * w;\r\n if (am4core.isNumber(delta)) {\r\n let middle = ChartInstanceCasted.series.length / 2;\r\n\r\n let newIndex = 0;\r\n ChartInstanceCasted.series.each((series) => {\r\n if (!series.isHidden && !series.isHiding) {\r\n series.dummyData = newIndex;\r\n newIndex++;\r\n }\r\n else {\r\n series.dummyData = ChartInstanceCasted.series.indexOf(series);\r\n }\r\n })\r\n let visibleCount = newIndex;\r\n let newMiddle = visibleCount / 2;\r\n\r\n ChartInstanceCasted.series.each((series) => {\r\n let trueIndex = ChartInstanceCasted.series.indexOf(series);\r\n let newIndex = series.dummyData;\r\n\r\n let dx = (newIndex - trueIndex + middle - newMiddle) * delta\r\n\r\n series.animate({ property: \"dx\", to: dx }, series.interpolationDuration, series.interpolationEasing);\r\n series.bulletsContainer.animate({ property: \"dx\", to: dx }, series.interpolationDuration, series.interpolationEasing);\r\n })\r\n }\r\n }\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { VerticalStackedChartData } from '../models/data/VerticalStackedChartData';\r\nimport { VerticalStackedChartSettings } from '../models/settings/VerticalStackedChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un VerticalStackedChart\r\n */\r\nexport class VerticalStackedChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private dangerZone: number = 50;\r\n /** @ignore */\r\n private LabelWidth: number = 150;\r\n /** @ignore */\r\n private LabelRightWhenCompressed: number = 20;\r\n /** @ignore */\r\n private LabelTopWhenCompressed: number = -5;\r\n /** @ignore */\r\n private DefaultColumnWidthPercentage: number = 85;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un VerticalStackedChart\r\n */\r\n public graphicate(data: VerticalStackedChartData | any, settings: VerticalStackedChartSettings): IBaseService<am4charts.XYChart> {\r\n \r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for vertical chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n // Create axes \r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n let categoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis());\r\n if (settings.XAxisTitle) {\r\n categoryAxis.title.text = settings.XAxisTitle\r\n categoryAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n yAxis.min = 0;\r\n\r\n categoryAxis.dataFields.category = \"key\";\r\n categoryAxis.renderer.grid.template.location = 0;\r\n categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;\r\n\r\n let label = categoryAxis.renderer.labels.template;\r\n label.truncate = true;\r\n label.maxWidth = settings.LabelWidth ?? this.LabelWidth;\r\n label.tooltipText = \"{category}\";\r\n\r\n if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {\r\n categoryAxis.events.on(\"sizechanged\", (ev) => {\r\n let axis = ev.target;\r\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\r\n if (cellWidth < axis.renderer.labels.template.maxWidth) {\r\n let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);\r\n axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;\r\n axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;\r\n axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;\r\n axis.renderer.labels.template.horizontalCenter = \"right\";\r\n axis.renderer.labels.template.verticalCenter = \"middle\";\r\n }\r\n else {\r\n axis.renderer.labels.template.rotation = 0;\r\n axis.renderer.labels.template.dx = 0;\r\n axis.renderer.labels.template.dy = 0;\r\n axis.renderer.labels.template.horizontalCenter = \"middle\";\r\n axis.renderer.labels.template.verticalCenter = \"top\";\r\n }\r\n });\r\n }\r\n\r\n let dataPreConverted: VerticalStackedChartData = this.Adapter ? this.Adapter.adaptDataForVerticalStackedChart(data) : data;\r\n\r\n let dataConverted = [];\r\n for (let i = 0; i < dataPreConverted.groups.length; i++) {\r\n let item = dataPreConverted.groups[i];\r\n let obj = { key: item.name };\r\n for (let p = 0; p < item.values.length; p++) {\r\n let value = item.values[p];\r\n obj[value.k] = value.v;\r\n }\r\n dataConverted.push(obj);\r\n }\r\n\r\n ChartInstanceCasted.data = dataConverted;\r\n\r\n //Prendo la prima categoria e mi baso sulle proprietà per dfeinire le serie\r\n for (let prop in dataConverted[0]) {\r\n if (prop !== \"key\")\r\n this.createSeriesStacked(ChartInstanceCasted, settings, prop, prop);\r\n }\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: VerticalStackedChartData | any) {\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private createSeriesStacked(chart, settings: VerticalStackedChartSettings, field, name) {\r\n // Set up series\r\n let series = chart.series.push(new am4charts.ColumnSeries());\r\n series.name = name;\r\n series.dataFields.valueY = field;\r\n series.dataFields.categoryX = \"key\";\r\n series.sequencedInterpolation = true;\r\n series.columns.template.tooltipText = \"{name} {categoryX}: [bold]{valueY}[/]\";\r\n series.columns.template.fillOpacity = .8;\r\n series.columns.template.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);\r\n\r\n // Make it stacked\r\n series.stacked = true;\r\n\r\n return series;\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { AreaChartData } from '../models/data/AreaChartData';\r\nimport { AreaChartSettings } from '../models/settings/AreaChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un AreaChart\r\n */\r\nexport class AreaChartService implements IBaseService<am4charts.XYChart> {\r\n\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un AreaChart\r\n */\r\n public graphicate(data: AreaChartData | any, settings: AreaChartSettings): IBaseService<am4charts.XYChart> {\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for area chart\");\r\n return null;\r\n }\r\n let dataConverted: AreaChartData = this.Adapter ? this.Adapter.adaptDataForAreaChart(data) : data;\r\n let showTicks = settings.ShowTicks == null ? true : settings?.ShowTicks;\r\n let interval = dataConverted.interval;\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n yAxis.tooltip.disabled = true;\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n yAxis.min = 0;\r\n\r\n let dateAxis = ChartInstanceCasted.xAxes.push(new am4charts.DateAxis());\r\n dateAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 50;\r\n dateAxis.startLocation = 0.5;\r\n dateAxis.endLocation = 0.5;\r\n\r\n if (settings.XAxisTitle) {\r\n dateAxis.title.text = settings.XAxisTitle\r\n dateAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n if (showTicks) {\r\n dateAxis.renderer.ticks.template.disabled = false;\r\n dateAxis.renderer.ticks.template.strokeOpacity = 1;\r\n dateAxis.renderer.ticks.template.stroke = am4core.color(\"#495C43\");\r\n dateAxis.renderer.ticks.template.strokeWidth = 2;\r\n dateAxis.renderer.ticks.template.length = 10;\r\n dateAxis.renderer.ticks.template.location = 0;\r\n }\r\n\r\n if (!!interval)\r\n dateAxis.baseInterval = { count: interval.count, timeUnit: this.fixTimeUnit(interval.timeunit) };\r\n\r\n // Unisco il dataset e tiro fuori i dati\r\n let chartData = [];\r\n let seriesToMakeCache: { [index: string]: boolean } = {};\r\n let seriesToMake: string[] = [];\r\n for (let i = 0; i < dataConverted.groups.length; i++) {\r\n let group = dataConverted.groups[i];\r\n let dataItem = { date: group.name };\r\n for (let ii = 0; ii < group.values.length; ii++) {\r\n let val = group.values[ii];\r\n dataItem[val.k] = val.v;\r\n if (!seriesToMakeCache[val.k]) {\r\n seriesToMakeCache[val.k] = true;\r\n seriesToMake.push(val.k);\r\n }\r\n }\r\n chartData.push(dataItem);\r\n }\r\n ChartInstanceCasted.data = chartData;\r\n //---------------------------------------------------------\r\n\r\n seriesToMake.forEach(s => { this.createSeries(ChartInstanceCasted, s); });\r\n\r\n ChartInstanceCasted.cursor = new am4charts.XYCursor();\r\n ChartInstanceCasted.cursor.xAxis = dateAxis;\r\n\r\n dateAxis.events.on(\"startchanged\", t => this.emitSelectionChanged(t, settings));\r\n dateAxis.events.on(\"endchanged\", t => this.emitSelectionChanged(t, settings));\r\n return this;\r\n }\r\n\r\n fixTimeUnit(tu: any): \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\" {\r\n if (tu === 0) return \"millisecond\";\r\n else if (tu === 1) return \"second\";\r\n else if (tu === 2) return \"minute\";\r\n else if (tu === 3) return \"hour\";\r\n else if (tu === 4) return \"day\";\r\n else if (tu === 5) return \"week\";\r\n else if (tu === 6) return \"month\";\r\n else if (tu === 7) return \"year\";\r\n else return tu;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: AreaChartData | any) {\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private emitSelectionChanged(ev, settings) {\r\n if ((<any>settings).OnSelectionChangedCallback) {\r\n this.throttla(\"selchange\", () => {\r\n var axis = <am4charts.DateAxis>ev.target\r\n var start = new Date(axis.minZoomed);\r\n var end = new Date(axis.maxZoomed);\r\n var initial = axis.min == axis.minZoomed && axis.max == axis.maxZoomed;\r\n (<any>settings).OnSelectionChangedCallback({ from: start, to: end, initial: initial });\r\n }, 150)\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private createSeries(chart: any, name: string) {\r\n let series: am4charts.LineSeries = chart.series.push(new am4charts.LineSeries())\r\n series.dataFields.dateX = \"date\";\r\n series.name = name[0].toUpperCase() + name.slice(1);\r\n series.dataFields.valueY = name;\r\n series.tooltipText = \"[#000]{valueY.value}[/]\";\r\n //series.tooltip.background.fill = am4core.color(\"#FFF\");\r\n series.tooltip.getStrokeFromObject = true;\r\n series.tooltip.background.strokeWidth = 3;\r\n series.tooltip.getFillFromObject = false;\r\n series.fillOpacity = 0.6;\r\n series.strokeWidth = 2;\r\n series.stacked = true;\r\n return series;\r\n }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\n\r\n// Data\r\nimport { LineChartData } from \"../../models/data/LineChartData\";\r\nimport { PieChartData } from \"../../models/data/PieChartData\";\r\nimport { VerticalChartData } from \"../../models/data/VerticalChartData\";\r\nimport { Vertical2DChartData } from \"../../models/data/Vertical2DChartData\";\r\nimport { VerticalStackedChartData } from \"../../models/data/VerticalStackedChartData\";\r\nimport { AreaChartData } from \"../../models/data/AreaChartData\";\r\nimport { PagedChartData } from \"../../models/data/PagedChartData\";\r\n\r\n// Services\r\nimport { LineChartService } from \"../../services/LineChartService\";\r\nimport { PieChartService } from \"../../services/PieChartService\";\r\nimport { VerticalChartService } from \"../../services/VerticalChartService\";\r\nimport { Vertical2DChartService } from \"../../services/Vertical2DChartService\";\r\nimport { VerticalStackedChartService } from \"../../services/VerticalStackedChartService\";\r\nimport { AreaChartService } from \"../../services/AreaChartService\";\r\n\r\n// Settings\r\nimport { PieChartSettings } from \"../../models/settings/PieChartSettings\";\r\nimport { AreaChartSettings } from \"../../models/settings/AreaChartSettings\";\r\nimport { VerticalChartSettings } from \"../../models/settings/VerticalChartSettings\";\r\nimport { Vertical2DChartSettings } from \"../../models/settings/Vertical2DChartSettings\";\r\nimport { VerticalStackedChartSettings } from \"../../models/settings/VerticalStackedChartSettings\";\r\nimport { LineChartSettings } from \"../../models/settings/LineChartSettings\";\r\n\r\n\r\n/**\r\n * Componente specifico per la graficazione di un qualsiasi tipo di grafico.\r\n * \r\n * Si basa sul tipo specificato dalla proprietà **Type**\r\n */\r\n@Component({\r\n selector: 'es-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Tipologia di grafico da presentare\r\n */\r\n @Input() Type: 'pie' | 'line' | 'vertical' | 'vertical-2d' | 'vertical-stacked' | 'area';\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo giusto col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | VerticalStackedChartData | AreaChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo giusto col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<LineChartData>[]\r\n | PagedChartData<PieChartData>[]\r\n | PagedChartData<Vertical2DChartData>[]\r\n | PagedChartData<VerticalChartData>[]\r\n | PagedChartData<VerticalStackedChartData>[]\r\n | PagedChartData<AreaChartData>[]\r\n | PagedChartData<any>[];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private dateService: DateService, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"Type\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings() {\r\n switch (this.Type) {\r\n case 'pie':\r\n return <PieChartSettings>(this.Settings ?? new PieChartSettings());\r\n case 'area':\r\n return <AreaChartSettings>(this.Settings ?? new AreaChartSettings());\r\n case 'line':\r\n return <LineChartSettings>(this.Settings ?? new LineChartSettings());\r\n case 'vertical':\r\n return <VerticalChartSettings>(this.Settings ?? new VerticalChartSettings());\r\n case 'vertical-2d':\r\n return <Vertical2DChartSettings>(this.Settings ?? new Vertical2DChartSettings());\r\n case 'vertical-stacked':\r\n return <VerticalStackedChartSettings>(this.Settings ?? new VerticalStackedChartSettings());\r\n }\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings): void {\r\n // Nope. Se si usa l'es-chart si danno i settings con l'oggetto\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {PieChartService | AreaChartService | LineChartService | VerticalChartService | Vertical2DChartService | VerticalStackedChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settings: PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings): any {\r\n switch (this.Type) {\r\n case 'pie':\r\n return new PieChartService(this.adapter).graphicate(<PieChartData>this.Data, <PieChartSettings>settings);\r\n case 'area':\r\n return new AreaChartService(this.adapter).graphicate(<AreaChartData>this.Data, <AreaChartSettings>settings);\r\n case 'line':\r\n return new LineChartService(this.adapter, this.dateService).graphicate(<LineChartData>this.Data, <LineChartSettings>settings);\r\n case 'vertical':\r\n return new VerticalChartService(this.adapter).graphicate(<VerticalChartData>this.Data, <VerticalChartSettings>settings);\r\n case 'vertical-2d':\r\n return new Vertical2DChartService(this.adapter).graphicate(<Vertical2DChartData>this.Data, <Vertical2DChartSettings>settings);\r\n case 'vertical-stacked':\r\n return new VerticalStackedChartService(this.adapter).graphicate(<VerticalStackedChartData>this.Data, <VerticalStackedChartSettings>settings);\r\n }\r\n }\r\n}","<chart-pager *ngIf=\"isPaged\" (onPageChange)=\"changePage($event)\" [Items]=\"DataArray\" [Dtos]=\"DataDtos\" [StartIndex]=\"DataDtoStartIndex\"\r\n [BrowseDelayMs]=\"BrowseDelayMs\">\r\n <ng-template #header_inner let-headerItem>\r\n <ng-container *ngTemplateOutlet=\"header_tr; context : {$implicit: headerItem}\"></ng-container>\r\n </ng-template>\r\n</chart-pager>\r\n\r\n<ng-container *ngIf=\"loadingChart && loading_template\">\r\n <div style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <ng-container *ngTemplateOutlet=\"loading_template\"></ng-container>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"loadingChart && !loading_template\">\r\n <div class=\"esc-loading-overlay\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <p class=\"label\">Loading....</p>\r\n </div>\r\n</ng-container>\r\n\r\n<div [class.hide-block]=\"loadingChart\" id=\"{{name}}\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\"></div>","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\n\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\n\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { AreaChartSettings } from '../../models/settings/AreaChartSettings';\r\nimport { AreaChartService } from '../../services/AreaChartService';\r\nimport { AreaChartData } from '../../models/data/AreaChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico ad Area\r\n */\r\n@Component({\r\n selector: 'es-area-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsAreaChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **AreaChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: AreaChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **AreaChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<AreaChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {AreaChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): AreaChartSettings {\r\n return <AreaChartSettings>(this.Settings ?? new AreaChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {AreaChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: AreaChartSettings): void {\r\n\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {AreaChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {AreaChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: AreaChartSettings): any {\r\n return new AreaChartService(this.adapter).graphicate(<AreaChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { LineChartSettings } from '../../models/settings/LineChartSettings';\r\nimport { LineChartService } from '../../services/LineChartService';\r\nimport { LineChartData } from '../../models/data/LineChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Linea su un asse temporale\r\n */\r\n@Component({\r\n selector: 'es-line-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsLineChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **LineChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: LineChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **LineChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<LineChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica se la curva deve collegare direttamente un datapoint all'altro o se deve fare degli step\r\n */\r\n @Input() Step: boolean;\r\n\r\n /**\r\n * Indica il numero massimo di datapoint visualizzabile in una singola vista del grafico. L'eccedenza viene raggruppata e verrà mostrata sullo zoom.\r\n * \r\n * ATTENZIONE: Utilizzando il sistema di default di raggruppamento di am-charts si rischia di tagliare via pezzi da serie molto ondulate\r\n * in quanto il comportamento di default è quello di eliminare i datapoint che non ci stanno, non di interpolarli\r\n */\r\n @Input() DataGroupBucketSize: number;\r\n\r\n /**\r\n * Soglia per controllare oltre che numero di datapoint il grafico deve iniziare ad effettuare raggruppamenti considerando l'Input **DataGroupBucketSize**\r\n */\r\n @Input() DataGroupingThreshold: number;\r\n\r\n /**\r\n * Indica le dimnsioni, in pixel della linea del grafico\r\n */\r\n @Input() StrokeSize: number;\r\n\r\n /**\r\n * Indica se sono permessi dei Gap fra un valore e l'altro.\r\n * \r\n * Normalmente quando ci sono dei buchi l'ultimo datapoint del buco viene collegato direttamente al primo datapoint disponibile. \r\n * \r\n * Impostando questo Input a true invece, posto di aver assegnato la variabile **interval** della classe **LineChartData**, è possibile \r\n * far apparire il blocco di dati mancanti come un buco vero e proprio, senza alcun collegamento fra i due datapoint estremi\r\n */\r\n @Input() AllowGaps: boolean;\r\n\r\n /**\r\n * Input che permette di rielaborare i dati del grafico per generare un solo Dataset\r\n * \r\n * Viene utilizzato semplicemente per dare un tooltip molto più bello/avanzato sullo scorrimentodel cursore all'interno del grafico\r\n */\r\n @Input() MergeDatasets: boolean;\r\n\r\n /**\r\n * Indica se le date che arrivano all'asse X devono essere considerate \"Istante finale\" e aggiustate di conseguenza. \r\n * Se non è valorizzata la variabile **interval** della classe **LineChartData** non ha alcun effetto\r\n * \r\n * Ad esempio, la data 16/07/2021 con intervallo orario verrebbe trasformata in 15/07/2021 24:00:00 (Ovviamente è utilizzato solo lato presentazione)\r\n */\r\n @Input() FinalInstants: boolean;\r\n\r\n /**\r\n * Gestisce il minimo dell'asse Y\r\n */\r\n @Input() Min: number;\r\n\r\n /**\r\n * Gestisce il massimo dell'asse Y\r\n */\r\n @Input() Max: number;\r\n\r\n /**\r\n * Indica se effettuare il Fill della serie in modo da non vedere solo la linea ma proprio l'area sottessa completamente colorata\r\n */\r\n @Input() Fill: boolean;\r\n\r\n /**\r\n * Indica se effettuare lo Stack della serie in modo da vedere tutte le linee una sopra l'altra. Implicitamente include anche il **Fill**\r\n */\r\n @Input() Stacked: boolean;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, private dateService: DateService, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\", \"Step\", \"DataGroupBucketSize\", \"DataGroupingThreshold\", \"StrokeSize\", \"Stacked\", \"AllowGaps\", \"MergeDatasets\", \"FinalInstants\", \"Fill\", \"Min\", \"Max\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {LineChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): LineChartSettings {\r\n return <LineChartSettings>(this.Settings ?? new LineChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {LineChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: LineChartSettings): void {\r\n settingsCasted.Step = settingsCasted.Step != null ? settingsCasted.Step : this.Step;\r\n settingsCasted.DataGroupBucketSize = settingsCasted.DataGroupBucketSize != null ? settingsCasted.DataGroupBucketSize : this.DataGroupBucketSize;\r\n settingsCasted.StrokeSize = settingsCasted.StrokeSize != null ? settingsCasted.StrokeSize : this.StrokeSize;\r\n settingsCasted.DataGroupingThreshold = settingsCasted.DataGroupingThreshold != null ? settingsCasted.DataGroupingThreshold : this.DataGroupingThreshold;\r\n settingsCasted.AllowGaps = settingsCasted.AllowGaps != null ? settingsCasted.AllowGaps : this.AllowGaps;\r\n settingsCasted.MergeDatasets = settingsCasted.MergeDatasets != null ? settingsCasted.MergeDatasets : this.MergeDatasets;\r\n settingsCasted.FinalInstants = settingsCasted.FinalInstants != null ? settingsCasted.FinalInstants : this.FinalInstants;\r\n settingsCasted.Min = settingsCasted.Min != null ? settingsCasted.Min : this.Min;\r\n settingsCasted.Max = settingsCasted.Max != null ? settingsCasted.Max : this.Max;\r\n settingsCasted.Fill = settingsCasted.Fill != null ? settingsCasted.Fill : this.Fill;\r\n settingsCasted.Stacked = settingsCasted.Stacked != null ? settingsCasted.Stacked : this.Stacked;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {LineChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {LineChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: LineChartSettings): any {\r\n return new LineChartService(this.adapter, this.dateService).graphicate(<LineChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { PieChartSettings } from '../../models/settings/PieChartSettings';\r\nimport { PieChartService } from '../../services/PieChartService';\r\nimport { PieChartData } from '../../models/data/PieChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Torta\r\n */\r\n@Component({\r\n selector: 'es-pie-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsPieChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **PieChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: PieChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **PieChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<PieChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica se mostrare o meno le serie con percentuale a 0\r\n */\r\n @Input() HideZeroes: boolean;\r\n\r\n /**\r\n * Indica se apparire in modalità 3D o 2D\r\n */\r\n @Input() Mode3D: boolean;\r\n\r\n /**\r\n * Percentuale dell'altezza del grafico che viene utilizzata per creare il buco all'interno della ciambella **wink** **wink**\r\n */\r\n @Input() DonutRadiusPercentage: number;\r\n\r\n /**\r\n * Indica se wrappare le label che non stanno nel contenitore\r\n */\r\n @Input() LabelsWrap: boolean;\r\n\r\n /**\r\n * Indica se troncare le label che non stanno nel contenitore\r\n */\r\n @Input() LabelsTruncate: boolean;\r\n\r\n /**\r\n * Indica la dimensione massima che possono assumere le label\r\n */\r\n @Input() LabelsWidth: number;\r\n\r\n /**\r\n * Indica se mostrare o meno le labels\r\n */\r\n @Input() LabelsVisible: boolean;\r\n\r\n /**\r\n * Indica se mostrare o meno le labels\r\n */\r\n @Input() Total: {\r\n Show: boolean;\r\n TitleSize: number;\r\n NumberSize: number;\r\n UnitOfMeasure: string;\r\n };\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\", \"HideZeroes\", \"Mode3D\", \"LabelsWrap\", \"LabelsTruncate\", \"LabelsWidth\", \"LabelsVisible\", \"ShowTotal\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {PieChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): PieChartSettings {\r\n return <PieChartSettings>(this.Settings ?? new PieChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {PieChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: PieChartSettings): void {\r\n settingsCasted.HideZeroes = settingsCasted.HideZeroes != null ? settingsCasted.HideZeroes : this.HideZeroes;\r\n settingsCasted.Mode3D = settingsCasted.Mode3D != null ? settingsCasted.Mode3D : this.Mode3D;\r\n settingsCasted.DonutRadiusPercentage = settingsCasted.DonutRadiusPercentage != null ? settingsCasted.DonutRadiusPercentage : this.DonutRadiusPercentage;\r\n settingsCasted.LabelsWrap = settingsCasted.LabelsWrap != null ? settingsCasted.LabelsWrap : this.LabelsWrap;\r\n settingsCasted.LabelsTruncate = settingsCasted.LabelsTruncate != null ? settingsCasted.LabelsTruncate : this.LabelsTruncate;\r\n settingsCasted.LabelsWidth = settingsCasted.LabelsWidth != null ? settingsCasted.LabelsWidth : this.LabelsWidth;\r\n settingsCasted.LabelsVisible = settingsCasted.LabelsVisible != null ? settingsCasted.LabelsVisible : this.LabelsVisible;\r\n settingsCasted.Total = settingsCasted.Total != null ? settingsCasted.Total : this.Total;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {PieChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {PieChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: PieChartSettings): any {\r\n return new PieChartService(this.adapter).graphicate(<PieChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { Vertical2DChartSettings } from '../../models/settings/Vertical2DChartSettings';\r\nimport { Vertical2DChartService } from '../../services/Vertical2DChartService';\r\nimport { Vertical2DChartData } from '../../models/data/Vertical2DChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Barre con due dimensioni\r\n */\r\n@Component({\r\n selector: 'es-vertical-2d-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsVertical2DChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **Vertical2DChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: Vertical2DChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **Vertical2DChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<Vertical2DChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n @Input() ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica il padding percentuale rispetto alla cella da lasciare fra un gruppo di barre e l'altro. Un valore pari a 0 indica la mancanza di\r\n * spazio fra un gruppo e l'altro, un valore pari a 5 indica il 5% della dimensione della cella in cui appare il gruppo come padding a destra e sinistra\r\n */\r\n @Input() GroupPaddingPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n @Input() LabelWidth: number;\r\n\r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n @Input() LabelVerticalOrientationCutoffWidth: number;\r\n\r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelRightWhenCompressed: number;\r\n\r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelTopWhenCompressed: number;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {Vertical2DChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): Vertical2DChartSettings {\r\n return <Vertical2DChartSettings>(this.Settings ?? new Vertical2DChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {Vertical2DChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: Vertical2DChartSettings): void {\r\n settingsCasted.ColumnWidthPercentage = settingsCasted.ColumnWidthPercentage != null ? settingsCasted.ColumnWidthPercentage : this.ColumnWidthPercentage;\r\n settingsCasted.GroupPaddingPercentage = settingsCasted.GroupPaddingPercentage != null ? settingsCasted.GroupPaddingPercentage : this.GroupPaddingPercentage;\r\n settingsCasted.LabelWidth = settingsCasted.LabelWidth != null ? settingsCasted.LabelWidth : this.LabelWidth;\r\n settingsCasted.LabelVerticalOrientationCutoffWidth = settingsCasted.LabelVerticalOrientationCutoffWidth != null ? settingsCasted.LabelVerticalOrientationCutoffWidth : this.LabelVerticalOrientationCutoffWidth;\r\n settingsCasted.LabelRightWhenCompressed = settingsCasted.LabelRightWhenCompressed != null ? settingsCasted.LabelRightWhenCompressed : this.LabelRightWhenCompressed;\r\n settingsCasted.LabelTopWhenCompressed = settingsCasted.LabelTopWhenCompressed != null ? settingsCasted.LabelTopWhenCompressed : this.LabelTopWhenCompressed;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {Vertical2DChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {Vertical2DChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: Vertical2DChartSettings): any {\r\n return new Vertical2DChartService(this.adapter).graphicate(<Vertical2DChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { VerticalChartSettings } from '../../models/settings/VerticalChartSettings';\r\nimport { VerticalChartService } from '../../services/VerticalChartService';\r\nimport { VerticalChartData } from '../../models/data/VerticalChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Barre\r\n */\r\n@Component({\r\n selector: 'es-vertical-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsVerticalChartComponent extends BaseChartComponent {\r\n \r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **VerticalChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: VerticalChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **VerticalChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<VerticalChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n @Input() ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n @Input() LabelWidth: number;\r\n\r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n @Input() LabelVerticalOrientationCutoffWidth: number;\r\n\r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelRightWhenCompressed: number;\r\n\r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelTopWhenCompressed: number;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {VerticalChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): VerticalChartSettings {\r\n return <VerticalChartSettings>(this.Settings ?? new VerticalChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {VerticalChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: VerticalChartSettings): void {\r\n settingsCasted.ColumnWidthPercentage = settingsCasted.ColumnWidthPercentage != null ? settingsCasted.ColumnWidthPercentage : this.ColumnWidthPercentage;\r\n settingsCasted.LabelWidth = settingsCasted.LabelWidth != null ? settingsCasted.LabelWidth : this.LabelWidth;\r\n settingsCasted.LabelVerticalOrientationCutoffWidth = settingsCasted.LabelVerticalOrientationCutoffWidth != null ? settingsCasted.LabelVerticalOrientationCutoffWidth : this.LabelVerticalOrientationCutoffWidth;\r\n settingsCasted.LabelRightWhenCompressed = settingsCasted.LabelRightWhenCompressed != null ? settingsCasted.LabelRightWhenCompressed : this.LabelRightWhenCompressed;\r\n settingsCasted.LabelTopWhenCompressed = settingsCasted.LabelTopWhenCompressed != null ? settingsCasted.LabelTopWhenCompressed : this.LabelTopWhenCompressed;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {VerticalChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {VerticalChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: VerticalChartSettings): any {\r\n return new VerticalChartService(this.adapter).graphicate(<VerticalChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { VerticalStackedChartSettings } from '../../models/settings/VerticalStackedChartSettings';\r\nimport { VerticalStackedChartService } from '../../services/VerticalStackedChartService';\r\nimport { VerticalStackedChartData } from '../../models/data/VerticalStackedChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Barre in modalità Stacked (una serie sopra l'altra)\r\n */\r\n@Component({\r\n selector: 'es-vertical-stacked-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsVerticalStackedChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **VerticalStackedChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: VerticalStackedChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **VerticalStackedChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<VerticalStackedChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n @Input() ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n @Input() LabelWidth: number;\r\n \r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n @Input() LabelVerticalOrientationCutoffWidth: number;\r\n \r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelRightWhenCompressed: number;\r\n \r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelTopWhenCompressed: number;\r\n \r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {VerticalStackedChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): VerticalStackedChartSettings {\r\n return <VerticalStackedChartSettings>(this.Settings ?? new VerticalStackedChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {VerticalStackedChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: VerticalStackedChartSettings): void {\r\n settingsCasted.ColumnWidthPercentage = settingsCasted.ColumnWidthPercentage != null ? settingsCasted.ColumnWidthPercentage : this.ColumnWidthPercentage;\r\n settingsCasted.LabelWidth = settingsCasted.LabelWidth != null ? settingsCasted.LabelWidth : this.LabelWidth;\r\n settingsCasted.LabelVerticalOrientationCutoffWidth = settingsCasted.LabelVerticalOrientationCutoffWidth != null ? settingsCasted.LabelVerticalOrientationCutoffWidth : this.LabelVerticalOrientationCutoffWidth;\r\n settingsCasted.LabelRightWhenCompressed = settingsCasted.LabelRightWhenCompressed != null ? settingsCasted.LabelRightWhenCompressed : this.LabelRightWhenCompressed;\r\n settingsCasted.LabelTopWhenCompressed = settingsCasted.LabelTopWhenCompressed != null ? settingsCasted.LabelTopWhenCompressed : this.LabelTopWhenCompressed;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {VerticalStackedChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {VerticalStackedChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: VerticalStackedChartSettings): any {\r\n return new VerticalStackedChartService(this.adapter).graphicate(<VerticalStackedChartData>this.Data, settingsCasted);\r\n }\r\n}","import { LineChartData } from './LineChartData';\r\nimport { PieChartData } from './PieChartData';\r\nimport { Vertical2DChartData } from './Vertical2DChartData';\r\nimport { VerticalChartData } from './VerticalChartData';\r\nimport { VerticalStackedChartData } from './VerticalStackedChartData';\r\n\r\n/**\r\n * Classe che identifica i dati per un grafico generico paginato\r\n */\r\nexport class PagedChartData<T extends LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | VerticalStackedChartData | any>{\r\n \r\n /**\r\n * Costruttore\r\n * \r\n * @param {T} data Dati del grafico\r\n * @param {string} title Titolo del grafico\r\n * @param {Object} dataRetrieveDto Dto utilizzato per recuperare i dati di questo grafico\r\n * @param {Function} dataRetrieveFunction Funzione utilizzata per ottenere i dati di questo grafico\r\n */\r\n constructor(public data: T, public title: string, public dataRetrieveDto: any, public dataRetrieveFunction: Function) { }\r\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EsChartsModuleConfig } from './models/EsChaartsModuleConfig';\r\nimport { BaseAdapter } from './adapters/BaseAdapter';\r\n\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from './tokens';\r\n\r\nimport { EsLineChartComponent } from \"./components/specializations/es-line-chart.component\";\r\nimport { EsAreaChartComponent } from \"./components/specializations/es-area-chart.component\";\r\nimport { EsPieChartComponent } from \"./components/specializations/es-pie-chart.component\";\r\nimport { EsVertical2DChartComponent } from \"./components/specializations/es-vertical-2d-chart.component\";\r\nimport { EsVerticalChartComponent } from \"./components/specializations/es-vertical-chart.component\";\r\nimport { EsVerticalStackedChartComponent } from \"./components/specializations/es-vertical-stacked-chart.component\";\r\nimport { PageChartSelector } from \"./components/chart-pager/chart-pager.component\";\r\nimport { EsChartComponent } from \"./components/specializations/es-chart.component\";\r\n\r\nimport { ChartLoader } from './models/core/ChartLoader';\r\nimport { ChartDispatcher } from './models/core/ChartDispatcher';\r\n\r\n/** Componenti esportati dal modulo */\r\nconst COMPONENTS = [\r\n EsChartComponent,\r\n EsLineChartComponent,\r\n EsPieChartComponent,\r\n EsVertical2DChartComponent,\r\n EsVerticalChartComponent,\r\n EsVerticalStackedChartComponent,\r\n PageChartSelector,\r\n EsAreaChartComponent\r\n]\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [...COMPONENTS],\r\n exports: [...COMPONENTS]\r\n})\r\nexport class EsChartsModule {\r\n\r\n static forRoot(config?: EsChartsModuleConfig): ModuleWithProviders<EsChartsModule> {\r\n return {\r\n ngModule: EsChartsModule,\r\n providers: [\r\n ChartLoader,\r\n ChartDispatcher,\r\n { provide: ESC_ANIMATIONS, useValue: config?.animations == null || config?.animations == undefined ? true : config?.animations },\r\n { provide: ESC_THEME, useValue: config?.theme || 'spiritedaway' },\r\n { provide: ESC_DEBUG_MODE, useValue: config?.debugMode || false },\r\n { provide: BaseAdapter, useClass: config?.adapter || BaseAdapter }\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of es-charts\r\n */\r\n\r\nexport * from './lib/adapters/BaseAdapter';\r\nexport * from './lib/adapters/IBaseAdapter';\r\nexport * from './lib/models/data/LineChartData';\r\nexport * from './lib/models/data/PieChartData';\r\nexport * from './lib/models/data/AreaChartData';\r\nexport * from './lib/models/data/Vertical2DChartData';\r\nexport * from './lib/models/data/VerticalChartData';\r\nexport * from './lib/models/data/VerticalStackedChartData';\r\nexport * from './lib/models/settings/AreaChartSettings';\r\nexport * from './lib/models/settings/LineChartSettings';\r\nexport * from './lib/models/settings/PieChartSettings';\r\nexport * from './lib/models/settings/Vertical2DChartSettings';\r\nexport * from './lib/models/settings/VerticalChartSettings';\r\nexport * from './lib/models/settings/VerticalStackedChartSettings';\r\nexport * from './lib/models/settings/base/BaseSettings';\r\nexport * from './lib/models/settings/base/BaseInterval';\r\nexport * from './lib/models/settings/base/LegendPad';\r\nexport * from './lib/models/data/base/Limit';\r\nexport * from './lib/models/data/base/DateValue';\r\nexport * from './lib/models/data/base/KeyValue';\r\nexport * from './lib/models/data/base/KeyValueColor';\r\nexport * from './lib/models/data/base/LineSerie';\r\nexport * from './lib/components/chart-pager/chart-pager.component';\r\nexport * from './lib/components/base/base-chart.component';\r\nexport * from './lib/components/specializations/es-chart.component';\r\nexport * from './lib/components/specializations/es-area-chart.component';\r\nexport * from './lib/components/specializations/es-line-chart.component';\r\nexport * from './lib/components/specializations/es-pie-chart.component';\r\nexport * from './lib/components/specializations/es-vertical-2d-chart.component';\r\nexport * from './lib/components/specializations/es-vertical-chart.component';\r\nexport * from './lib/components/specializations/es-vertical-stacked-chart.component';\r\nexport * from './lib/models/core/ChartThemes';\r\nexport * from './lib/models/data/PagedChartData';\r\nexport * from './lib/es-charts.module';\r\nexport * from './lib/tokens';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i5","i6","i7.PageChartSelector","i6.PageChartSelector"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-es-charts.mjs","sources":["../../../projects/es-charts/src/lib/adapters/BaseAdapter.ts","../../../projects/es-charts/src/lib/models/data/LineChartData.ts","../../../projects/es-charts/src/lib/models/data/PieChartData.ts","../../../projects/es-charts/src/lib/models/data/AreaChartData.ts","../../../projects/es-charts/src/lib/models/data/Vertical2DChartData.ts","../../../projects/es-charts/src/lib/models/data/VerticalChartData.ts","../../../projects/es-charts/src/lib/models/data/VerticalStackedChartData.ts","../../../projects/es-charts/src/lib/models/settings/base/BaseSettings.ts","../../../projects/es-charts/src/lib/models/settings/AreaChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/LineChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/PieChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/Vertical2DChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/VerticalChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/VerticalStackedChartSettings.ts","../../../projects/es-charts/src/lib/models/settings/base/BaseInterval.ts","../../../projects/es-charts/src/lib/models/settings/base/LegendPad.ts","../../../projects/es-charts/src/lib/models/data/base/Limit.ts","../../../projects/es-charts/src/lib/models/data/base/DateValue.ts","../../../projects/es-charts/src/lib/models/data/base/KeyValue.ts","../../../projects/es-charts/src/lib/models/data/base/KeyValueColor.ts","../../../projects/es-charts/src/lib/models/data/base/LineSerie.ts","../../../projects/es-charts/src/lib/components/chart-pager/chart-pager.component.ts","../../../projects/es-charts/src/lib/components/chart-pager/chart-pager.component.html","../../../projects/es-charts/src/lib/models/core/ChartThemes.ts","../../../projects/es-charts/src/lib/tokens.ts","../../../projects/es-charts/src/lib/models/core/ChartLoader.ts","../../../projects/es-charts/src/lib/models/core/ChartDispatcher.ts","../../../projects/es-charts/src/lib/components/base/base-chart.component.ts","../../../projects/es-charts/src/lib/services/LineChartService.ts","../../../projects/es-charts/src/lib/services/PieChartService.ts","../../../projects/es-charts/src/lib/services/VerticalChartService.ts","../../../projects/es-charts/src/lib/services/Vertical2DChartService.ts","../../../projects/es-charts/src/lib/services/VerticalStackedChartService.ts","../../../projects/es-charts/src/lib/services/AreaChartService.ts","../../../projects/es-charts/src/lib/components/specializations/es-chart.component.ts","../../../projects/es-charts/src/lib/components/base/base-chart.component.html","../../../projects/es-charts/src/lib/components/specializations/es-area-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-line-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-pie-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-vertical-2d-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-vertical-chart.component.ts","../../../projects/es-charts/src/lib/components/specializations/es-vertical-stacked-chart.component.ts","../../../projects/es-charts/src/lib/models/data/PagedChartData.ts","../../../projects/es-charts/src/lib/es-charts.module.ts","../../../projects/es-charts/src/public-api.ts","../../../projects/es-charts/src/esfaenza-es-charts.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\nimport { LineChartData } from \"../models/data/LineChartData\";\r\nimport { PieChartData } from \"../models/data/PieChartData\";\r\nimport { VerticalChartData } from \"../models/data/VerticalChartData\";\r\nimport { Vertical2DChartData } from \"../models/data/Vertical2DChartData\";\r\nimport { VerticalStackedChartData } from \"../models/data/VerticalStackedChartData\";\r\nimport { AreaChartData } from \"../models/data/AreaChartData\";\r\nimport { IBaseAdapter } from './IBaseAdapter';\r\n\r\n/**\r\n * Adapter Base da reimplementare per trasformare i dati da una libreria di grafici a questa per evitare di riscrivere tutto il codice di\r\n * generazione delle serie in caso si fossero usati grafici di altre librerie\r\n */\r\n@Injectable()\r\nexport class BaseAdapter implements IBaseAdapter {\r\n \r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per gli Area Chart\r\n */\r\n adaptDataForAreaChart(anyData: any): AreaChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart\r\n */\r\n adaptDataForLineChart(anyData: any): LineChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Line Chart\r\n */\r\n adaptDataForPieChart(anyData: any): PieChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart\r\n */\r\n adaptDataForVerticalChart(anyData: any): VerticalChartData {\r\n return anyData;\r\n }\r\n\r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart a due dimensioni\r\n */\r\n adaptDataForVertical2DChart(anyData: any): Vertical2DChartData {\r\n return anyData;\r\n }\r\n \r\n /**\r\n * Trasformatore dai dati della libreria vecchia ai dati della libreria nuova per i Vertical Chart sovrapposti\r\n */\r\n adaptDataForVerticalStackedChart(anyData: any): VerticalStackedChartData {\r\n return anyData;\r\n }\r\n}","import { Limit } from './base/Limit';\r\nimport { LineSerie } from './base/LineSerie';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo LineChart\r\n */\r\nexport class LineChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {LineSerie[]} series Lista di serie da graficare\r\n * @param {{upper: lower}}\r\n */\r\n constructor(public series: LineSerie[] = [], public limit?: Limit | Limit[]) { }\r\n}","import { KeyValueColor } from './base/KeyValueColor';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo PieChart\r\n */\r\nexport class PieChartData {\r\n\r\n /**\r\n * Costruttore \r\n * \r\n * @param {KeyValueColor[]} values Lista di Chiave-Valore-Colore che rappresentano ognuno uno spicchio del grafico a torta\r\n */\r\n constructor(public values: KeyValueColor[] = []) { }\r\n}","import { BaseInterval } from '../settings/base/BaseInterval';\r\nimport { KeyValue } from './base/KeyValue';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo AreaChart\r\n */\r\nexport class AreaChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {{ name: Date; values: KeyValue[]; }[]} groups Gruppi di valori raggruppati per data\r\n * @param {BaseInterval} interval Intervallo della serie. Viene utilizzato per gestire eventuali Gap\r\n */\r\n constructor(public groups: { name: Date; values: KeyValue[]; }[] = [], public interval?: BaseInterval) { }\r\n}","import { KeyValue } from './base/KeyValue';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo Vertical2DChart\r\n */\r\nexport class Vertical2DChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {{ name: string; values: KeyValue[];, uom: string }[]} groups Gruppi di valori raggruppati per nome\r\n * @param {{ color: string }[]} colorinfos Lista dei colori da utilizzare. Vanno a sovrascrivere quelli di default di amcharts\r\n */\r\n constructor(public groups: { name: string, values: KeyValue[], uom?: string }[] = [], public colorinfos?: { color: string }[]) { }\r\n}","import { KeyValueColor } from './base/KeyValueColor';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo VerticalChart\r\n */\r\nexport class VerticalChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {KeyValueColor[]} values Lista di Chiave-Valore-Colore che rappresentano ognuno una colonna\r\n */\r\n constructor(public values: KeyValueColor[] = []) { }\r\n}","import { KeyValue } from './base/KeyValue';\r\n\r\n/**\r\n * Dati relativi a un grafico di tipo VerticalStackedChart\r\n */\r\nexport class VerticalStackedChartData {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {{ name: string; values: KeyValue[], uom: string }[]} groups Gruppi di valori raggruppati per nome\r\n */\r\n constructor(public groups: { name: string, values: KeyValue[], uom?: string }[] = []) { }\r\n}","import { LegendPad } from \"../base/LegendPad\";\r\n\r\n/**\r\n * Classe che racchiude le impostazioni base bene o male applicabili ad ogni Grafico\r\n */\r\nexport abstract class BaseSettings {\r\n\r\n /**\r\n * Utilizza o no la Timeline\r\n */\r\n Timeline: boolean;\r\n\r\n /**\r\n * Visualizza o no la Legenda\r\n */\r\n Legend: boolean;\r\n\r\n /**\r\n * Nome del grafico (identificativo univoco)\r\n */\r\n Name: string;\r\n\r\n /**\r\n * Titolo dell'asse X\r\n */\r\n XAxisTitle: string;\r\n\r\n /**\r\n * Titolo dell'asse Y\r\n */\r\n YAxisTitle: string;\r\n\r\n /**\r\n * Dà evidenza, nell'asse X dei momenti in cui cambia il valore\r\n */\r\n ShowTicks: boolean;\r\n\r\n /**\r\n * Indica se utilizzare il comportamento di default per i click delle serie sulla Legenda. Mettendo questa variabile a **false**\r\n * e collegando l'output **onSeriesClicked** è possibile generare un evento ogni volta che l'utente fa click su una serie della Legenda\r\n */\r\n HideSeriesOnLabelClick: boolean;\r\n\r\n /**\r\n * Minima distanza nella griglia fra i valori, modifica la quantità di step fra i valori dell'asse X e quindi la granularità dei dati.\r\n * \r\n * Più piccola è, più valori verranno inseriti nell'asse X\r\n */\r\n MinGridDistance: number;\r\n\r\n /**\r\n * Indica la posizione della Legenda rispetto al grafico\r\n */\r\n LegendPosition: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\n /**\r\n * Cerca di aggiustare i vari step dell'asse X ruotandoli e diminuendone le dimensioni abbastanza per mostrarne il più possibile\r\n */\r\n AdaptLabelSizeAndOrientation: boolean;\r\n\r\n /**\r\n * Padding da applicare alla Legenda in caso si voglia spostare un po'\r\n */\r\n LegendPadding: LegendPad;\r\n\r\n /**\r\n * Tema da utilizzare, valido solo per il grafico in questione. Gli altri grafici della pagina possono avere stili diversi.\r\n * \r\n * Essendo i temi caricati in maniera asincrona in base all'utilizzo utilizzarne tanti diversi in un'unica pagina potrebbe rallentare il primo caricamento\r\n */\r\n Theme: 'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none';\r\n\r\n /**\r\n * Locale del singolo grafico\r\n */\r\n Locale: string;\r\n\r\n /**\r\n * Utilizzo o meno delle animazioni. Senza animazioni il grafico è leggermente più performante, specialmente all'aumentare dei punti nella serie\r\n */\r\n Animations: boolean;\r\n\r\n //TODO\r\n //SeriesLabelTemplate: string;\r\n\r\n //Nascosto, lo uso come collegamento fra le service e il base_charts\r\n //OnSeriesClickCallback: Function;\r\n //OnSelectionChangedCallback: Function;\r\n //ContainerHeight: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo AreaChart\r\n */\r\nexport class AreaChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo LineChart\r\n */\r\nexport class LineChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n\r\n /**\r\n * Indica se sono permessi dei Gap fra un valore e l'altro.\r\n * \r\n * Normalmente quando ci sono dei buchi l'ultimo datapoint del buco viene collegato direttamente al primo datapoint disponibile. \r\n * \r\n * Impostando questo Input a true invece, posto di aver assegnato la variabile **interval** della classe **LineChartData**, è possibile \r\n * far apparire il blocco di dati mancanti come un buco vero e proprio, senza alcun collegamento fra i due datapoint estremi\r\n */\r\n AllowGaps: boolean;\r\n\r\n /**\r\n * Soglia per controllare oltre che numero di datapoint il grafico deve iniziare ad effettuare raggruppamenti considerando l'Input **DataGroupBucketSize**\r\n */\r\n DataGroupingThreshold: number;\r\n \r\n /**\r\n * Indica il numero massimo di datapoint visualizzabile in una singola vista del grafico. L'eccedenza viene raggruppata e verrà mostrata sullo zoom.\r\n * \r\n * ATTENZIONE: Utilizzando il sistema di default di raggruppamento di am-charts si rischia di tagliare via pezzi da serie molto ondulate\r\n * in quanto il comportamento di default è quello di eliminare i datapoint che non ci stanno, non di interpolarli\r\n */\r\n DataGroupBucketSize: number\r\n \r\n /**\r\n * Indica se la curva deve collegare direttamente un datapoint all'altro o se deve fare degli step\r\n */\r\n Step: boolean;\r\n \r\n /**\r\n * Indica le dimnsioni, in pixel della linea del grafico\r\n */\r\n StrokeSize: number;\r\n \r\n /**\r\n * Input che permette di rielaborare i dati del grafico per generare un solo Dataset\r\n * \r\n * Viene utilizzato semplicemente per dare un tooltip molto più bello/avanzato sullo scorrimentodel cursore all'interno del grafico\r\n */\r\n MergeDatasets: boolean;\r\n \r\n /**\r\n * Indica se le date che arrivano all'asse X devono essere considerate \"Istante finale\" e aggiustate di conseguenza. \r\n * Se non è valorizzata la variabile **interval** della classe **LineChartData** non ha alcun effetto\r\n * \r\n * Ad esempio, la data 16/07/2021 con intervallo orario verrebbe trasformata in 15/07/2021 24:00:00 (Ovviamente è utilizzato solo lato presentazione)\r\n */\r\n FinalInstants: boolean;\r\n \r\n /**\r\n * Indica se effettuare il Fill della serie in modo da non vedere solo la linea ma proprio l'area sottessa completamente colorata\r\n */\r\n Fill: boolean;\r\n\r\n /**\r\n * Indica se effettuare lo Stack della serie in modo da vedere tutte le linee una sopra l'altra. Implicitamente include anche il **Fill**\r\n */\r\n Stacked: boolean;\r\n\r\n /**\r\n * Gestisce il minimo dell'asse Y\r\n */\r\n Min: number;\r\n \r\n /**\r\n * Gestisce il massimo dell'asse Y\r\n */\r\n Max: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo PieChart\r\n */\r\nexport class PieChartSettings extends BaseSettings{\r\n\r\n /**\r\n * Indica se apparire in modalità 3D o 2D\r\n */\r\n Mode3D: boolean;\r\n\r\n /**\r\n * Indica se mostrare o meno le serie con percentuale a 0\r\n */\r\n HideZeroes: boolean;\r\n\r\n /**\r\n * Percentuale dell'altezza del grafico che viene utilizzata per creare il buco all'interno della ciambella **wink** **wink**\r\n */\r\n DonutRadiusPercentage: number;\r\n\r\n /**\r\n * Indica se wrappare le label che non stanno nel contenitore\r\n */\r\n LabelsWrap: boolean;\r\n\r\n /**\r\n * Indica se troncare le label che non stanno nel contenitore\r\n */\r\n LabelsTruncate: boolean;\r\n\r\n /**\r\n * Indica la dimensione massima che possono assumere le label\r\n */\r\n LabelsWidth: number;\r\n\r\n /**\r\n * Indica se mostrare o meno le labels\r\n */\r\n LabelsVisible: boolean;\r\n\r\n /**\r\n * Customizzazioni sulla label del Totale\r\n */\r\n Total: {\r\n Show: boolean;\r\n TitleSize: number;\r\n NumberSize: number;\r\n UnitOfMeasure: string;\r\n }\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo Vertical2DChart\r\n */\r\nexport class Vertical2DChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n LabelWidth: number;\r\n\r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n LabelVerticalOrientationCutoffWidth: number;\r\n\r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelRightWhenCompressed: number;\r\n\r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelTopWhenCompressed: number;\r\n\r\n /**\r\n * Indica il padding percentuale rispetto alla cella da lasciare fra un gruppo di barre e l'altro. Un valore pari a 0 indica la mancanza di\r\n * spazio fra un gruppo e l'altro, un valore pari a 5 indica il 5% della dimensione della cella in cui appare il gruppo come padding a destra e sinistra\r\n */\r\n GroupPaddingPercentage: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo VerticalChart\r\n */\r\nexport class VerticalChartSettings extends BaseSettings {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n \r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n LabelWidth: number;\r\n \r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n LabelVerticalOrientationCutoffWidth: number;\r\n \r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelRightWhenCompressed: number;\r\n \r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelTopWhenCompressed: number;\r\n}","import { BaseSettings } from './base/BaseSettings';\r\n\r\n/**\r\n * Classe che presenta le impostazioni di generazione per i grafici di tipo VerticalStackedChart\r\n */\r\nexport class VerticalStackedChartSettings extends BaseSettings{\r\n\r\n /**\r\n * @ignore\r\n */\r\n\tconstructor() { super(); }\r\n \r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n LabelWidth: number;\r\n \r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n LabelVerticalOrientationCutoffWidth: number;\r\n \r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelRightWhenCompressed: number;\r\n \r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n LabelTopWhenCompressed: number;\r\n}","/**\r\n * Classe che identifica un intervallo di tempo fra un dato e l'altro\r\n */\r\nexport class BaseInterval {\r\n\r\n /**\r\n * Numero di unità\r\n */\r\n count: number;\r\n\r\n /**\r\n * Tipo di unità\r\n */\r\n timeunit: \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\";\r\n}","\r\n/**\r\n * Classe che identifica le informazioni di Padding per la Legenda\r\n */\r\nexport class LegendPad {\r\n\r\n /**\r\n * Padding in alto\r\n */\r\n top: number;\r\n\r\n /**\r\n * Padding in basso\r\n */\r\n bottom: number;\r\n\r\n /**\r\n * Padding a sinistra\r\n */\r\n left: number;\r\n\r\n /**\r\n * Padding a destra\r\n */\r\n right: number;\r\n}","/**\r\n * Modello che identifica un limite superiore - inferiore\r\n */\r\nexport class Limit {\r\n /** @ignore */\r\n constructor(\r\n public upper?: number,\r\n public upperlabel?: string,\r\n public uppercolor?: string,\r\n public lower?: number,\r\n public lowerlabel?: string,\r\n public lowercolor?: string,\r\n public fillColor: string = \"\") {\r\n }\r\n}","/**\r\n * Modello che identifica la coppia Data-Valore\r\n */\r\nexport class DateValue {\r\n /** @ignore */\r\n constructor(public d: Date, public v: number) { }\r\n}","/**\r\n * Modello che identifica la coppia Chiave-Valore\r\n */\r\nexport class KeyValue {\r\n /** @ignore */\r\n constructor(public k: string, public v: number) { }\r\n}","/**\r\n * Modello che identifica la coppia Chiave-Valore con in aggiunta il Colore da usare per la serie che verrà creata da questo modello\r\n */\r\nexport class KeyValueColor {\r\n /** @ignore */\r\n constructor(public k: string, public v: number, public c?: string, public t?: string) { }\r\n}","import { DateValue } from './DateValue';\r\nimport { BaseInterval } from '../../settings/base/BaseInterval';\r\n\r\n/**\r\n * Modello che identifica una serie a Linea\r\n */\r\nexport class LineSerie {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} name Nome della serie\r\n * @param {DateValue[]} values Valori della serie\r\n * @param {BaseInterval} interval Intervallo della serie. Viene utilizzato per gestire Gap e date in Istante Finale\r\n * @param {string} color Colore della serie, verrà usato sia per la linea base che eventualmente per il riempimento (in caso si utilizzi l'Input **Fill** nel grafico)\r\n * @param {string} uom Unità di misura da presentare nell'asse delle Y\r\n * @param {boolean} fill Override della proprietà **Fill** del grafico, specifico per ogni serie\r\n * @param {boolean} stacked Override della proprietà **Stacked** del grafico, specifico per ogni serie\r\n * @param {boolean} hidden Indica se la serie deve partire nascosta di default\r\n */\r\n constructor(public name: string, public values: DateValue[], public interval?: BaseInterval, public color?: string, public uom?: string, public fill?: boolean, public stacked?: boolean, public hidden?: boolean) {\r\n }\r\n}","import { EventEmitter, Component, Input, ChangeDetectionStrategy, Output, ContentChild } from '@angular/core';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente che si occupa della paginazione dei grafici qualora servisse\r\n */\r\n@Component({\r\n selector: \"chart-pager\",\r\n templateUrl: \"chart-pager.component.html\",\r\n styleUrls: ['chart-pager.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class PageChartSelector {\r\n\r\n /**\r\n * Lista dei dati precaricata in memoria\r\n */\r\n @Input() Items: PagedChartData<any>[];\r\n\r\n /**\r\n * Lista dei Dto da utilizzare per caricare i valori dei vari grafici\r\n */\r\n @Input() Dtos: any[];\r\n\r\n /**\r\n * Dopo aver navigato a un nuovo grafico verranno attesi questi millisecondi prima di richiedere i dati attraverso la **DataRetrieve**.\r\n * \r\n * Questo per evitare che l'utente cliccando velocemente \"avanti\" generi tonnellate di richieste inutili\r\n */\r\n @Input() BrowseDelayMs;\r\n\r\n /**\r\n * Indice dell'array **Dtos** o dell'array **Items** da cui iniziare ad emettere i valori, utile per supportare il \"back\" da un eventuale pagina di dettaglio\r\n */\r\n @Input() StartIndex: number;\r\n\r\n /**\r\n * Indica un cambio di pagina ed emette un oggetto con i dati attuali e l'indice attuale.\r\n * \r\n * Qualora la proprietà **data** fosse null indica un evento di \"loading\"\r\n */\r\n @Output() onPageChange: EventEmitter<{ data: any, index: number }> = new EventEmitter<{ data: any, index: number }>();\r\n\r\n /**\r\n * Override del titolo di default\r\n */\r\n @ContentChild('header_inner', { static: false }) headerInner_tr;\r\n\r\n /**\r\n * @ignore\r\n */\r\n public currentpage: number;\r\n /**\r\n * @ignore\r\n */\r\n private currentindex: number;\r\n /**\r\n * @ignore\r\n */\r\n private finalIndex: number;\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnChanges() {\r\n if (!(this.Items || this.Dtos) || (this.Items || this.Dtos).length == 0)\r\n throw new Error(\"Chart array cannot be empty!\");\r\n\r\n var idx = (this.StartIndex || 0);\r\n this.currentindex = idx;\r\n this.currentpage = idx + 1;\r\n this.handlePageChange();\r\n }\r\n\r\n /**\r\n * Gestisce un cambio pagina inviando al callback **onPageChange** i dati attuali (siano essi il Dto per il caricamento dati i \r\n * o i dati già presenti) e l'indice di visualizzazione\r\n */\r\n private handlePageChange() {\r\n this.finalIndex = this.currentpage - 1;\r\n this.currentindex = this.currentpage - 1;\r\n let data = this.Items && this.Items.length > 0 ? this.Items[this.finalIndex].data : this.Dtos[this.finalIndex]\r\n this.onPageChange.emit({ data: data, index: this.finalIndex });\r\n }\r\n\r\n /**\r\n * Visualizza il grafico successivo\r\n */\r\n public Next() {\r\n // Per passare da page a index è sempre un -1\r\n this.currentpage++;\r\n this.onPageChange.emit({ data: null, index: this.currentpage - 1 });\r\n\r\n // Delay pseudo-intelligente per click compulsivi. \r\n // Se dopo questo delay sono andato avanti solo di 1 effettuo il callback altrimenti incremento l'indice\r\n setTimeout(() => {\r\n if (this.currentindex == this.currentpage - 2)\r\n this.handlePageChange();\r\n else\r\n this.currentindex++;\r\n }, this.BrowseDelayMs);\r\n }\r\n\r\n /**\r\n * Visualizza il grafico precedente\r\n */\r\n Previous() {\r\n // Per passare da page a index è sempre un -1\r\n this.currentpage--;\r\n this.onPageChange.emit({ data: null, index: this.currentpage - 1 });\r\n\r\n // Delay pseudo-intelligente per click compulsivi. \r\n // Se dopo questo delay sono andato indietro solo di 1 effettuo il callback altrimenti decremento l'indice\r\n setTimeout(() => {\r\n if (this.currentindex == this.currentpage)\r\n this.handlePageChange();\r\n else\r\n this.currentindex--;\r\n }, this.BrowseDelayMs);\r\n }\r\n}","<div *ngIf=\"(Items || Dtos) && (Items || Dtos).length > 0\" class=\"pcs-no-selection\">\r\n <div class=\"pcs-button pcs-backward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"currentpage != 1 && Previous(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"currentpage == 1 ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-left\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"pcs-infos\">\r\n <ng-container *ngIf=\"headerInner_tr\">\r\n <ng-container *ngTemplateOutlet=\"headerInner_tr; context : {$implicit: (Items || Dtos)[currentpage - 1]}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <div class=\"pcs-button pcs-forward\">\r\n <svg class=\"pcs-svg-header\">\r\n <g class=\"pcs-svg-button-container\" role=\"button\" (click)=\"(Items || Dtos).length != currentpage && Next(); $event.stopPropagation(); $event.preventDefault();\">\r\n <!--Pulsante e freccettina all'interno-->\r\n <g class=\"pcs-svg-button\" [style.cursor]=\"(Items || Dtos).length == currentpage ? 'not-allowed' : 'pointer'\"><path d=\"M3,0 L53.027,0 a3,3 0 0 1 3,3 L56.027,36.817 a3,3 0 0 1 -3,3 L3,39.817 a3,3 0 0 1 -3,-3 L0,3 a3,3 0 0 1 3,-3 Z\"></path></g>\r\n <g class=\"pcs-svg-arrow pcs-svg-arrow-right\"><path d=\"M26,14H10l5.17-6.79A2,2,0,0,0,12,4.79l-7.62,10a2,2,0,0,0,0,2.42l7.62,10a2,2,0,0,0,3.18-2.42L10,18H26a2,2,0,0,0,0-4Z\"></path></g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n</div>","/** @ignore */\r\nconst _spiritedaway: string = 'spiritedaway';\r\n/** @ignore */\r\nconst _moonrisekingdom: string = 'moonrisekingdom';\r\n/** @ignore */\r\nconst _frozen: string = 'frozen';\r\n/** @ignore */\r\nconst _dark: string = 'dark';\r\n/** @ignore */\r\nconst _kelly: string = 'kelly';\r\n/** @ignore */\r\nconst _material: string = 'material';\r\n/** @ignore */\r\nconst _dataviz: string = 'dataviz';\r\n/** @ignore */\r\nconst _none: string = 'none';\r\n/** @ignore */\r\nconst _animated: string = 'animated';\r\n\r\n/**\r\n * Classe per enumerare i temi disponibili nella libreria\r\n */\r\n// @dynamic\r\nexport class ChartThemes {\r\n public get spiritedaway() { return _spiritedaway; };\r\n public get moonrisekingdom() { return _moonrisekingdom; };\r\n public get frozen() { return _frozen; };\r\n public get dark() { return _dark; };\r\n public get kelly() { return _kelly; };\r\n public get material() { return _material; };\r\n public get dataviz() { return _dataviz; };\r\n public get none() { return _none; };\r\n public get animated() { return _animated; };\r\n\r\n public static get spiritedaway() { return _spiritedaway; };\r\n public static get moonrisekingdom() { return _moonrisekingdom; };\r\n public static get frozen() { return _frozen; };\r\n public static get dark() { return _dark; };\r\n public static get kelly() { return _kelly; };\r\n public static get material() { return _material; };\r\n public static get dataviz() { return _dataviz; };\r\n public static get none() { return _none; };\r\n public static get animated() { return _animated; };\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Token che identifica il default per l'utilizzo o meno delle Animazioni per tutti i grafici, può essere sovrascritto dalle impostazioni locali (Settings e Input)\r\n */\r\nexport const ESC_ANIMATIONS: InjectionToken<boolean> = new InjectionToken<boolean>('ESC_ANIMATIONS');\r\n\r\n/**\r\n * Token che identifica il Tema di default per tutti i grafici, può essere sovrascritto dalle impostazioni locali (Settings e Input)\r\n */\r\nexport const ESC_THEME: InjectionToken<string> = new InjectionToken<string>('ESC_THEME');\r\n\r\n/**\r\n * Token che identifica l'utilizzo o meno del sistema di Log per l'intera libreria\r\n */\r\nexport const ESC_DEBUG_MODE: InjectionToken<string> = new InjectionToken<string>('ESC_DEBUG_MODE');","import { Inject, Injectable } from '@angular/core';\r\nimport { ChartThemes } from './ChartThemes'\r\nimport { ESC_DEBUG_MODE } from '../../tokens';\r\nimport { EsChartsModule } from '../../es-charts.module';\r\n\r\n/**\r\n * Classe di supporto al caricamento dinamico dei vari pezzi di amcharts che mi servono per il grafico (temi, locali, ecc...)\r\n * \r\n * Essenzialmente ogni volta che viene creato un grafico, questo acquisisce il tema e il locale applicato IN QUEL MOMENTO,\r\n * questo significa che per creare due grafici con temi diversi bisogna fare:\r\n * \r\n * 1) Caricamento tema 1\r\n * \r\n * 2) Creazione grafico 1\r\n * \r\n * 3) Scaricamento tema 1\r\n * \r\n * 3) Caricamento tema 2\r\n * \r\n * 4) Creazione grafico 2\r\n * \r\n */\r\n@Injectable()\r\nexport class ChartLoader {\r\n\r\n /**\r\n * Indica se attualmente ho le animazioni caricate in modo da non ricaricarle inutilmente\r\n */\r\n private AnimationsAreLoaded: boolean = false;\r\n\r\n /**\r\n * Indica l'ultimo tema caricato in modo da non ricaricarlo inutilmente qualora il prossimo grafico da creare richieda lo stesso tema\r\n */\r\n private LastLoadedTheme: string = \"\";\r\n\r\n /**\r\n * Cache dei temi (moduli caricati dinamicamente)\r\n */\r\n private themeCache: {} = {};\r\n\r\n /**\r\n * Cache delle localizzazioni (moduli caricati dinamicamente)\r\n */\r\n private localizationCache: {} = {};\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Inject(ESC_DEBUG_MODE) private logs: boolean) { }\r\n\r\n /**\r\n * Applica il tema con le animazioni all'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n public applyAnimations(chartsCore: any): Promise<any> {\r\n if (!this.AnimationsAreLoaded) {\r\n return this.importIfNeeded('themes', ChartThemes.animated).then(() => {\r\n this.log(\"CORE: Applying theme \" + ChartThemes.animated);\r\n chartsCore.useTheme(this.themeCache[ChartThemes.animated]);\r\n this.AnimationsAreLoaded = true;\r\n });\r\n }\r\n else {\r\n this.log(\"CORE: theme already applyed \" + ChartThemes.animated);\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n }\r\n\r\n /**\r\n * De-applica il tema con le animazioni dall'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n * @returns {Promise} Promise che identifica la fine dello scarico\r\n */\r\n unapplyAnimations(chartsCore: any): Promise<any> {\r\n if (this.AnimationsAreLoaded) {\r\n this.log(\"CORE: Animations in use, unapplying theme \" + ChartThemes.animated);\r\n chartsCore.unuseTheme(this.themeCache[ChartThemes.animated]);\r\n this.AnimationsAreLoaded = false;\r\n }\r\n else\r\n this.log(\"CORE: Animations already unused, no need to unapply them\");\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n /**\r\n * Applica il tema specificato all'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n * @param {'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none'} theme Tema da applicare\r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n applyTheme(chartsCore: any, theme: 'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none'): Promise<any> {\r\n // Ultimo tema applicato è lo stesso che mi è stato richiesto di applicare --> NO-OP\r\n if (this.LastLoadedTheme == theme) {\r\n this.log(\"CORE: theme already applied \" + theme);\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n // Scarico il tema precedente a prescindere, ormai non mi serve più\r\n this.unapplyPreviousTheme(chartsCore)\r\n\r\n // Il tema è il none --> registro la cosa e basta, il tema precedente è stato rimosso subito qui sopra ^\r\n if (theme == ChartThemes.none) {\r\n this.LastLoadedTheme = ChartThemes.none;\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n // Il tema è diverso dal precedente e non è il tema vuoto --> Importo il tema specificato se non presente in memoria e lo applico al grafico attuale\r\n return this.importIfNeeded('themes', theme).then(() => {\r\n this.log(\"CORE: Applying theme \" + theme);\r\n chartsCore.useTheme(this.themeCache[theme]);\r\n this.LastLoadedTheme = theme;\r\n });\r\n }\r\n\r\n /**\r\n * De-applica il tema precedente dall'istanza globale di amCharts\r\n * \r\n * @param {Object} chartsCore Istanza globale di amCharts\r\n */\r\n unapplyPreviousTheme(chartsCore: any) {\r\n if (!this.LastLoadedTheme || this.LastLoadedTheme == ChartThemes.none)\r\n return;\r\n\r\n this.log(\"CORE: Unapplying previously used theme \" + this.LastLoadedTheme);\r\n chartsCore.unuseTheme(this.themeCache[this.LastLoadedTheme])\r\n }\r\n\r\n /**\r\n * Applica il locale specificato all'istanza specifica del grafico\r\n * \r\n * @param {amCharts.Chart} chart Istanza specifica del grafico a cui applicare il locale\r\n * @param {string} locale Locale da applicare\r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n applyLocale(chart: any, locale: string): Promise<any> {\r\n return this.importIfNeeded('lang', locale).then(() => {\r\n this.log(\"Chart \" + chart.htmlContainer.id + \": applying locale \" + locale);\r\n chart.language.locale = this.localizationCache[locale];\r\n });\r\n }\r\n\r\n /**\r\n * Permette di importare, se serve un dato tema o localizzazione\r\n * \r\n * @param {'lang' | 'themes'} what Oggetto da importare, se localizzazione o tema\r\n * @param {string} item Chiave dell'oggetto da importare\r\n * \r\n * @returns {Promise} Promise che identifica la fine del caricamento\r\n */\r\n importIfNeeded(what: 'lang' | 'themes', item: string): Promise<any> {\r\n\r\n // Se sto cercando di caricare qualcosa di già caricato non faccio nulla\r\n if (!(what == 'themes' && !this.themeCache[item]) && !(what == 'lang' && !this.localizationCache[item])) {\r\n this.log(\"CORE: \" + (what == 'lang' ? \"Language \" : \"Theme \") + item + \" already loaded\");\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n this.log(\"CORE: Loading \" + (what == 'lang' ? \"language \" : \"theme \") + item);\r\n\r\n /*\r\n * ****************************\r\n * ******** ATTENZIONE ********\r\n * ****************************\r\n * \r\n * Se stai vedendo questo codice di import e stai valutando di riscriverlo come:\r\n * \r\n * V V \r\n * import(`@amcharts/amcharts4/${what}/${item}`).then(module => {\r\n * if (what == 'themes') this.themeCache[item] = module.default;\r\n * else if (what == 'lang') this.localizationCache[item] = module.default;\r\n * });\r\n * \r\n * Sappi che è una pessima idea. Gli import sono valutati da webpack in compiletime per generare i chunk,\r\n * mettere la navigazione agli import con la concatenazione viene preso malissimo ed essenzialmente dice a webpack\r\n * di tirare su e bundlare l'intera node_modules. Divertente, no?\r\n *\r\n */\r\n\r\n switch (what) {\r\n case 'themes':\r\n switch (item) {\r\n case ChartThemes.spiritedaway:\r\n return import(\"@amcharts/amcharts4/themes/spiritedaway\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.moonrisekingdom:\r\n return import(\"@amcharts/amcharts4/themes/moonrisekingdom\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.frozen:\r\n return import(\"@amcharts/amcharts4/themes/frozen\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.dark:\r\n return import(\"@amcharts/amcharts4/themes/dark\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.kelly:\r\n return import(\"@amcharts/amcharts4/themes/kelly\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.material:\r\n return import(\"@amcharts/amcharts4/themes/material\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.dataviz:\r\n return import(\"@amcharts/amcharts4/themes/dataviz\").then(theme => this.themeCache[item] = theme.default);\r\n case ChartThemes.animated:\r\n return import(\"@amcharts/amcharts4/themes/animated\").then(theme => this.themeCache[item] = theme.default);\r\n }\r\n break;\r\n case 'lang':\r\n switch (item) {\r\n case 'it-IT':\r\n return import(\"@amcharts/amcharts4/lang/it_IT\").then(lang => this.localizationCache[item] = lang.default);\r\n case 'en-US':\r\n return import(\"@amcharts/amcharts4/lang/en_US\").then(lang => this.localizationCache[item] = lang.default);\r\n }\r\n }\r\n\r\n this.log(\"CORE: Loading Failed. \" + (what == 'lang' ? \"Language \" : \"Theme\") + \" not recognized: \" + item);\r\n return new Promise((resolve) => { resolve(true) });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n log(text: string) {\r\n if (this.logs)\r\n console.log(\"@esfaenza/es-charts: \" + text);\r\n }\r\n}","import { Injectable, Inject } from '@angular/core';\r\n\r\nimport { ESC_DEBUG_MODE } from '../../tokens';\r\n\r\n/**\r\n * Classe che si occupa del dispatch delle operazioni di rendering dei grafici utilizzando una coda per permettere ad ogni grafico di avere temi e localizzazione custom\r\n */\r\n@Injectable()\r\nexport class ChartDispatcher {\r\n\r\n /**\r\n * Coda di inizializzazioni ancora da eseguire. Quando questa è vuota significa che nessuno sta creando grafici\r\n */\r\n private Initializations: { name: string, function: any }[] = [];\r\n\r\n /**\r\n * Lista dei grafici inizializzati e attivi in un dato momento (viene registrata la proprietà **name**). Non è possibile registrare due grafici con lo stesso identificativo\r\n */\r\n private InitializedGraphs: string[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Inject(ESC_DEBUG_MODE) private logs: boolean) { }\r\n\r\n /**\r\n * Registra un grafico da visualizzare insieme alla propria funzione di creazione. Quest'ultima sarà differita fino a che tutti i grafici\r\n * precedentemente registati non hanno finito la fase di inizializzazione\r\n * \r\n * @param {string} name Identificativo del grafico da registrare\r\n * @param {Function} chartCreationFunction Funzione che fisicamente dovrà occuparsi della creazione del grafico\r\n */\r\n public register(name: string, chartCreationFunction: Function) {\r\n if (this.InitializedGraphs.indexOf(name) != -1)\r\n throw \"Attempting to register a duplicate chart '\" + name + \"'. Make sure the 'name' properties of your charts are univoque\";\r\n\r\n this.log(\"DISPATCHER: Registering chart creation function execution for \" + name);\r\n this.Initializations.push({ name: name, function: chartCreationFunction });\r\n if (this.Initializations.length == 1) {\r\n this.log(\"DISPATCHER: Initial drain started\");\r\n this.drainInitQueues();\r\n }\r\n }\r\n\r\n /**\r\n * Deregistra un grafico presente. Chiamata generalmente al dispose del grafico in questione quando non dev'essere più mostrato nella pagina corrente\r\n * \r\n * @param {string} name Identificativo del grafico da deregistrare\r\n */\r\n public deregisterGraph(name: string) {\r\n let index = this.InitializedGraphs.indexOf(name);\r\n if (index == -1)\r\n {\r\n //Questo succede quando si cerca di distruggere il grafico mentre sta venendo graficato\r\n this.log(\"DISPATCHER: Registration missing for chart \" + name + \" it was probably destroyed during load\");\r\n return;\r\n }\r\n\r\n this.log(\"DISPATCHER: Chart deregistered \" + name);\r\n this.InitializedGraphs.splice(index, 1)\r\n }\r\n\r\n /**\r\n * Metodo che esegue in maniera sequenziale le funzioni di inizializzazione dei grafici finché presenti \r\n * in modo che nessun grafico possa essere inizializzato contemporaneamente ad un altro.\r\n * \r\n * Questo è il punto chiave che permette di avere per ogni grafico temi e locale differenti\r\n */\r\n private drainInitQueues() {\r\n let toExecute = this.Initializations[0];\r\n this.log(\"DISPATCHER: Executing initialization function for chart \" + toExecute.name);\r\n\r\n toExecute.function().then(() => {\r\n this.log(\"DISPATCHER: initialization for chart \" + toExecute.name + \" is done\");\r\n this.InitializedGraphs.push(toExecute.name);\r\n this.Initializations.splice(0, 1);\r\n if (this.Initializations.length >= 1) {\r\n this.log(\"DISPATCHER: Found queued initializations. Continuing\");\r\n this.drainInitQueues();\r\n }\r\n else\r\n this.log(\"DISPATCHER: queue is over, nothing more to do\");\r\n });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private log(text: string) {\r\n if (this.logs)\r\n console.log(\"@esfaenza/es-charts: \" + text);\r\n }\r\n}","import { isPlatformBrowser } from '@angular/common';\r\nimport { Input, SimpleChanges, AfterViewInit, NgZone, OnDestroy, OnInit, OnChanges, Output, EventEmitter, ContentChild, Optional, Directive, ElementRef } from '@angular/core';\r\n\r\nimport { IBaseService } from '../../services/base/IBaseService';\r\nimport { BaseSettings } from '../../models/settings/base/BaseSettings';\r\nimport { LegendPad } from '../../models/settings/base/LegendPad';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { LineChartData } from \"../../models/data/LineChartData\";\r\nimport { PieChartData } from \"../../models/data/PieChartData\";\r\nimport { VerticalChartData } from \"../../models/data/VerticalChartData\";\r\nimport { Vertical2DChartData } from \"../../models/data/Vertical2DChartData\";\r\nimport { PagedChartData } from \"../../models/data/PagedChartData\";\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Componente Grafico Base che gestisce tutte le cose comuni dei vari grafici istanziabili, come la presenza o menu di una legenda,\r\n * il tema utilizzato, il locale del singolo grafico, ecc ecc...\r\n */\r\n@Directive()\r\nexport abstract class BaseChartComponent implements AfterViewInit, OnDestroy, OnInit, OnChanges {\r\n\r\n /**\r\n * Titolo per l'asse X\r\n */\r\n @Input() XTitle: string;\r\n\r\n /**\r\n * Titolo per l'asse Y\r\n */\r\n @Input() YTitle: string;\r\n\r\n /**\r\n * Impostazioni di base\r\n */\r\n @Input() Settings: BaseSettings;\r\n\r\n /**\r\n * Presenza o meno della legenda\r\n */\r\n @Input() Legend: boolean;\r\n\r\n /**\r\n * Posizione della legenda\r\n */\r\n @Input() LegendPosition: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\n /**\r\n * Presenza o meno della timeline\r\n */\r\n @Input() Timeline: boolean;\r\n\r\n /**\r\n * Nome del grafico, fondamentale assegnarlo per permettere alla libreria di schedularne la creazione\r\n */\r\n @Input() name: string = \"\";\r\n\r\n /**\r\n * Utilizzo o meno delle animazioni. Senza animazioni il grafico è leggermente più performante, specialmente all'aumentare dei punti nella serie\r\n */\r\n @Input() Animations: boolean;\r\n\r\n /**\r\n * Tema da utilizzare, valido solo per il grafico in questione. Gli altri grafici della pagina possono avere stili diversi.\r\n * \r\n * Essendo i temi caricati in maniera asincrona in base all'utilizzo utilizzarne tanti diversi in un'unica pagina potrebbe rallentare il primo caricamento\r\n */\r\n @Input() Theme: 'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none';\r\n\r\n /**\r\n * Locale del singolo grafico\r\n */\r\n @Input() Locale: string;\r\n\r\n /**\r\n * Indica se utilizzare il comportamento di default per i click delle serie sulla Legenda. Mettendo questa variabile a **false**\r\n * e collegando l'output **onSeriesClicked** è possibile generare un evento ogni volta che l'utente fa click su una serie della Legenda\r\n */\r\n @Input() HideSeriesOnLabelClick: boolean;\r\n\r\n /**\r\n * Minima distanza nella griglia fra i valori, modifica la quantità di step fra i valori dell'asse X e quindi la granularità dei dati.\r\n * \r\n * Più piccola è, più valori verranno inseriti nell'asse X\r\n */\r\n @Input() MinGridDistance: number;\r\n\r\n /**\r\n * Cerca di aggiustare i vari step dell'asse X ruotandoli e diminuendone le dimensioni abbastanza per mostrarne il più possibile\r\n */\r\n @Input() AdaptLabelSizeAndOrientation: boolean;\r\n\r\n /**\r\n * Padding da applicare alla Legenda in caso si voglia spostare un po'\r\n */\r\n @Input() LegendPadding: LegendPad;\r\n\r\n /**\r\n * Lista di dto generici che verranno emessi dal sistema di grafici uno per uno attraverso la funzione **DataRetrieve**, che dovranno essere\r\n * usati per uan sorta di caricamento \"paginato\" dei grafici\r\n */\r\n @Input() DataDtos: any[];\r\n\r\n /**\r\n * Indice dell'array **DataDtos** o dell'array **DataArray** da cui iniziare ad emettere i valori, utile per supportare il \"back\" da un eventuale pagina di dettaglio\r\n */\r\n @Input() DataDtoStartIndex: number;\r\n\r\n /**\r\n * Funzione definita lato applicativo che in base al **DataDto** corrente restituisce una Promise del tipo di dati richiesto per il grafico corrente\r\n */\r\n @Input() DataRetrieve: (dto: any, index: number) => Promise<any>;\r\n\r\n /**\r\n * Dopo aver navigato a un nuovo grafico verranno attesi questi millisecondi prima di richiedere i dati attraverso la **DataRetrieve**.\r\n * \r\n * Questo per evitare che l'utente cliccando velocemente \"avanti\" generi tonnellate di richieste inutili\r\n */\r\n @Input() BrowseDelayMs: number = 500;\r\n\r\n /**\r\n * Intestazione dei grafici nel caso si utilizzi la modalità paginata\r\n */\r\n @ContentChild('header', { static: false }) header_tr;\r\n\r\n /**\r\n * Messaggio di caricamento fra un grafico e l'altro \r\n */\r\n @ContentChild('loading', { static: false }) loading_template;\r\n\r\n /**\r\n * Evento lanciato sulla selezione di un range di dati o dalla timeline o dal grafico. Valido per tutti i grafici che supportano serie basate sulle date\r\n */\r\n @Output() onSelectionChanged: EventEmitter<{ from: Date, to: Date, initial: boolean }> = new EventEmitter<{ from: Date, to: Date, initial: boolean }>();\r\n\r\n /**\r\n * Evento lanciato dal click di una serie dalla Legenda, a patto che l'Input **HideSeriesOnLabelClick** sia impostato a false\r\n */\r\n @Output() onSeriesClicked: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /**\r\n * Evento lanciato all'inizio del caricamento di una nuova pagina del grafico\r\n */\r\n @Output() onLoadStart: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /**\r\n * Evento lanciato al termine del caricamento di una nuova pagina del grafico\r\n */\r\n @Output() onLoadEnd: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /**\r\n * Evento lanciato al termine della creazione del grafico referenziando l'istanza nativa del grafico creato in modo da poter effettuare modifiche\r\n * post inizializzazione lato applicativo\r\n */\r\n @Output() chartLoaded: EventEmitter<BaseChartComponent> = new EventEmitter<BaseChartComponent>();\r\n\r\n /**\r\n * Serve a decidere se sarà presente l'interfaccia di paginazione\r\n */\r\n public isPaged: boolean = false;\r\n\r\n /**\r\n * @ignore\r\n */\r\n private initDone: boolean = false;\r\n\r\n /**\r\n * Istanza nativa del grafico amcharts. Qualsiasi cosa non fa questa libreria si può prendere questa istanza e modificare a piacimento\r\n */\r\n public Chart: am4charts.Chart;\r\n\r\n /**\r\n * Servizio di graficazione del grafico\r\n */\r\n public ChartService: IBaseService<any>;\r\n\r\n /**\r\n * Variabile che indica se una nuova pagina del grafico è in fase di caricamento\r\n */\r\n public loadingChart: boolean;\r\n\r\n /**\r\n * Dati del grafico. Ogni implementazione gestirà questa variabile in base al proprio tipo di Dati\r\n */\r\n abstract Data: any;\r\n\r\n /**\r\n * Dati del grafico in modalità paginata, per quando tutte le pagine sono precaricate in memoria (in caso contrario verrebberò utilizzati i **DataDtos**)\r\n */\r\n abstract DataArray: PagedChartData<any>[];\r\n\r\n /**\r\n * Indica le proprietà specifica per una data implementazione che devono causare un repaint del grafico\r\n */\r\n abstract getSpecificPropertiesToCheck(): string[];\r\n\r\n /**\r\n * Metodo generico di graficazione, reimplementato dalle varie implementazioni\r\n */\r\n abstract graphicate(castedSettings): IBaseService<any>;\r\n\r\n /**\r\n * Metodo generico che prende le impostazioni generiche del grafico e le casta alla tipologia giusta per il grafico specifico\r\n */\r\n abstract getCastedSettings(): any;\r\n\r\n /**\r\n * Metodo che \"Riempie\" la classe delle impostazioni con tutte le impostazioni specifiche passate a un dato grafico come Input\r\n */\r\n abstract fillSpecificSettings(settingsCasted): void;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {ElementRef} el Contenitore all'interno del cui viene creato il grafico. Utilizzato per estrapolarne la **ContainerHeight**\r\n * @param {Object} platformId piattaforma Angular (browser, ecc...) per essere sicuri che amcharts venga attivato solo lato browser. Non utilizzando SSR nelle applicazioni che consumano questa libreria non è particolarmente significativo, ma non si sa mai\r\n * @param {NgZone} zone NgZone di default per permettere di inizializzare il grafico all'infuori di Angular per avere qualche prestazione in più\r\n * @param {ChartLoader} Charter Istanza del Loader che si occuperà di caricare in memoria tutto ciò che serve per il grafico attuale (temi, locale, animazioni, ecc...)\r\n * @param {ChartDispatcher} Dispatcher Istanza del Dispatcher che si occupa di differire il caricamento dei grafici 1 dopo l'altro in modo che caricamenti pseudo paralleli incasinino tutto\r\n * @param {boolean} logs Indica se effettuare log a console o meno, iniettato dalle classi specializzate dal token ESC_DEBUG_MODE\r\n * @param {boolean} animations Indica se per questo grafico devono essere attive o meno le animazioni. Impostazione generica presa dal token ESC_ANIMATIONS\r\n * @param {string} locale Indica il locale specifico per questo grafico. Impostazione generica presa dal LocalizationService\r\n * @param {string} theme Indica il tema specifico per questo grafico. Impostazione generica presa dal token ESC_THEME\r\n */\r\n constructor(private el: ElementRef, private platformId: Object, private zone: NgZone, private Charter: ChartLoader, private Dispatcher: ChartDispatcher, private logs: boolean,\r\n private animations: boolean, private locale: string, private theme: string) { }\r\n\r\n /**\r\n * Metodo di inizializzazione post valorizzazione degli input, utilizzato per valorizzare correttamente le proprietà essenziali del grafico (Animazioni, Tema e Locale)\r\n * \r\n * Viene data priorità ai Settings (HTML), priorità secondaria agli Input diretti (Lato HTML), priorità ultima alle impostazioni globali,\r\n * impostate in fase di import del modulo assegnando valori ai token ESC_ANIMATIONS, ESC_THEME\r\n */\r\n ngOnInit() {\r\n // Qui servono solo le variabili da conoscere PRE-graficazione per il caricamento dei moduli lazy del grafico\r\n\r\n this.Animations = this.Settings?.Animations != null ? this.Settings?.Animations : (this.Animations != null ? this.Animations : this.animations)\r\n this.Theme = this.Settings?.Theme != null ? this.Settings?.Theme : (this.Theme != null ? this.Theme : <any>this.theme)\r\n this.Locale = this.Settings?.Locale != null ? this.Settings?.Locale : (this.Locale != null ? this.Locale : this.locale)\r\n\r\n this.isPaged = (this.DataArray && this.DataArray.length > 0 && !this.Data) || (this.DataDtos && this.DataDtos.length > 0 && !!this.DataRetrieve);\r\n this.log(\"Chart \" + this.name + \": ngOnInit\");\r\n }\r\n\r\n /**\r\n * Implementazione utilizzata per controllare eventuali proprietà chiave del grafico e rigraficare tutto qualora si rivelasse necessario\r\n * \r\n * @param {SimpleChanges} changes Indicazione dei cambiamenti sulle proprietà del grafico. Vedere documentazione Angular in merito\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.initDone)\r\n return;\r\n\r\n this.log(\"Chart \" + this.name + \": ngOnChanges\");\r\n\r\n let propsToCheck = [\"Timeline\", \"Legend\", \"Settings\", \"Animations\", \"Theme\", \"Locale\", ...this.getSpecificPropertiesToCheck()];\r\n this.checkPropertiesAndRegraphicateAsNeeded(changes, propsToCheck);\r\n }\r\n\r\n /**\r\n * Nel post inizializzazione, a patto che mi trovi in ambiente \"browser\", proseguo al caricamento del grafico sull'HTML\r\n */\r\n ngAfterViewInit() {\r\n if (!this.name)\r\n throw \"a Unique name is mandatory to create a chart\";\r\n\r\n this.log(\"Chart \" + this.name + \": ngAfterViewInit, graphicating chart outside Angular\");\r\n\r\n if (!this.isPaged)\r\n this.dispatchLoadChart();\r\n }\r\n\r\n /**\r\n * All'onDestroy scarico il grafico per liberare memoria\r\n */\r\n ngOnDestroy() {\r\n if (this.Chart) {\r\n this.log(\"Chart \" + this.name + \": Unloading destroyed chart\");\r\n this.browserOnly(() => { this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name) });\r\n }\r\n else\r\n this.log(\"Chart \" + this.name + \": Unloading uncreated chart component. It probably was a duplicated\");\r\n }\r\n\r\n /**\r\n * Registra il grafico attuale nel Dispatcher in modo che venga caricato appena possibile\r\n */\r\n private dispatchLoadChart(): void {\r\n this.browserOnly(() => {\r\n this.Dispatcher.register(this.name, () => { return this.loadChart(); });\r\n })\r\n }\r\n\r\n /**\r\n * Il caricamento del grafico funziona nel seguente modo:\r\n * \r\n * 1) Caricamento del tema e delle animazioni, qualora necessari\r\n * \r\n * 2) Caricamento delle impostazioni specifiche e integrazione con le impostazioni generiche\r\n * \r\n * 3) Graficazione\r\n * \r\n * 4) Caricamento del locale\r\n */\r\n private loadChart() {\r\n this.log(\"Chart \" + this.name + \": Start loading Modules if needed\");\r\n return Promise.all([\r\n this.setupAmChartsThemes().then(() => {\r\n this.log(\"Chart \" + this.name + \": Graphicating after modules load\");\r\n\r\n var castedSettings = this.getCastedSettings();\r\n this.fillSettings(castedSettings);\r\n this.fillSpecificSettings(castedSettings);\r\n this.ChartService = this.graphicate(castedSettings);\r\n this.Chart = this.ChartService.ChartInstance;\r\n\r\n if (!this.Chart) this.log(\"Chart \" + this.name + \": Could not create graph\");\r\n\r\n // Unico punto reale in cui viene utilizzato il locale, tehe\r\n return this.Charter.applyLocale(this.Chart, this.Locale).then(() => { this.initDone = true; this.chartLoaded.emit(this) });\r\n })\r\n ]);\r\n }\r\n\r\n /**\r\n * Riempimento delle impostazioni nella classe Settings. Si danno priorità ai valori già impostati nei Settings, \r\n * integrando eventualmente con le proprietà del grafico\r\n * \r\n * @param {BaseSettings} settings Impostazioni base ricevute dalla specializzazione del grafico\r\n */\r\n private fillSettings(settings: BaseSettings) {\r\n\r\n // Merge degli Input con i Settings, dando priorità ai Settings\r\n\r\n settings.Theme = settings.Theme ? settings.Theme : this.Theme;\r\n settings.Locale = settings.Locale ? settings.Locale : this.Locale;\r\n settings.Animations = settings.Animations != null ? settings.Animations : this.Animations;\r\n\r\n settings.Legend = settings.Legend != null ? settings.Legend : this.Legend;\r\n settings.Name = settings.Name ? settings.Name : this.name;\r\n settings.Timeline = settings.Timeline != null ? settings.Timeline : this.Timeline;\r\n settings.AdaptLabelSizeAndOrientation = settings.AdaptLabelSizeAndOrientation != null ? settings.AdaptLabelSizeAndOrientation : this.AdaptLabelSizeAndOrientation;\r\n settings.XAxisTitle = settings.XAxisTitle ? settings.XAxisTitle : this.XTitle;\r\n settings.YAxisTitle = settings.YAxisTitle ? settings.YAxisTitle : this.YTitle;\r\n settings.LegendPosition = settings.LegendPosition ? settings.LegendPosition : this.LegendPosition;\r\n settings.HideSeriesOnLabelClick = settings.HideSeriesOnLabelClick != null ? settings.HideSeriesOnLabelClick : this.HideSeriesOnLabelClick;\r\n settings.MinGridDistance = settings.MinGridDistance != null ? settings.MinGridDistance : this.MinGridDistance;\r\n settings.LegendPadding = settings.LegendPadding ? settings.LegendPadding : this.LegendPadding ?? null;\r\n\r\n (<any>settings).ContainerHeight = this.el.nativeElement.parentElement.offsetHeight;\r\n (<any>settings).OnSeriesClickCallback = (series) => { this.onSeriesClicked.emit(series); };\r\n (<any>settings).OnSelectionChangedCallback = (event: { from: Date, to: Date, initial: boolean }) => { this.onSelectionChanged.emit({ from: event.from, to: event.to, initial: event.initial }); };\r\n }\r\n\r\n /**\r\n * Controlla i cambiamenti avvenuti alle proprietà chiave e rieffettua la graficazione qualora necessario\r\n * \r\n * @param {SimpleChanges} changes Indicazione della modifiche avvenute nei vari Input\r\n * @param {string[]} propsToCheck Lista degli Input da controllare per cui una modifica causa una rigraficazione\r\n */\r\n private checkPropertiesAndRegraphicateAsNeeded(changes: SimpleChanges, propsToCheck: string[]) {\r\n let toReGraphicate = false;\r\n for (let i = 0; i < propsToCheck.length; i++)\r\n toReGraphicate = toReGraphicate || (changes[propsToCheck[i]] && changes[propsToCheck[i]].currentValue)\r\n\r\n if (toReGraphicate)\r\n this.reloadChart();\r\n }\r\n\r\n /**\r\n * Funzione che effettua un cambio di pagina per i grafici paginati. Qualora **data** fosse nullo significa che è iniziato un caricamento \r\n * e anche lato applicativo il DataRetrieve dovrà considerare che l'assenza di valori non è altro che un'indicazione di inizio caricamento\r\n * \r\n * Il caricamento di qualsiasi pagina genererà comunque una primo evento con **data** nullo in modo da indicare l'inizio caricamento e\r\n * in seconda istanza un altro evento in cui **data** sarà sempre valorizzato, o con il Dto da usare per recuperare i dati, o con i dati\r\n * veri e propri già presenti nel **DataArray**\r\n * \r\n * I callback **onLoadStart** e **onLoadEnd** vengono sempre chiamati\r\n * \r\n * @param {{ data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any, index: number }} nd Indice del caricamento dati, con eventualmente già i dati se disponibili\r\n */\r\n public changePage(nd: { data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any, index: number }) {\r\n if (!nd.data) {\r\n this.loadingChart = true;\r\n // Serve per informare l'applicativo in listening sull'indice attualmente in visualizzazione. \r\n // La mancanza di dati indica che non devono essere effettuate ricerche per ora\r\n if (this.DataRetrieve)\r\n this.DataRetrieve(null, nd.index)\r\n this.onLoadStart.emit();\r\n return;\r\n }\r\n\r\n if (this.DataRetrieve)\r\n this.DataRetrieve(nd.data, nd.index).then(t => { this.changePageDataReceived(t); });\r\n else\r\n this.changePageDataReceived(nd.data);\r\n }\r\n\r\n /**\r\n * Al termine del caricamento dei dati di una pagina questo metodo viene chiamato per rigraficare la situazione con i nuovi dati\r\n * \r\n * @param {LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any} data Dati del grafico\r\n */\r\n private changePageDataReceived(data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | any) {\r\n this.loadingChart = false;\r\n this.onLoadEnd.emit();\r\n let firstBind = !this.Data;\r\n this.Data = data;\r\n\r\n if (!firstBind)\r\n this.reloadChart();\r\n else\r\n this.dispatchLoadChart();\r\n }\r\n\r\n /**\r\n * Ricarica il grafico distruggendo il vecchio e ricreando il nuovo\r\n * \r\n * Le chiamate a questo metodo possono essere trasformate in chiamate al metodo **graphicate** della Service, se solo quel metodo fosse abbastanza intelligente per capire\r\n * le differenze fra il grafico com'era prima e come deve diventare, in modo da non ricrearlo ma semplicemente modificare quello che già è disegnato\r\n */\r\n private reloadChart() {\r\n this.browserOnly(() => { if (!this.Chart.isDisposed()) this.Chart.dispose(); this.Dispatcher.deregisterGraph(this.name) });\r\n this.Dispatcher.register(this.name, () => { return this.loadChart(); });\r\n }\r\n\r\n /**\r\n * Permette di aggiungere un blocco di dati in maniera \"live\" ad un grafico\r\n */\r\n public addData(chartData: any) {\r\n this.ChartService.refreshData(chartData);\r\n };\r\n\r\n /**\r\n * Funzione che si occupa di caricare i temi necessari per il grafico in oggetto. Prima applica il tema, poi, se serve, applica le animazioni\r\n */\r\n private setupAmChartsThemes() {\r\n return Promise.all([\r\n this.Charter.applyTheme(am4core, this.Theme).then(() => {\r\n return this.Animations ? this.Charter.applyAnimations(am4core) : this.Charter.unapplyAnimations(am4core);\r\n })\r\n ]);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n private log(log: string) {\r\n if (this.logs)\r\n console.log(\"@esfaenza/es-charts: \" + log);\r\n }\r\n\r\n /**\r\n * Imposta lo zoom dal **from** al **to**\r\n * \r\n * @param {Date} from Inizio dello zoom\r\n * @param {Date} to Fine dello zoom\r\n */\r\n public setSelection(from: Date, to: Date) {\r\n this.ChartService.setSelection(from, to);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n browserOnly(f: () => void) {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.zone.runOutsideAngular(() => {\r\n f();\r\n });\r\n }\r\n }\r\n}","import { DateService } from \"@esfaenza/extensions\";\r\nimport { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\n\r\nimport { Limit } from \"../models/data/base/Limit\";\r\nimport { LineChartData } from '../models/data/LineChartData';\r\nimport { LineChartSettings } from '../models/settings/LineChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un LineChart\r\n */\r\nexport class LineChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private DataGroupBucketSize: number = 1500;\r\n /** @ignore */\r\n private OpacityOnSelected: number = 0.3;\r\n /** @ignore */\r\n private OpacityOnFill: number = 0.75;\r\n /** @ignore */\r\n private singleDataSet: boolean = false;\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter, private dateExts: DateService) { }\r\n\r\n /** Rifeirmento interno all'asse delle Date per semplicità */\r\n private dateAxis: am4charts.DateAxis;\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un LineChart\r\n */\r\n public graphicate(data: LineChartData | any, settings: LineChartSettings): IBaseService<am4charts.XYChart> {\r\n let dataConverted: LineChartData = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;\r\n let threshold = settings.DataGroupingThreshold ?? 3000;\r\n this.singleDataSet = settings.MergeDatasets ?? false;\r\n let showTicks = settings.ShowTicks == null ? true : settings?.ShowTicks;\r\n let dataShouldBeGrouped = Math.max(...dataConverted.series.map(t => t.values.length)) > threshold;\r\n let showTimeline = settings.Timeline || dataShouldBeGrouped;\r\n let seriesWithInterval = dataConverted.series.some(t => t.interval);\r\n let interval = seriesWithInterval ? dataConverted.series.find(t => t.interval).interval : null;\r\n let gapsAllowed = settings?.AllowGaps == null ? seriesWithInterval : settings?.AllowGaps;\r\n let finalInstant = settings?.FinalInstants ?? true;\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n if (settings.Min)\r\n yAxis.min = settings.Min;\r\n if (settings.Max)\r\n yAxis.max = settings.Max;\r\n\r\n let limitNullOrUndef = dataConverted.limit == null || dataConverted.limit == undefined;\r\n let limits = limitNullOrUndef ? [] : !(<any>dataConverted.limit).length ? [<Limit>dataConverted.limit] : <Limit[]>dataConverted.limit;\r\n if (limits.length > 0) {\r\n\r\n for(let i = 0; i < limits.length; i++){\r\n let limit = limits[i]\r\n\r\n if (limit.upper != null && limit.upper != undefined && limit.lower != null && limit.lower != undefined) {\r\n let range = yAxis.axisRanges.create();\r\n range.value = limit.lower;\r\n range.endValue = limit.upper;\r\n\r\n if (limit.fillColor) {\r\n range.contents.stroke = am4core.color(limit.fillColor);\r\n range.contents.fill = range.contents.stroke;\r\n }\r\n\r\n range.label.inside = true;\r\n range.label.text = limit.upperlabel;\r\n range.label.fill = range.grid.stroke;\r\n range.label.verticalCenter = \"bottom\";\r\n range.label.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.strokeWidth = 2;\r\n range.grid.strokeOpacity = 1;\r\n }\r\n else if ((limit.lower == null || limit.lower == undefined) && limit.upper != null && limit.upper != undefined) {\r\n let range = yAxis.axisRanges.create();\r\n range.value = limit.upper;\r\n range.label.inside = true;\r\n range.label.text = limit.upperlabel;\r\n range.label.fill = range.grid.stroke;\r\n range.label.verticalCenter = \"bottom\";\r\n range.label.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.stroke = am4core.color(limit.uppercolor || \"#F92200\");\r\n range.grid.strokeWidth = 2;\r\n range.grid.strokeOpacity = 1;\r\n }\r\n else if ((limit.upper == null || limit.upper == undefined) && limit.lower != null && limit.lower != undefined) {\r\n let range = yAxis.axisRanges.create();\r\n range.value = limit.lower;\r\n range.label.inside = true;\r\n range.label.text = limit.lowerlabel;\r\n range.label.fill = range.grid.stroke;\r\n range.label.verticalCenter = \"bottom\";\r\n range.label.stroke = am4core.color(limit.lowercolor || \"#F92200\");\r\n range.grid.stroke = am4core.color(limit.lowercolor || \"#F92200\");\r\n range.grid.strokeWidth = 2;\r\n range.grid.strokeOpacity = 1;\r\n }\r\n }\r\n }\r\n \r\n this.dateAxis = ChartInstanceCasted.xAxes.push(new am4charts.DateAxis());\r\n\r\n // Per comatibilità col codice scritto quando non era a livello globale, mi scoccia sostituire\r\n let dateAxis = this.dateAxis;\r\n\r\n if (settings.XAxisTitle) {\r\n dateAxis.title.text = settings.XAxisTitle\r\n dateAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n if (showTicks) {\r\n dateAxis.renderer.ticks.template.disabled = false;\r\n dateAxis.renderer.ticks.template.strokeOpacity = 1;\r\n dateAxis.renderer.ticks.template.stroke = am4core.color(\"#495C43\");\r\n dateAxis.renderer.ticks.template.strokeWidth = 2;\r\n dateAxis.renderer.ticks.template.length = 10;\r\n dateAxis.renderer.ticks.template.location = 0;\r\n }\r\n\r\n dateAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 50;\r\n dateAxis.renderer.grid.template.location = 0;\r\n dateAxis.minZoomCount = 5;\r\n dateAxis.groupData = dataShouldBeGrouped;\r\n dateAxis.groupCount = settings.DataGroupBucketSize ?? this.DataGroupBucketSize;\r\n\r\n //Se ho almeno una serie ad intervallo e i settings non mi impediscono esplicitamente di usare i gaps, visualizzo i dati col gap\r\n\r\n if (gapsAllowed) {\r\n if (!seriesWithInterval) {\r\n console.error(\"Per utilizzare la funzionalità dei gap è obbligatorio definire un intervallo nelle serie del grafico\");\r\n return null;\r\n }\r\n dateAxis.baseInterval = { count: interval.count, timeUnit: this.fixTimeUnit(interval.timeunit) };\r\n }\r\n if (showTimeline)\r\n ChartInstanceCasted.scrollbarX = new am4charts.XYChartScrollbar();\r\n\r\n let seriesToPush = [];\r\n let seriesColors: am4core.Color[] = [];\r\n let defaultIndex = 0;\r\n\r\n // Ordinamento dei dati se serve\r\n dataConverted.series.forEach((s) => {\r\n if (s.values[0] && !(s.values[0].d instanceof Date)) {\r\n for (let v = 0; v < s.values.length; v++)\r\n s.values[v].d = new Date(s.values[v].d);\r\n }\r\n\r\n var correctOrder = true;\r\n var prevDate = null;\r\n for (let v = 0; v < s.values.length; v++) {\r\n if (!prevDate)\r\n prevDate = s.values[v].d;\r\n else\r\n if (s.values[v].d < prevDate) {\r\n correctOrder = false;\r\n break;\r\n }\r\n }\r\n\r\n if (!correctOrder)\r\n s.values.sort((d1, d2) => d1.d.getTime() - d2.d.getTime());\r\n });\r\n\r\n // Generazione di un unico dataset invece che N, per poter gestire un unico tooltip\r\n if (this.singleDataSet) {\r\n this.ChartInstance.data = this.generateSingleDataset(dataConverted);;\r\n dateAxis.cursorTooltipEnabled = false;\r\n }\r\n\r\n dataConverted.series.forEach((s, index) => {\r\n let stacked = s.stacked != null && s.stacked != undefined ? s.stacked : (settings?.Stacked ?? false);\r\n let fill = stacked || (s.fill != null && s.fill != undefined ? s.fill : (settings?.Fill ?? false));\r\n let series: am4charts.StepLineSeries | am4charts.LineSeries = settings?.Step ? new am4charts.StepLineSeries() : new am4charts.LineSeries();\r\n series.dataFields.valueY = \"v\" + (this.singleDataSet ? index : \"\");\r\n series.dataFields.dateX = \"d\";\r\n (<any>series).measureUnit = s.uom;\r\n series.name = s.name;\r\n series.strokeWidth = settings?.StrokeSize ?? 1;\r\n series.connect = !gapsAllowed;\r\n series.minBulletDistance = 10;\r\n series.tooltipText = this.singleDataSet ? \"\" : s.name ? \"{name}: [bold]{valueY}[/]\" : \"[bold]{valueY}[/]\";\r\n series.tooltip.pointerOrientation = \"vertical\";\r\n series.tooltip.background.fillOpacity = 0.5;\r\n series.tooltip.label.padding(12, 12, 12, 12);\r\n series.fillOpacity = fill ? this.OpacityOnFill : 0.0001;\r\n series.stacked = stacked;\r\n series.hidden = s.hidden;\r\n\r\n //Dataset singolo, i dati sono registrati a livello di chart, creo il tooltip che permette di vederli tutti insieme\r\n //altrimenti assegno i dati della serie direttamente alla serie\r\n if (this.singleDataSet) {\r\n series.tooltip.getFillFromObject = false;\r\n series.tooltip.background.fill = am4core.color(\"#eee\");\r\n series.tooltip.label.fill = am4core.color(\"#00\");\r\n series.tooltip.defaultState.transitionDuration = 0;\r\n series.tooltip.hiddenState.transitionDuration = 0;\r\n\r\n //Utilizzo il mio dateService per la formattazione della data in modo che non debba mai gestire n formati fra n librerie... bellissimo\r\n series.dateFormatter.format = (source: Date): string => {\r\n if (interval && finalInstant && [\"hour\", \"minute\", \"second\"].includes(interval.timeunit)) {\r\n let timepart: \"minute\" | \"hour\" | \"day\" = null;\r\n switch (interval.timeunit) {\r\n case \"hour\": timepart = 'day'; break;\r\n case \"minute\": timepart = 'hour'; break;\r\n case \"second\": timepart = 'minute'; break;\r\n }\r\n if (timepart)\r\n return this.dateExts.adjustDateToFinalInstant(source, timepart, interval ? interval.timeunit == \"second\" : false);\r\n }\r\n else\r\n return this.dateExts.getFormatted(source, interval ? [\"day\", \"week\", \"month\", \"year\"].includes(interval.timeunit) : false, interval ? interval.timeunit == \"second\" : false);\r\n }\r\n\r\n (<any>series.adapter).add(\"tooltipText\", () => {\r\n var text = \"[bold]{dateX.formatDate()}[/]\\n\";\r\n this.ChartInstance.series.each((item) => {\r\n let uom = \" [font-style: italic]\" + (<any>series).measureUnit || \"\" + \"[/]\";\r\n text += \"[\" + (<any>item.stroke).hex + \"]●[/] \" + (item.name ? (item.name + \": \") : \"\") + \"[bold]{\" + item.dataFields.valueY + \"}[/]\" + uom + \"\\n\";\r\n });\r\n return text;\r\n });\r\n }\r\n else\r\n series.data = s.values;\r\n\r\n let segment = series.segments.template;\r\n\r\n let hoverState = segment.states.create(\"hover\");\r\n hoverState.properties.strokeWidth = (settings?.StrokeSize ?? 1) + 1;\r\n\r\n let dimmed = segment.states.create(\"dimmed\");\r\n dimmed.properties.stroke = am4core.color(\"#dadada\");\r\n\r\n //Se la serie ha un colore, uso quello, altrimenti pesco dai colori di default andando in ordine\r\n if (s.color)\r\n seriesColors.push(am4core.color(s.color));\r\n else {\r\n seriesColors.push(ChartInstanceCasted.colors.list[defaultIndex % ChartInstanceCasted.colors.list.length])\r\n defaultIndex++;\r\n }\r\n\r\n seriesToPush.push(series);\r\n });\r\n\r\n\r\n ChartInstanceCasted.colors.list = seriesColors;\r\n //Scrivo le serie nel grafico\r\n seriesToPush.forEach(s => {\r\n ChartInstanceCasted.series.push(s);\r\n if (showTimeline)\r\n (<am4charts.XYChartScrollbar>ChartInstanceCasted.scrollbarX).series.push(s);\r\n });\r\n\r\n if (settings.Legend) {\r\n this.ChartInstance.legend = new am4charts.Legend();\r\n this.ChartInstance.legend.position = settings?.LegendPosition ?? 'right';\r\n this.ChartInstance.legend.scrollable = true;\r\n\r\n this.ChartInstance.legend.itemContainers.template.tooltipText = \"{name}\";\r\n this.ChartInstance.legend.itemContainers.template.events.on(\"over\", (event) => { this.processOver(<am4charts.LineSeries>event.target.dataItem.dataContext); });\r\n this.ChartInstance.legend.itemContainers.template.events.on(\"out\", () => { this.processOut(); });\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n this.ChartInstance.cursor = new am4charts.XYCursor();\r\n\r\n //Prove******************************************************************************************************************************\r\n // this.ChartInstance.cursor.events.on(\"cursorpositionchanged\", (ev) => {\r\n // //var value = dateAxis.positionToDate(dateAxis.toAxisPosition(ev.target.xPosition));\r\n // var dt = dateAxis.series.values.find(t => t.dataItem.values.dateX);\r\n // if (dt && dt.dataItem) {\r\n // console.log(dt.dataItem.values);\r\n // // this.ChartInstance.tooltipText = dt;\r\n // }\r\n // else {\r\n // this.ChartInstance.tooltipText = \"\";\r\n // }\r\n // });\r\n //******************************************************************************************************************************\r\n\r\n this.ChartInstance.cursor.xAxis = dateAxis;\r\n this.ChartInstance.cursor.yAxis = yAxis;\r\n if (this.singleDataSet)\r\n this.ChartInstance.cursor.maxTooltipDistance = -1;\r\n\r\n //TODO: Cercare di capire perché è figlio di puttana......\r\n dateAxis.events.on(\"startchanged\", t => this.emitSelectionChanged(t, settings));\r\n dateAxis.events.on(\"endchanged\", t => this.emitSelectionChanged(t, settings));\r\n return this;\r\n }\r\n\r\n fixTimeUnit(tu: any): \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\" {\r\n if (tu === 0) return \"millisecond\";\r\n else if (tu === 1) return \"second\";\r\n else if (tu === 2) return \"minute\";\r\n else if (tu === 3) return \"hour\";\r\n else if (tu === 4) return \"day\";\r\n else if (tu === 5) return \"week\";\r\n else if (tu === 6) return \"month\";\r\n else if (tu === 7) return \"year\";\r\n else return tu;\r\n }\r\n \r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n this.dateAxis.zoomToDates(from, to, true, true);\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: LineChartData | any) {\r\n let dataConverted: LineChartData = this.Adapter ? this.Adapter.adaptDataForLineChart(data) : data;\r\n\r\n if (this.singleDataSet) {\r\n var data = this.generateSingleDataset(dataConverted);\r\n this.ChartInstance.addData(data);\r\n return;\r\n }\r\n\r\n throw \"Impossibile aggiornare i dati senza unire il dataset. Si prega di impostare [MergeDatasets] a true\"\r\n\r\n }\r\n\r\n /** Partendo da dati divisi per seriue genera un dataset unito con la data come chiave e i vari valori dopo */\r\n private generateSingleDataset(data: LineChartData): any {\r\n let dto: { [index: number]: { [sindex: string]: number } } = {};\r\n data.series.forEach((vs, index) => {\r\n for (let i = 0; i < vs.values.length; i++) {\r\n var dataitem = vs.values[i];\r\n var indexer = new Date(dataitem.d).valueOf();\r\n\r\n if (!dto[indexer])\r\n dto[indexer] = {};\r\n\r\n dto[indexer]['v' + index] = dataitem.v;\r\n }\r\n });\r\n\r\n var dates = Object.keys(dto);\r\n var ret = [];\r\n for (let i = 0; i < dates.length; i++) {\r\n let values: { [sindex: string]: number } = dto[dates[i]];\r\n let item = { d: new Date(parseInt(dates[i])) };\r\n\r\n var vals = Object.keys(values);\r\n for (let ii = 0; ii < vals.length; ii++) {\r\n let series = vals[ii];\r\n let singleVal = values[series];\r\n item[series] = singleVal;\r\n }\r\n ret.push(item);\r\n }\r\n return ret;\r\n }\r\n\r\n /** @ignore */\r\n private emitSelectionChanged(ev, settings) {\r\n if ((<any>settings).OnSelectionChangedCallback) {\r\n this.throttla(\"selchange\", () => {\r\n var axis = <am4charts.DateAxis>ev.target\r\n var start = new Date(axis.minZoomed);\r\n var end = new Date(axis.maxZoomed);\r\n var initial = axis.min == axis.minZoomed && axis.max == axis.maxZoomed;\r\n (<any>settings).OnSelectionChangedCallback({ from: start, to: end, initial: initial });\r\n }, 150)\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private processOver(hoveredSeries: am4charts.LineSeries) {\r\n hoveredSeries.zIndex = 999;\r\n let fill = hoveredSeries.fillOpacity == this.OpacityOnFill;\r\n hoveredSeries.segments.each((segment) => {\r\n segment.setState(\"hover\");\r\n if (!fill)\r\n segment.fillSprite.fillOpacity = this.OpacityOnSelected;\r\n });\r\n if (!fill)\r\n hoveredSeries.legendDataItem.marker.children.getIndex(1).fillOpacity = this.OpacityOnSelected;\r\n\r\n this.ChartInstance.series.each((series) => {\r\n if (series != hoveredSeries) {\r\n let fill = series.fillOpacity == this.OpacityOnFill;\r\n (<am4charts.LineSeries>series).segments.each((segment) => {\r\n segment.setState(\"dimmed\");\r\n if (!fill)\r\n segment.fillSprite.fillOpacity = 0;\r\n });\r\n }\r\n });\r\n }\r\n\r\n /** @ignore */\r\n private processOut() {\r\n this.ChartInstance.series.each((series, i) => {\r\n series.zIndex = i;\r\n let fill = series.fillOpacity == this.OpacityOnFill;\r\n (<am4charts.LineSeries>series).segments.each((segment) => {\r\n segment.setState(\"default\");\r\n if (!fill)\r\n segment.fillSprite.fillOpacity = 0;\r\n });\r\n if (!fill)\r\n series.legendDataItem.marker.children.getIndex(1).fillOpacity = 0;\r\n });\r\n }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { PieChartData } from '../models/data/PieChartData';\r\nimport { KeyValueColor } from '../models/data/base/KeyValueColor';\r\nimport { PieChartSettings } from '../models/settings/PieChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un PieChart\r\n */\r\nexport class PieChartService implements IBaseService<am4charts.PieChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.PieChart3D | am4charts.PieChart;\r\n /** @ignore */\r\n private ViewAbsoluteValues: boolean = true;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un PieChart\r\n */\r\n public graphicate(data: PieChartData | any, settings: PieChartSettings): IBaseService<am4charts.PieChart> {\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for pie chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, settings.Mode3D ? am4charts.PieChart3D : am4charts.PieChart);\r\n this.ChartInstance.innerRadius = ((settings.DonutRadiusPercentage || 15) / 100) * (<any>settings).ContainerHeight;\r\n\r\n let series: am4charts.PieSeries3D | am4charts.PieSeries = this.ChartInstance.series.push(settings.Mode3D ? new am4charts.PieSeries3D() : new am4charts.PieSeries());\r\n series.dataFields.value = \"v\";\r\n series.dataFields.category = \"k\";\r\n //Il default sono valori percentuali\r\n if (this.ViewAbsoluteValues) {\r\n series.legendSettings.valueText = \"{value}\";\r\n series.labels.template.text = \"{category}: [bold]{value}[/]\"\r\n }\r\n series.slices.template.stroke = am4core.color(\"#fff\");\r\n series.slices.template.strokeOpacity = 1;\r\n series.slices.template.togglable = false;\r\n series.hiddenState.properties.opacity = 1;\r\n series.hiddenState.properties.endAngle = -90;\r\n series.hiddenState.properties.startAngle = -90;\r\n\r\n if (settings.HideZeroes == null ? true : settings.HideZeroes) {\r\n series.ticks.template.events.on(\"ready\", this.hideZeroes);\r\n series.ticks.template.events.on(\"visibilitychanged\", this.hideZeroes);\r\n series.labels.template.events.on(\"ready\", this.hideZeroes);\r\n series.labels.template.events.on(\"visibilitychanged\", this.hideZeroes);\r\n }\r\n\r\n series.slices.template.events.on(\"hit\", (ev) => {\r\n if ((<any>settings).OnSeriesClickCallback) {\r\n let clickedSeries = (<KeyValueColor>ev.target.dataItem.dataContext).k;\r\n (<any>settings).OnSeriesClickCallback(clickedSeries);\r\n }\r\n });\r\n\r\n let dataConverted: PieChartData = this.Adapter ? this.Adapter.adaptDataForPieChart(data) : data;\r\n\r\n let defaultIndex = 0;\r\n for (let i = 0; i < dataConverted.values.length; i++) {\r\n if (!dataConverted.values[i].c) {\r\n dataConverted.values[i].c = <any>this.ChartInstance.colors.list[defaultIndex % this.ChartInstance.colors.list.length];\r\n defaultIndex++;\r\n }\r\n else\r\n dataConverted.values[i].c = <any>am4core.color(dataConverted.values[i].c)\r\n }\r\n\r\n series.slices.template.propertyFields.fill = \"c\";\r\n this.ChartInstance.data = dataConverted.values;\r\n\r\n if (!settings.LabelsVisible) {\r\n series.labels.template.disabled = true;\r\n series.ticks.template.disabled = true;\r\n }\r\n else if (settings.LabelsWrap || settings.LabelsTruncate) {\r\n series.labels.template.maxWidth = settings.LabelsWidth || 100;\r\n if (settings.LabelsWrap)\r\n series.labels.template.wrap = true;\r\n else if (settings.LabelsTruncate)\r\n series.labels.template.truncate = true;\r\n }\r\n\r\n if (settings.Total?.Show) {\r\n var label = this.ChartInstance.seriesContainer.createChild(am4core.Label);\r\n label.textAlign = \"middle\";\r\n label.horizontalCenter = \"middle\";\r\n label.verticalCenter = \"middle\";\r\n label.adapter.add(\"text\", function (text, target) {\r\n let sumString = (Math.trunc(series.dataItem.values.value.sum * 100) / 100).toString();\r\n let fs = 0;\r\n if (sumString.length >= 9)\r\n fs = 18;\r\n else if (sumString.length == 8)\r\n fs = 20;\r\n else if (sumString.length == 7)\r\n fs = 23;\r\n else if (sumString.length <= 7)\r\n fs = 28;\r\n return `[font-size:${settings.Total.TitleSize || 18}px]Totale[/]:\\n[bold font-size:${settings.Total.NumberSize || fs}px]${sumString}${settings.Total.UnitOfMeasure ? (' ' + settings.Total.UnitOfMeasure) : ''}[/]`;\r\n })\r\n }\r\n\r\n if (settings.Legend) {\r\n let legend = new am4charts.Legend();\r\n this.ChartInstance.legend = legend\r\n legend.position = settings?.LegendPosition || \"bottom\";\r\n legend.itemContainers.template.togglable = settings.HideSeriesOnLabelClick === true;\r\n legend.itemContainers.template.tooltipText = \"{category}\";\r\n\r\n //Se la legenda non fa il toggle della serie la considero come se fosse un click sulla serie in se\r\n if (!settings.HideSeriesOnLabelClick) {\r\n legend.itemContainers.template.events.on(\"hit\", (ev) => {\r\n if ((<any>settings).OnSeriesClickCallback) {\r\n let clickedSeries = (<any>ev.target.dataItem.dataContext).legendDataItem.name;\r\n (<any>settings).OnSeriesClickCallback(clickedSeries);\r\n }\r\n });\r\n }\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n \r\n /** @ignore */\r\n public refreshData(data: PieChartData | any){\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private hideZeroes(ev) {\r\n if (ev.target.dataItem && (ev.target.dataItem.values.value.percent == 0))\r\n ev.target.hide();\r\n else\r\n ev.target.show();\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { VerticalChartData } from '../models/data/VerticalChartData';\r\nimport { KeyValueColor } from '../models/data/base/KeyValueColor';\r\nimport { VerticalChartSettings } from '../models/settings/VerticalChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un VerticalChart\r\n */\r\nexport class VerticalChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private dangerZone: number = 50;\r\n /** @ignore */\r\n private LabelWidth: number = 150;\r\n /** @ignore */\r\n private LabelRightWhenCompressed: number = 20;\r\n /** @ignore */\r\n private LabelTopWhenCompressed: number = -5;\r\n /** @ignore */\r\n private DefaultColumnWidthPercentage: number = 85;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un VerticalChart\r\n */\r\n public graphicate(data: VerticalChartData | any, settings: VerticalChartSettings): IBaseService<am4charts.XYChart> {\r\n\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for vertical chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n \r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n let dataConverted: VerticalChartData = this.Adapter ? this.Adapter.adaptDataForVerticalChart(data) : data;\r\n ChartInstanceCasted.data = dataConverted.values;\r\n\r\n let noStrokes = dataConverted.values.some(t => !!t.c);\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n \r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n let categoryAxis: am4charts.CategoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis())\r\n if (settings.XAxisTitle) {\r\n categoryAxis.title.text = settings.XAxisTitle\r\n categoryAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n categoryAxis.dataFields.category = \"k\";\r\n categoryAxis.renderer.grid.template.location = 0;\r\n categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;\r\n\r\n let label = categoryAxis.renderer.labels.template;\r\n label.truncate = true;\r\n label.maxWidth = settings.LabelWidth ?? this.LabelWidth;\r\n label.tooltipText = \"{category}\";\r\n\r\n if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {\r\n categoryAxis.events.on(\"sizechanged\", (ev) => {\r\n let axis = ev.target;\r\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\r\n if (cellWidth < axis.renderer.labels.template.maxWidth) {\r\n let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);\r\n axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;\r\n axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;\r\n axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;\r\n axis.renderer.labels.template.horizontalCenter = \"right\";\r\n axis.renderer.labels.template.verticalCenter = \"middle\";\r\n }\r\n else {\r\n axis.renderer.labels.template.rotation = 0;\r\n axis.renderer.labels.template.dx = 0;\r\n axis.renderer.labels.template.dy = 0;\r\n axis.renderer.labels.template.horizontalCenter = \"middle\";\r\n axis.renderer.labels.template.verticalCenter = \"top\";\r\n }\r\n });\r\n }\r\n\r\n // Create series\r\n let series = ChartInstanceCasted.series.push(new am4charts.ColumnSeries());\r\n series.dataFields.valueY = \"v\";\r\n series.dataFields.categoryX = \"k\";\r\n series.name = \"\";\r\n\r\n let columnTemplate = series.columns.template;\r\n columnTemplate.tooltipText = \"{categoryX}: [bold]{valueY}[/] {t}\";\r\n columnTemplate.fillOpacity = .8;\r\n columnTemplate.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);\r\n if (noStrokes) {\r\n columnTemplate.strokeOpacity = 0;\r\n columnTemplate.strokeWidth = 0;\r\n columnTemplate.adapter.add(\"fill\", (_, target) => <any>am4core.color((<KeyValueColor>target.dataItem.dataContext).c));\r\n }\r\n else {\r\n columnTemplate.strokeWidth = 2;\r\n columnTemplate.strokeOpacity = 1;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n \r\n /** @ignore */\r\n public refreshData(data: VerticalChartData | any) {\r\n //TODO:IMPL\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { Vertical2DChartData } from '../models/data/Vertical2DChartData';\r\nimport { Vertical2DChartSettings } from '../models/settings/Vertical2DChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un Vertical2DChart\r\n */\r\nexport class Vertical2DChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private DefaultGroupPaddingPercentage: number = 5;\r\n /** @ignore */\r\n private dangerZone: number = 50;\r\n /** @ignore */\r\n private LabelWidth: number = 150;\r\n /** @ignore */\r\n private LabelRightWhenCompressed: number = 20;\r\n /** @ignore */\r\n private LabelTopWhenCompressed: number = -5;\r\n /** @ignore */\r\n private DefaultColumnWidthPercentage: number = 85;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un Vertical2DChart\r\n */\r\n public graphicate(data: Vertical2DChartData | any, settings: Vertical2DChartSettings): IBaseService<am4charts.XYChart> {\r\n\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for vertical chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n \r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n let categoryAxis: am4charts.CategoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis())\r\n if (settings.XAxisTitle) {\r\n categoryAxis.title.text = settings.XAxisTitle\r\n categoryAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n yAxis.min = 0;\r\n categoryAxis.dataFields.category = 'key'\r\n categoryAxis.renderer.cellStartLocation = am4core.percent(settings.GroupPaddingPercentage ?? this.DefaultGroupPaddingPercentage).value\r\n categoryAxis.renderer.cellEndLocation = am4core.percent(100 - (settings.GroupPaddingPercentage ?? this.DefaultGroupPaddingPercentage)).value\r\n categoryAxis.renderer.grid.template.location = 0;\r\n categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;\r\n\r\n let label = categoryAxis.renderer.labels.template;\r\n label.truncate = true;\r\n label.maxWidth = settings.LabelWidth ?? this.LabelWidth;\r\n label.tooltipText = \"{category}\";\r\n\r\n if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {\r\n categoryAxis.events.on(\"sizechanged\", (ev) => {\r\n let axis = ev.target;\r\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\r\n if (cellWidth < axis.renderer.labels.template.maxWidth) {\r\n let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);\r\n axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;\r\n axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;\r\n axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;\r\n axis.renderer.labels.template.horizontalCenter = \"right\";\r\n axis.renderer.labels.template.verticalCenter = \"middle\";\r\n }\r\n else {\r\n axis.renderer.labels.template.rotation = 0;\r\n axis.renderer.labels.template.dx = 0;\r\n axis.renderer.labels.template.dy = 0;\r\n axis.renderer.labels.template.horizontalCenter = \"middle\";\r\n axis.renderer.labels.template.verticalCenter = \"top\";\r\n }\r\n });\r\n }\r\n\r\n let dataPreConverted: Vertical2DChartData = this.Adapter ? this.Adapter.adaptDataForVertical2DChart(data) : data;\r\n\r\n let dataConverted = [];\r\n for (let i = 0; i < dataPreConverted.groups.length; i++) {\r\n let item = dataPreConverted.groups[i];\r\n let obj = { key: item.name };\r\n for (let p = 0; p < item.values.length; p++) {\r\n let value = item.values[p];\r\n obj[value.k] = value.v;\r\n }\r\n dataConverted.push(obj);\r\n }\r\n\r\n ChartInstanceCasted.data = dataConverted;\r\n if (dataPreConverted.colorinfos)\r\n ChartInstanceCasted.colors.list = dataPreConverted.colorinfos.map(c => am4core.color(c.color));\r\n\r\n //Prendo la prima categoria e mi baso sulle proprietà per dfeinire le serie\r\n for (let prop in dataConverted[0])\r\n if (prop !== \"key\")\r\n this.createSeries(ChartInstanceCasted, settings, prop, prop);\r\n\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: Vertical2DChartData | any) {\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private createSeries(chart, settings: Vertical2DChartSettings, value, name) {\r\n let series: am4charts.ColumnSeries = chart.series.push(new am4charts.ColumnSeries())\r\n series.dataFields.valueY = value;\r\n series.dataFields.categoryX = 'key';\r\n series.name = name;\r\n series.columns.template.tooltipText = \"{name} {categoryX}: [bold]{valueY}[/]\";\r\n series.columns.template.fillOpacity = .8;\r\n series.columns.template.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);\r\n\r\n series.events.on(\"hidden\", () => this.arrangeColumns);\r\n series.events.on(\"shown\", () => this.arrangeColumns);\r\n\r\n return series;\r\n }\r\n\r\n /** @ignore */\r\n private arrangeColumns() {\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n let series = ChartInstanceCasted.series.getIndex(0);\r\n let xAxis = ChartInstanceCasted.xAxes.getIndex(0);\r\n\r\n let w = 1 - xAxis.renderer.cellStartLocation - (1 - xAxis.renderer.cellEndLocation);\r\n if (series.dataItems.length > 1) {\r\n let x0 = xAxis.getX(series.dataItems.getIndex(0), \"categoryX\");\r\n let x1 = xAxis.getX(series.dataItems.getIndex(1), \"categoryX\");\r\n let delta = ((x1 - x0) / ChartInstanceCasted.series.length) * w;\r\n if (am4core.isNumber(delta)) {\r\n let middle = ChartInstanceCasted.series.length / 2;\r\n\r\n let newIndex = 0;\r\n ChartInstanceCasted.series.each((series) => {\r\n if (!series.isHidden && !series.isHiding) {\r\n series.dummyData = newIndex;\r\n newIndex++;\r\n }\r\n else {\r\n series.dummyData = ChartInstanceCasted.series.indexOf(series);\r\n }\r\n })\r\n let visibleCount = newIndex;\r\n let newMiddle = visibleCount / 2;\r\n\r\n ChartInstanceCasted.series.each((series) => {\r\n let trueIndex = ChartInstanceCasted.series.indexOf(series);\r\n let newIndex = series.dummyData;\r\n\r\n let dx = (newIndex - trueIndex + middle - newMiddle) * delta\r\n\r\n series.animate({ property: \"dx\", to: dx }, series.interpolationDuration, series.interpolationEasing);\r\n series.bulletsContainer.animate({ property: \"dx\", to: dx }, series.interpolationDuration, series.interpolationEasing);\r\n })\r\n }\r\n }\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { VerticalStackedChartData } from '../models/data/VerticalStackedChartData';\r\nimport { VerticalStackedChartSettings } from '../models/settings/VerticalStackedChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un VerticalStackedChart\r\n */\r\nexport class VerticalStackedChartService implements IBaseService<am4charts.XYChart>{\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n /** @ignore */\r\n private dangerZone: number = 50;\r\n /** @ignore */\r\n private LabelWidth: number = 150;\r\n /** @ignore */\r\n private LabelRightWhenCompressed: number = 20;\r\n /** @ignore */\r\n private LabelTopWhenCompressed: number = -5;\r\n /** @ignore */\r\n private DefaultColumnWidthPercentage: number = 85;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un VerticalStackedChart\r\n */\r\n public graphicate(data: VerticalStackedChartData | any, settings: VerticalStackedChartSettings): IBaseService<am4charts.XYChart> {\r\n \r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for vertical chart\");\r\n return null;\r\n }\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n // Create axes \r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n let categoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis());\r\n if (settings.XAxisTitle) {\r\n categoryAxis.title.text = settings.XAxisTitle\r\n categoryAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n yAxis.min = 0;\r\n\r\n categoryAxis.dataFields.category = \"key\";\r\n categoryAxis.renderer.grid.template.location = 0;\r\n categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;\r\n\r\n let label = categoryAxis.renderer.labels.template;\r\n label.truncate = true;\r\n label.maxWidth = settings.LabelWidth ?? this.LabelWidth;\r\n label.tooltipText = \"{category}\";\r\n\r\n if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {\r\n categoryAxis.events.on(\"sizechanged\", (ev) => {\r\n let axis = ev.target;\r\n var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);\r\n if (cellWidth < axis.renderer.labels.template.maxWidth) {\r\n let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);\r\n axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;\r\n axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;\r\n axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;\r\n axis.renderer.labels.template.horizontalCenter = \"right\";\r\n axis.renderer.labels.template.verticalCenter = \"middle\";\r\n }\r\n else {\r\n axis.renderer.labels.template.rotation = 0;\r\n axis.renderer.labels.template.dx = 0;\r\n axis.renderer.labels.template.dy = 0;\r\n axis.renderer.labels.template.horizontalCenter = \"middle\";\r\n axis.renderer.labels.template.verticalCenter = \"top\";\r\n }\r\n });\r\n }\r\n\r\n let dataPreConverted: VerticalStackedChartData = this.Adapter ? this.Adapter.adaptDataForVerticalStackedChart(data) : data;\r\n\r\n let dataConverted = [];\r\n for (let i = 0; i < dataPreConverted.groups.length; i++) {\r\n let item = dataPreConverted.groups[i];\r\n let obj = { key: item.name };\r\n for (let p = 0; p < item.values.length; p++) {\r\n let value = item.values[p];\r\n obj[value.k] = value.v;\r\n }\r\n dataConverted.push(obj);\r\n }\r\n\r\n ChartInstanceCasted.data = dataConverted;\r\n\r\n //Prendo la prima categoria e mi baso sulle proprietà per dfeinire le serie\r\n for (let prop in dataConverted[0]) {\r\n if (prop !== \"key\")\r\n this.createSeriesStacked(ChartInstanceCasted, settings, prop, prop);\r\n }\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: VerticalStackedChartData | any) {\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private createSeriesStacked(chart, settings: VerticalStackedChartSettings, field, name) {\r\n // Set up series\r\n let series = chart.series.push(new am4charts.ColumnSeries());\r\n series.name = name;\r\n series.dataFields.valueY = field;\r\n series.dataFields.categoryX = \"key\";\r\n series.sequencedInterpolation = true;\r\n series.columns.template.tooltipText = \"{name} {categoryX}: [bold]{valueY}[/]\";\r\n series.columns.template.fillOpacity = .8;\r\n series.columns.template.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);\r\n\r\n // Make it stacked\r\n series.stacked = true;\r\n\r\n return series;\r\n }\r\n}","import { IBaseService } from './base/IBaseService';\r\nimport { BaseAdapter } from '../adapters/BaseAdapter';\r\nimport { AreaChartData } from '../models/data/AreaChartData';\r\nimport { AreaChartSettings } from '../models/settings/AreaChartSettings';\r\n\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\n/**\r\n * Classe il cui unico scopo è gestire il setup e rendering di un AreaChart\r\n */\r\nexport class AreaChartService implements IBaseService<am4charts.XYChart> {\r\n\r\n /** @ignore */\r\n public ChartInstance: am4charts.XYChart;\r\n\r\n /** @ignore */\r\n constructor(public Adapter: BaseAdapter) { }\r\n\r\n /**\r\n * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un AreaChart\r\n */\r\n public graphicate(data: AreaChartData | any, settings: AreaChartSettings): IBaseService<am4charts.XYChart> {\r\n if (settings.Timeline) {\r\n console.error(\"Timeline not supported for area chart\");\r\n return null;\r\n }\r\n let dataConverted: AreaChartData = this.Adapter ? this.Adapter.adaptDataForAreaChart(data) : data;\r\n let showTicks = settings.ShowTicks == null ? true : settings?.ShowTicks;\r\n let interval = dataConverted.interval;\r\n\r\n //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...\r\n am4core.options.autoDispose = true;\r\n\r\n this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);\r\n let ChartInstanceCasted = <am4charts.XYChart>this.ChartInstance;\r\n\r\n if (settings.Legend) {\r\n ChartInstanceCasted.legend = new am4charts.Legend();\r\n ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';\r\n ChartInstanceCasted.legend.itemContainers.template.tooltipText = \"{category}\";\r\n\r\n if (settings.LegendPadding) {\r\n let template = this.ChartInstance.legend.itemContainers.template;\r\n template.paddingTop = settings.LegendPadding.top ?? 0;\r\n template.paddingBottom = settings.LegendPadding.bottom ?? 0;\r\n template.paddingLeft = settings.LegendPadding.left ?? 0;\r\n template.paddingRight = settings.LegendPadding.right ?? 0;\r\n }\r\n }\r\n\r\n let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());\r\n yAxis.tooltip.disabled = true;\r\n if (settings.YAxisTitle) {\r\n yAxis.title.text = settings.YAxisTitle\r\n yAxis.title.fontWeight = \"bold\";\r\n }\r\n yAxis.min = 0;\r\n\r\n let dateAxis = ChartInstanceCasted.xAxes.push(new am4charts.DateAxis());\r\n dateAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 50;\r\n dateAxis.startLocation = 0.5;\r\n dateAxis.endLocation = 0.5;\r\n\r\n if (settings.XAxisTitle) {\r\n dateAxis.title.text = settings.XAxisTitle\r\n dateAxis.title.fontWeight = \"bold\";\r\n }\r\n\r\n if (showTicks) {\r\n dateAxis.renderer.ticks.template.disabled = false;\r\n dateAxis.renderer.ticks.template.strokeOpacity = 1;\r\n dateAxis.renderer.ticks.template.stroke = am4core.color(\"#495C43\");\r\n dateAxis.renderer.ticks.template.strokeWidth = 2;\r\n dateAxis.renderer.ticks.template.length = 10;\r\n dateAxis.renderer.ticks.template.location = 0;\r\n }\r\n\r\n if (!!interval)\r\n dateAxis.baseInterval = { count: interval.count, timeUnit: this.fixTimeUnit(interval.timeunit) };\r\n\r\n // Unisco il dataset e tiro fuori i dati\r\n let chartData = [];\r\n let seriesToMakeCache: { [index: string]: boolean } = {};\r\n let seriesToMake: string[] = [];\r\n for (let i = 0; i < dataConverted.groups.length; i++) {\r\n let group = dataConverted.groups[i];\r\n let dataItem = { date: group.name };\r\n for (let ii = 0; ii < group.values.length; ii++) {\r\n let val = group.values[ii];\r\n dataItem[val.k] = val.v;\r\n if (!seriesToMakeCache[val.k]) {\r\n seriesToMakeCache[val.k] = true;\r\n seriesToMake.push(val.k);\r\n }\r\n }\r\n chartData.push(dataItem);\r\n }\r\n ChartInstanceCasted.data = chartData;\r\n //---------------------------------------------------------\r\n\r\n seriesToMake.forEach(s => { this.createSeries(ChartInstanceCasted, s); });\r\n\r\n ChartInstanceCasted.cursor = new am4charts.XYCursor();\r\n ChartInstanceCasted.cursor.xAxis = dateAxis;\r\n\r\n dateAxis.events.on(\"startchanged\", t => this.emitSelectionChanged(t, settings));\r\n dateAxis.events.on(\"endchanged\", t => this.emitSelectionChanged(t, settings));\r\n return this;\r\n }\r\n\r\n fixTimeUnit(tu: any): \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\" {\r\n if (tu === 0) return \"millisecond\";\r\n else if (tu === 1) return \"second\";\r\n else if (tu === 2) return \"minute\";\r\n else if (tu === 3) return \"hour\";\r\n else if (tu === 4) return \"day\";\r\n else if (tu === 5) return \"week\";\r\n else if (tu === 6) return \"month\";\r\n else if (tu === 7) return \"year\";\r\n else return tu;\r\n }\r\n\r\n /** @ignore */\r\n setSelection(from: Date, to: Date): void {\r\n\r\n }\r\n\r\n /** @ignore */\r\n public refreshData(data: AreaChartData | any) {\r\n //TODO:IMPL\r\n }\r\n\r\n /** @ignore */\r\n private emitSelectionChanged(ev, settings) {\r\n if ((<any>settings).OnSelectionChangedCallback) {\r\n this.throttla(\"selchange\", () => {\r\n var axis = <am4charts.DateAxis>ev.target\r\n var start = new Date(axis.minZoomed);\r\n var end = new Date(axis.maxZoomed);\r\n var initial = axis.min == axis.minZoomed && axis.max == axis.maxZoomed;\r\n (<any>settings).OnSelectionChangedCallback({ from: start, to: end, initial: initial });\r\n }, 150)\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private createSeries(chart: any, name: string) {\r\n let series: am4charts.LineSeries = chart.series.push(new am4charts.LineSeries())\r\n series.dataFields.dateX = \"date\";\r\n series.name = name[0].toUpperCase() + name.slice(1);\r\n series.dataFields.valueY = name;\r\n series.tooltipText = \"[#000]{valueY.value}[/]\";\r\n //series.tooltip.background.fill = am4core.color(\"#FFF\");\r\n series.tooltip.getStrokeFromObject = true;\r\n series.tooltip.background.strokeWidth = 3;\r\n series.tooltip.getFillFromObject = false;\r\n series.fillOpacity = 0.6;\r\n series.strokeWidth = 2;\r\n series.stacked = true;\r\n return series;\r\n }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\n\r\n// Data\r\nimport { LineChartData } from \"../../models/data/LineChartData\";\r\nimport { PieChartData } from \"../../models/data/PieChartData\";\r\nimport { VerticalChartData } from \"../../models/data/VerticalChartData\";\r\nimport { Vertical2DChartData } from \"../../models/data/Vertical2DChartData\";\r\nimport { VerticalStackedChartData } from \"../../models/data/VerticalStackedChartData\";\r\nimport { AreaChartData } from \"../../models/data/AreaChartData\";\r\nimport { PagedChartData } from \"../../models/data/PagedChartData\";\r\n\r\n// Services\r\nimport { LineChartService } from \"../../services/LineChartService\";\r\nimport { PieChartService } from \"../../services/PieChartService\";\r\nimport { VerticalChartService } from \"../../services/VerticalChartService\";\r\nimport { Vertical2DChartService } from \"../../services/Vertical2DChartService\";\r\nimport { VerticalStackedChartService } from \"../../services/VerticalStackedChartService\";\r\nimport { AreaChartService } from \"../../services/AreaChartService\";\r\n\r\n// Settings\r\nimport { PieChartSettings } from \"../../models/settings/PieChartSettings\";\r\nimport { AreaChartSettings } from \"../../models/settings/AreaChartSettings\";\r\nimport { VerticalChartSettings } from \"../../models/settings/VerticalChartSettings\";\r\nimport { Vertical2DChartSettings } from \"../../models/settings/Vertical2DChartSettings\";\r\nimport { VerticalStackedChartSettings } from \"../../models/settings/VerticalStackedChartSettings\";\r\nimport { LineChartSettings } from \"../../models/settings/LineChartSettings\";\r\n\r\n\r\n/**\r\n * Componente specifico per la graficazione di un qualsiasi tipo di grafico.\r\n * \r\n * Si basa sul tipo specificato dalla proprietà **Type**\r\n */\r\n@Component({\r\n selector: 'es-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Tipologia di grafico da presentare\r\n */\r\n @Input() Type: 'pie' | 'line' | 'vertical' | 'vertical-2d' | 'vertical-stacked' | 'area';\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo giusto col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | VerticalStackedChartData | AreaChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo giusto col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<LineChartData>[]\r\n | PagedChartData<PieChartData>[]\r\n | PagedChartData<Vertical2DChartData>[]\r\n | PagedChartData<VerticalChartData>[]\r\n | PagedChartData<VerticalStackedChartData>[]\r\n | PagedChartData<AreaChartData>[]\r\n | PagedChartData<any>[];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private dateService: DateService, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"Type\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings() {\r\n switch (this.Type) {\r\n case 'pie':\r\n return <PieChartSettings>(this.Settings ?? new PieChartSettings());\r\n case 'area':\r\n return <AreaChartSettings>(this.Settings ?? new AreaChartSettings());\r\n case 'line':\r\n return <LineChartSettings>(this.Settings ?? new LineChartSettings());\r\n case 'vertical':\r\n return <VerticalChartSettings>(this.Settings ?? new VerticalChartSettings());\r\n case 'vertical-2d':\r\n return <Vertical2DChartSettings>(this.Settings ?? new Vertical2DChartSettings());\r\n case 'vertical-stacked':\r\n return <VerticalStackedChartSettings>(this.Settings ?? new VerticalStackedChartSettings());\r\n }\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings): void {\r\n // Nope. Se si usa l'es-chart si danno i settings con l'oggetto\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {PieChartService | AreaChartService | LineChartService | VerticalChartService | Vertical2DChartService | VerticalStackedChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settings: PieChartSettings | AreaChartSettings | LineChartSettings | VerticalChartSettings | Vertical2DChartSettings | VerticalStackedChartSettings): any {\r\n switch (this.Type) {\r\n case 'pie':\r\n return new PieChartService(this.adapter).graphicate(<PieChartData>this.Data, <PieChartSettings>settings);\r\n case 'area':\r\n return new AreaChartService(this.adapter).graphicate(<AreaChartData>this.Data, <AreaChartSettings>settings);\r\n case 'line':\r\n return new LineChartService(this.adapter, this.dateService).graphicate(<LineChartData>this.Data, <LineChartSettings>settings);\r\n case 'vertical':\r\n return new VerticalChartService(this.adapter).graphicate(<VerticalChartData>this.Data, <VerticalChartSettings>settings);\r\n case 'vertical-2d':\r\n return new Vertical2DChartService(this.adapter).graphicate(<Vertical2DChartData>this.Data, <Vertical2DChartSettings>settings);\r\n case 'vertical-stacked':\r\n return new VerticalStackedChartService(this.adapter).graphicate(<VerticalStackedChartData>this.Data, <VerticalStackedChartSettings>settings);\r\n }\r\n }\r\n}","<chart-pager *ngIf=\"isPaged\" (onPageChange)=\"changePage($event)\" [Items]=\"DataArray\" [Dtos]=\"DataDtos\" [StartIndex]=\"DataDtoStartIndex\"\r\n [BrowseDelayMs]=\"BrowseDelayMs\">\r\n <ng-template #header_inner let-headerItem>\r\n <ng-container *ngTemplateOutlet=\"header_tr; context : {$implicit: headerItem}\"></ng-container>\r\n </ng-template>\r\n</chart-pager>\r\n\r\n<ng-container *ngIf=\"loadingChart && loading_template\">\r\n <div style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <ng-container *ngTemplateOutlet=\"loading_template\"></ng-container>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"loadingChart && !loading_template\">\r\n <div class=\"esc-loading-overlay\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\">\r\n <p class=\"label\">Loading....</p>\r\n </div>\r\n</ng-container>\r\n\r\n<div [class.hide-block]=\"loadingChart\" id=\"{{name}}\" style=\"width: 100%;\" [style.height]=\"isPaged ? 'calc(100% - 44px)' : '100%'\"></div>","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\n\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\n\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { AreaChartSettings } from '../../models/settings/AreaChartSettings';\r\nimport { AreaChartService } from '../../services/AreaChartService';\r\nimport { AreaChartData } from '../../models/data/AreaChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico ad Area\r\n */\r\n@Component({\r\n selector: 'es-area-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsAreaChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **AreaChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: AreaChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **AreaChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<AreaChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {AreaChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): AreaChartSettings {\r\n return <AreaChartSettings>(this.Settings ?? new AreaChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {AreaChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: AreaChartSettings): void {\r\n\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {AreaChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {AreaChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: AreaChartSettings): any {\r\n return new AreaChartService(this.adapter).graphicate(<AreaChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { LineChartSettings } from '../../models/settings/LineChartSettings';\r\nimport { LineChartService } from '../../services/LineChartService';\r\nimport { LineChartData } from '../../models/data/LineChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Linea su un asse temporale\r\n */\r\n@Component({\r\n selector: 'es-line-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsLineChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **LineChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: LineChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **LineChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<LineChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica se la curva deve collegare direttamente un datapoint all'altro o se deve fare degli step\r\n */\r\n @Input() Step: boolean;\r\n\r\n /**\r\n * Indica il numero massimo di datapoint visualizzabile in una singola vista del grafico. L'eccedenza viene raggruppata e verrà mostrata sullo zoom.\r\n * \r\n * ATTENZIONE: Utilizzando il sistema di default di raggruppamento di am-charts si rischia di tagliare via pezzi da serie molto ondulate\r\n * in quanto il comportamento di default è quello di eliminare i datapoint che non ci stanno, non di interpolarli\r\n */\r\n @Input() DataGroupBucketSize: number;\r\n\r\n /**\r\n * Soglia per controllare oltre che numero di datapoint il grafico deve iniziare ad effettuare raggruppamenti considerando l'Input **DataGroupBucketSize**\r\n */\r\n @Input() DataGroupingThreshold: number;\r\n\r\n /**\r\n * Indica le dimnsioni, in pixel della linea del grafico\r\n */\r\n @Input() StrokeSize: number;\r\n\r\n /**\r\n * Indica se sono permessi dei Gap fra un valore e l'altro.\r\n * \r\n * Normalmente quando ci sono dei buchi l'ultimo datapoint del buco viene collegato direttamente al primo datapoint disponibile. \r\n * \r\n * Impostando questo Input a true invece, posto di aver assegnato la variabile **interval** della classe **LineChartData**, è possibile \r\n * far apparire il blocco di dati mancanti come un buco vero e proprio, senza alcun collegamento fra i due datapoint estremi\r\n */\r\n @Input() AllowGaps: boolean;\r\n\r\n /**\r\n * Input che permette di rielaborare i dati del grafico per generare un solo Dataset\r\n * \r\n * Viene utilizzato semplicemente per dare un tooltip molto più bello/avanzato sullo scorrimentodel cursore all'interno del grafico\r\n */\r\n @Input() MergeDatasets: boolean;\r\n\r\n /**\r\n * Indica se le date che arrivano all'asse X devono essere considerate \"Istante finale\" e aggiustate di conseguenza. \r\n * Se non è valorizzata la variabile **interval** della classe **LineChartData** non ha alcun effetto\r\n * \r\n * Ad esempio, la data 16/07/2021 con intervallo orario verrebbe trasformata in 15/07/2021 24:00:00 (Ovviamente è utilizzato solo lato presentazione)\r\n */\r\n @Input() FinalInstants: boolean;\r\n\r\n /**\r\n * Gestisce il minimo dell'asse Y\r\n */\r\n @Input() Min: number;\r\n\r\n /**\r\n * Gestisce il massimo dell'asse Y\r\n */\r\n @Input() Max: number;\r\n\r\n /**\r\n * Indica se effettuare il Fill della serie in modo da non vedere solo la linea ma proprio l'area sottessa completamente colorata\r\n */\r\n @Input() Fill: boolean;\r\n\r\n /**\r\n * Indica se effettuare lo Stack della serie in modo da vedere tutte le linee una sopra l'altra. Implicitamente include anche il **Fill**\r\n */\r\n @Input() Stacked: boolean;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, private dateService: DateService, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\", \"Step\", \"DataGroupBucketSize\", \"DataGroupingThreshold\", \"StrokeSize\", \"Stacked\", \"AllowGaps\", \"MergeDatasets\", \"FinalInstants\", \"Fill\", \"Min\", \"Max\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {LineChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): LineChartSettings {\r\n return <LineChartSettings>(this.Settings ?? new LineChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {LineChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: LineChartSettings): void {\r\n settingsCasted.Step = settingsCasted.Step != null ? settingsCasted.Step : this.Step;\r\n settingsCasted.DataGroupBucketSize = settingsCasted.DataGroupBucketSize != null ? settingsCasted.DataGroupBucketSize : this.DataGroupBucketSize;\r\n settingsCasted.StrokeSize = settingsCasted.StrokeSize != null ? settingsCasted.StrokeSize : this.StrokeSize;\r\n settingsCasted.DataGroupingThreshold = settingsCasted.DataGroupingThreshold != null ? settingsCasted.DataGroupingThreshold : this.DataGroupingThreshold;\r\n settingsCasted.AllowGaps = settingsCasted.AllowGaps != null ? settingsCasted.AllowGaps : this.AllowGaps;\r\n settingsCasted.MergeDatasets = settingsCasted.MergeDatasets != null ? settingsCasted.MergeDatasets : this.MergeDatasets;\r\n settingsCasted.FinalInstants = settingsCasted.FinalInstants != null ? settingsCasted.FinalInstants : this.FinalInstants;\r\n settingsCasted.Min = settingsCasted.Min != null ? settingsCasted.Min : this.Min;\r\n settingsCasted.Max = settingsCasted.Max != null ? settingsCasted.Max : this.Max;\r\n settingsCasted.Fill = settingsCasted.Fill != null ? settingsCasted.Fill : this.Fill;\r\n settingsCasted.Stacked = settingsCasted.Stacked != null ? settingsCasted.Stacked : this.Stacked;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {LineChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {LineChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: LineChartSettings): any {\r\n return new LineChartService(this.adapter, this.dateService).graphicate(<LineChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { PieChartSettings } from '../../models/settings/PieChartSettings';\r\nimport { PieChartService } from '../../services/PieChartService';\r\nimport { PieChartData } from '../../models/data/PieChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Torta\r\n */\r\n@Component({\r\n selector: 'es-pie-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsPieChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **PieChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: PieChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **PieChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<PieChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica se mostrare o meno le serie con percentuale a 0\r\n */\r\n @Input() HideZeroes: boolean;\r\n\r\n /**\r\n * Indica se apparire in modalità 3D o 2D\r\n */\r\n @Input() Mode3D: boolean;\r\n\r\n /**\r\n * Percentuale dell'altezza del grafico che viene utilizzata per creare il buco all'interno della ciambella **wink** **wink**\r\n */\r\n @Input() DonutRadiusPercentage: number;\r\n\r\n /**\r\n * Indica se wrappare le label che non stanno nel contenitore\r\n */\r\n @Input() LabelsWrap: boolean;\r\n\r\n /**\r\n * Indica se troncare le label che non stanno nel contenitore\r\n */\r\n @Input() LabelsTruncate: boolean;\r\n\r\n /**\r\n * Indica la dimensione massima che possono assumere le label\r\n */\r\n @Input() LabelsWidth: number;\r\n\r\n /**\r\n * Indica se mostrare o meno le labels\r\n */\r\n @Input() LabelsVisible: boolean;\r\n\r\n /**\r\n * Indica se mostrare o meno le labels\r\n */\r\n @Input() Total: {\r\n Show: boolean;\r\n TitleSize: number;\r\n NumberSize: number;\r\n UnitOfMeasure: string;\r\n };\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\", \"HideZeroes\", \"Mode3D\", \"LabelsWrap\", \"LabelsTruncate\", \"LabelsWidth\", \"LabelsVisible\", \"ShowTotal\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {PieChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): PieChartSettings {\r\n return <PieChartSettings>(this.Settings ?? new PieChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {PieChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: PieChartSettings): void {\r\n settingsCasted.HideZeroes = settingsCasted.HideZeroes != null ? settingsCasted.HideZeroes : this.HideZeroes;\r\n settingsCasted.Mode3D = settingsCasted.Mode3D != null ? settingsCasted.Mode3D : this.Mode3D;\r\n settingsCasted.DonutRadiusPercentage = settingsCasted.DonutRadiusPercentage != null ? settingsCasted.DonutRadiusPercentage : this.DonutRadiusPercentage;\r\n settingsCasted.LabelsWrap = settingsCasted.LabelsWrap != null ? settingsCasted.LabelsWrap : this.LabelsWrap;\r\n settingsCasted.LabelsTruncate = settingsCasted.LabelsTruncate != null ? settingsCasted.LabelsTruncate : this.LabelsTruncate;\r\n settingsCasted.LabelsWidth = settingsCasted.LabelsWidth != null ? settingsCasted.LabelsWidth : this.LabelsWidth;\r\n settingsCasted.LabelsVisible = settingsCasted.LabelsVisible != null ? settingsCasted.LabelsVisible : this.LabelsVisible;\r\n settingsCasted.Total = settingsCasted.Total != null ? settingsCasted.Total : this.Total;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {PieChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {PieChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: PieChartSettings): any {\r\n return new PieChartService(this.adapter).graphicate(<PieChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { Vertical2DChartSettings } from '../../models/settings/Vertical2DChartSettings';\r\nimport { Vertical2DChartService } from '../../services/Vertical2DChartService';\r\nimport { Vertical2DChartData } from '../../models/data/Vertical2DChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Barre con due dimensioni\r\n */\r\n@Component({\r\n selector: 'es-vertical-2d-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsVertical2DChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **Vertical2DChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: Vertical2DChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **Vertical2DChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<Vertical2DChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n @Input() ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica il padding percentuale rispetto alla cella da lasciare fra un gruppo di barre e l'altro. Un valore pari a 0 indica la mancanza di\r\n * spazio fra un gruppo e l'altro, un valore pari a 5 indica il 5% della dimensione della cella in cui appare il gruppo come padding a destra e sinistra\r\n */\r\n @Input() GroupPaddingPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n @Input() LabelWidth: number;\r\n\r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n @Input() LabelVerticalOrientationCutoffWidth: number;\r\n\r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelRightWhenCompressed: number;\r\n\r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelTopWhenCompressed: number;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {Vertical2DChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): Vertical2DChartSettings {\r\n return <Vertical2DChartSettings>(this.Settings ?? new Vertical2DChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {Vertical2DChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: Vertical2DChartSettings): void {\r\n settingsCasted.ColumnWidthPercentage = settingsCasted.ColumnWidthPercentage != null ? settingsCasted.ColumnWidthPercentage : this.ColumnWidthPercentage;\r\n settingsCasted.GroupPaddingPercentage = settingsCasted.GroupPaddingPercentage != null ? settingsCasted.GroupPaddingPercentage : this.GroupPaddingPercentage;\r\n settingsCasted.LabelWidth = settingsCasted.LabelWidth != null ? settingsCasted.LabelWidth : this.LabelWidth;\r\n settingsCasted.LabelVerticalOrientationCutoffWidth = settingsCasted.LabelVerticalOrientationCutoffWidth != null ? settingsCasted.LabelVerticalOrientationCutoffWidth : this.LabelVerticalOrientationCutoffWidth;\r\n settingsCasted.LabelRightWhenCompressed = settingsCasted.LabelRightWhenCompressed != null ? settingsCasted.LabelRightWhenCompressed : this.LabelRightWhenCompressed;\r\n settingsCasted.LabelTopWhenCompressed = settingsCasted.LabelTopWhenCompressed != null ? settingsCasted.LabelTopWhenCompressed : this.LabelTopWhenCompressed;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {Vertical2DChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {Vertical2DChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: Vertical2DChartSettings): any {\r\n return new Vertical2DChartService(this.adapter).graphicate(<Vertical2DChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { VerticalChartSettings } from '../../models/settings/VerticalChartSettings';\r\nimport { VerticalChartService } from '../../services/VerticalChartService';\r\nimport { VerticalChartData } from '../../models/data/VerticalChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Barre\r\n */\r\n@Component({\r\n selector: 'es-vertical-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsVerticalChartComponent extends BaseChartComponent {\r\n \r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **VerticalChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: VerticalChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **VerticalChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<VerticalChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n @Input() ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n @Input() LabelWidth: number;\r\n\r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n @Input() LabelVerticalOrientationCutoffWidth: number;\r\n\r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelRightWhenCompressed: number;\r\n\r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelTopWhenCompressed: number;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {VerticalChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): VerticalChartSettings {\r\n return <VerticalChartSettings>(this.Settings ?? new VerticalChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {VerticalChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: VerticalChartSettings): void {\r\n settingsCasted.ColumnWidthPercentage = settingsCasted.ColumnWidthPercentage != null ? settingsCasted.ColumnWidthPercentage : this.ColumnWidthPercentage;\r\n settingsCasted.LabelWidth = settingsCasted.LabelWidth != null ? settingsCasted.LabelWidth : this.LabelWidth;\r\n settingsCasted.LabelVerticalOrientationCutoffWidth = settingsCasted.LabelVerticalOrientationCutoffWidth != null ? settingsCasted.LabelVerticalOrientationCutoffWidth : this.LabelVerticalOrientationCutoffWidth;\r\n settingsCasted.LabelRightWhenCompressed = settingsCasted.LabelRightWhenCompressed != null ? settingsCasted.LabelRightWhenCompressed : this.LabelRightWhenCompressed;\r\n settingsCasted.LabelTopWhenCompressed = settingsCasted.LabelTopWhenCompressed != null ? settingsCasted.LabelTopWhenCompressed : this.LabelTopWhenCompressed;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {VerticalChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {VerticalChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: VerticalChartSettings): any {\r\n return new VerticalChartService(this.adapter).graphicate(<VerticalChartData>this.Data, settingsCasted);\r\n }\r\n}","import { Component, Input, Inject, PLATFORM_ID, NgZone, ChangeDetectionStrategy, ElementRef } from '@angular/core';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\n\r\nimport { BaseAdapter } from '../../adapters/BaseAdapter';\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { BaseChartComponent } from '../base/base-chart.component';\r\nimport { ChartLoader } from \"../../models/core/ChartLoader\";\r\nimport { ChartDispatcher } from \"../../models/core/ChartDispatcher\";\r\n\r\nimport { VerticalStackedChartSettings } from '../../models/settings/VerticalStackedChartSettings';\r\nimport { VerticalStackedChartService } from '../../services/VerticalStackedChartService';\r\nimport { VerticalStackedChartData } from '../../models/data/VerticalStackedChartData';\r\nimport { PagedChartData } from '../../models/data/PagedChartData';\r\n\r\n/**\r\n * Componente specifico per la graficazione di un grafico a Barre in modalità Stacked (una serie sopra l'altra)\r\n */\r\n@Component({\r\n selector: 'es-vertical-stacked-chart',\r\n templateUrl: '../base/base-chart.component.html',\r\n styleUrls: ['../base/base-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EsVerticalStackedChartComponent extends BaseChartComponent {\r\n\r\n /**\r\n * Dati specifici per il grafico o di un tipo tramutabile al tipo **VerticalStackedChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() Data: VerticalStackedChartData | any;\r\n\r\n /**\r\n * Lista di Dati specifici per un grafico paginato o di cui ogni blocco dati è tramutabile al tipo **VerticalStackedChartData** col supporto del **BaseAdapter**\r\n */\r\n @Input() DataArray: PagedChartData<VerticalStackedChartData>[] | PagedChartData<any>[];\r\n\r\n /**\r\n * Indica la percentuale di cella che la colonna andrà a riempire. Un valore pari a 100 riempirà la cella completamente \r\n * e tutte le barre risulteranno appiccicate l'un l'altra\r\n */\r\n @Input() ColumnWidthPercentage: number;\r\n\r\n /**\r\n * Indica le dimensioni massime della label associata a un gruppo di barre\r\n */\r\n @Input() LabelWidth: number;\r\n \r\n /**\r\n * Indica la dimensione massima sotto la quale la label associata a un gruppo di barre si inclina cercando di occupare meno spazio\r\n */\r\n @Input() LabelVerticalOrientationCutoffWidth: number;\r\n \r\n /**\r\n * Indica un offset orizzontale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelRightWhenCompressed: number;\r\n \r\n /**\r\n * Indica un offset verticale da applicare alla label associata a un gruppo di barre qualora fosse compressa a causa della mancanza di spazio\r\n */\r\n @Input() LabelTopWhenCompressed: number;\r\n \r\n /**\r\n * @ignore\r\n */\r\n constructor(el: ElementRef, ChartLoader: ChartLoader, ChartDispatcher: ChartDispatcher, private adapter: BaseAdapter, zone: NgZone,\r\n @Inject(PLATFORM_ID) platformId: Object,\r\n @Inject(ESC_DEBUG_MODE) ESC_DEBUG_MODE: boolean,\r\n @Inject(ESC_ANIMATIONS) ESC_ANIMATIONS: boolean,\r\n @Inject(ESC_THEME) ESC_THEME: string,\r\n lc: LocalizationService) {\r\n super(el, platformId, zone, ChartLoader, ChartDispatcher, ESC_DEBUG_MODE, ESC_ANIMATIONS, lc.Locale, ESC_THEME);\r\n }\r\n\r\n /**\r\n * Ottiene le proprietà specifiche per questa tipologia di grafico per cui serve rigraficare\r\n */\r\n getSpecificPropertiesToCheck(): string[] {\r\n return [\"Data\", \"DataArray\"];\r\n }\r\n\r\n /**\r\n * Ottiene i Settings (Ereditati dalla classe base, quindi del tipo generico **BaseSettings**) castati al tipo specifico per questo grafico\r\n * \r\n * @returns {VerticalStackedChartSettings} Settings castati al tipo giusto\r\n */\r\n getCastedSettings(): VerticalStackedChartSettings {\r\n return <VerticalStackedChartSettings>(this.Settings ?? new VerticalStackedChartSettings());\r\n }\r\n\r\n /**\r\n * Integra i Settings base con tutti gli Input specifici di questo grafico, dando priorità ai Settings se definiti\r\n * \r\n * @param {VerticalStackedChartSettings} settingsCasted Settings castati al tipo giusto\r\n */\r\n fillSpecificSettings(settingsCasted: VerticalStackedChartSettings): void {\r\n settingsCasted.ColumnWidthPercentage = settingsCasted.ColumnWidthPercentage != null ? settingsCasted.ColumnWidthPercentage : this.ColumnWidthPercentage;\r\n settingsCasted.LabelWidth = settingsCasted.LabelWidth != null ? settingsCasted.LabelWidth : this.LabelWidth;\r\n settingsCasted.LabelVerticalOrientationCutoffWidth = settingsCasted.LabelVerticalOrientationCutoffWidth != null ? settingsCasted.LabelVerticalOrientationCutoffWidth : this.LabelVerticalOrientationCutoffWidth;\r\n settingsCasted.LabelRightWhenCompressed = settingsCasted.LabelRightWhenCompressed != null ? settingsCasted.LabelRightWhenCompressed : this.LabelRightWhenCompressed;\r\n settingsCasted.LabelTopWhenCompressed = settingsCasted.LabelTopWhenCompressed != null ? settingsCasted.LabelTopWhenCompressed : this.LabelTopWhenCompressed;\r\n }\r\n\r\n /**\r\n * Effettua il rendering di questo grafico in base ai Settings\r\n * \r\n * @param {VerticalStackedChartSettings} settingsCasted Impostazioni di graficazione\r\n * @returns {VerticalStackedChartService} La service utilizzata per il rendering nello stato subito successivo al rendering effettuato\r\n */\r\n graphicate(settingsCasted: VerticalStackedChartSettings): any {\r\n return new VerticalStackedChartService(this.adapter).graphicate(<VerticalStackedChartData>this.Data, settingsCasted);\r\n }\r\n}","import { LineChartData } from './LineChartData';\r\nimport { PieChartData } from './PieChartData';\r\nimport { Vertical2DChartData } from './Vertical2DChartData';\r\nimport { VerticalChartData } from './VerticalChartData';\r\nimport { VerticalStackedChartData } from './VerticalStackedChartData';\r\n\r\n/**\r\n * Classe che identifica i dati per un grafico generico paginato\r\n */\r\nexport class PagedChartData<T extends LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | VerticalStackedChartData | any>{\r\n \r\n /**\r\n * Costruttore\r\n * \r\n * @param {T} data Dati del grafico\r\n * @param {string} title Titolo del grafico\r\n * @param {Object} dataRetrieveDto Dto utilizzato per recuperare i dati di questo grafico\r\n * @param {Function} dataRetrieveFunction Funzione utilizzata per ottenere i dati di questo grafico\r\n */\r\n constructor(public data: T, public title: string, public dataRetrieveDto: any, public dataRetrieveFunction: Function) { }\r\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { EsChartsModuleConfig } from './models/EsChaartsModuleConfig';\r\nimport { BaseAdapter } from './adapters/BaseAdapter';\r\n\r\nimport { ESC_ANIMATIONS, ESC_THEME, ESC_DEBUG_MODE } from './tokens';\r\n\r\nimport { EsLineChartComponent } from \"./components/specializations/es-line-chart.component\";\r\nimport { EsAreaChartComponent } from \"./components/specializations/es-area-chart.component\";\r\nimport { EsPieChartComponent } from \"./components/specializations/es-pie-chart.component\";\r\nimport { EsVertical2DChartComponent } from \"./components/specializations/es-vertical-2d-chart.component\";\r\nimport { EsVerticalChartComponent } from \"./components/specializations/es-vertical-chart.component\";\r\nimport { EsVerticalStackedChartComponent } from \"./components/specializations/es-vertical-stacked-chart.component\";\r\nimport { PageChartSelector } from \"./components/chart-pager/chart-pager.component\";\r\nimport { EsChartComponent } from \"./components/specializations/es-chart.component\";\r\n\r\nimport { ChartLoader } from './models/core/ChartLoader';\r\nimport { ChartDispatcher } from './models/core/ChartDispatcher';\r\n\r\n/** Componenti esportati dal modulo */\r\nconst COMPONENTS = [\r\n EsChartComponent,\r\n EsLineChartComponent,\r\n EsPieChartComponent,\r\n EsVertical2DChartComponent,\r\n EsVerticalChartComponent,\r\n EsVerticalStackedChartComponent,\r\n PageChartSelector,\r\n EsAreaChartComponent\r\n]\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [...COMPONENTS],\r\n exports: [...COMPONENTS]\r\n})\r\nexport class EsChartsModule {\r\n\r\n static forRoot(config?: EsChartsModuleConfig): ModuleWithProviders<EsChartsModule> {\r\n return {\r\n ngModule: EsChartsModule,\r\n providers: [\r\n ChartLoader,\r\n ChartDispatcher,\r\n { provide: ESC_ANIMATIONS, useValue: config?.animations == null || config?.animations == undefined ? true : config?.animations },\r\n { provide: ESC_THEME, useValue: config?.theme || 'spiritedaway' },\r\n { provide: ESC_DEBUG_MODE, useValue: config?.debugMode || false },\r\n { provide: BaseAdapter, useClass: config?.adapter || BaseAdapter }\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of es-charts\r\n */\r\n\r\nexport * from './lib/adapters/BaseAdapter';\r\nexport * from './lib/adapters/IBaseAdapter';\r\nexport * from './lib/models/data/LineChartData';\r\nexport * from './lib/models/data/PieChartData';\r\nexport * from './lib/models/data/AreaChartData';\r\nexport * from './lib/models/data/Vertical2DChartData';\r\nexport * from './lib/models/data/VerticalChartData';\r\nexport * from './lib/models/data/VerticalStackedChartData';\r\nexport * from './lib/models/settings/AreaChartSettings';\r\nexport * from './lib/models/settings/LineChartSettings';\r\nexport * from './lib/models/settings/PieChartSettings';\r\nexport * from './lib/models/settings/Vertical2DChartSettings';\r\nexport * from './lib/models/settings/VerticalChartSettings';\r\nexport * from './lib/models/settings/VerticalStackedChartSettings';\r\nexport * from './lib/models/settings/base/BaseSettings';\r\nexport * from './lib/models/settings/base/BaseInterval';\r\nexport * from './lib/models/settings/base/LegendPad';\r\nexport * from './lib/models/data/base/Limit';\r\nexport * from './lib/models/data/base/DateValue';\r\nexport * from './lib/models/data/base/KeyValue';\r\nexport * from './lib/models/data/base/KeyValueColor';\r\nexport * from './lib/models/data/base/LineSerie';\r\nexport * from './lib/components/chart-pager/chart-pager.component';\r\nexport * from './lib/components/base/base-chart.component';\r\nexport * from './lib/components/specializations/es-chart.component';\r\nexport * from './lib/components/specializations/es-area-chart.component';\r\nexport * from './lib/components/specializations/es-line-chart.component';\r\nexport * from './lib/components/specializations/es-pie-chart.component';\r\nexport * from './lib/components/specializations/es-vertical-2d-chart.component';\r\nexport * from './lib/components/specializations/es-vertical-chart.component';\r\nexport * from './lib/components/specializations/es-vertical-stacked-chart.component';\r\nexport * from './lib/models/core/ChartThemes';\r\nexport * from './lib/models/data/PagedChartData';\r\nexport * from './lib/es-charts.module';\r\nexport * from './lib/tokens';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i5","i6","i7.PageChartSelector","i6.PageChartSelector"],"mappings":"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"}