UNPKG

@engie-group/ngx-gem-spaas

Version:

This library contains services, components, images and styles to provide a unified look and way-of-working throughout GEM SPaaS.

1 lines 49.3 kB
{"version":3,"file":"engie-group-ngx-gem-spaas-am5.mjs","sources":["../../../projects/ngx-gem-spaas/am5/src/_models/am5.model.ts","../../../projects/ngx-gem-spaas/am5/src/_services/am5.service.ts","../../../projects/ngx-gem-spaas/am5/src/_services/am5-pie.service.ts","../../../projects/ngx-gem-spaas/am5/src/public-api.ts","../../../projects/ngx-gem-spaas/am5/src/engie-group-ngx-gem-spaas-am5.ts"],"sourcesContent":["import {Root} from \"@amcharts/amcharts5\";\r\nimport {PieChart} from \"@amcharts/amcharts5/percent\";\r\nimport {XYChart} from \"@amcharts/amcharts5/xy\";\r\nimport {DateTime} from \"luxon\";\r\nimport {UtilsService} from '@engie-group/ngx-gem-spaas';\r\n\r\nexport const DEFAULT_DATE_FORMAT = 'yyyy-MM-ddTHH:mm:ssZ';\r\n\r\nexport interface Am5XyContainer {\r\n root: Root;\r\n chart: XYChart;\r\n}\r\n\r\nexport interface Am5PieContainer {\r\n root: Root;\r\n chart: PieChart;\r\n}\r\n\r\nexport class Am5RootConfig {\r\n legendWithoutValueLabels?: boolean;\r\n tooltipContainerBounds?: {\r\n top: number,\r\n right: number,\r\n bottom: number,\r\n left: number,\r\n };\r\n withLegend?: boolean;\r\n\r\n constructor(\r\n config: Am5RootConfig,\r\n ) {\r\n this.legendWithoutValueLabels = UtilsService.hasProp(config, 'legendWithoutValueLabels') ? config.legendWithoutValueLabels : true;\r\n if (config.tooltipContainerBounds) {\r\n this.tooltipContainerBounds = {\r\n top: config.tooltipContainerBounds.top || 0,\r\n right: config.tooltipContainerBounds.right || 0,\r\n bottom: config.tooltipContainerBounds.bottom || 0,\r\n left: config.tooltipContainerBounds.left || 0,\r\n }\r\n }\r\n this.withLegend = UtilsService.hasProp(config, 'withLegend') ? config.withLegend : true;\r\n }\r\n\r\n}\r\n\r\nexport class Am5AxisConfig {\r\n title?: string;\r\n withGrid?: boolean;\r\n withLabels?: boolean;\r\n withTooltip?: boolean;\r\n xOrY: 'x' | 'y';\r\n\r\n constructor(\r\n type: 'date' | 'category' | 'value',\r\n config: Am5AxisConfig\r\n ) {\r\n this.title = config.title || '';\r\n this.withGrid = UtilsService.hasProp(config, 'withGrid') ? config.withGrid : type === 'value';\r\n this.withLabels = UtilsService.hasProp(config, 'withLabels') ? config.withLabels : true;\r\n this.withTooltip = UtilsService.hasProp(config, 'withTooltip') ? config.withTooltip : type === 'date';\r\n this.xOrY = config.xOrY;\r\n }\r\n\r\n}\r\n\r\nexport class Am5PieSeriesConfig {\r\n name?: string;\r\n tooltipText?: string;\r\n xValue: string;\r\n yValue: string;\r\n withTooltip?: boolean;\r\n\r\n constructor(config: Am5PieSeriesConfig) {\r\n this.name = config.name || config.xValue || '';\r\n this.tooltipText = config.tooltipText || '';\r\n this.xValue = config.xValue;\r\n this.yValue = config.yValue;\r\n this.withTooltip = UtilsService.hasProp(config, 'withTooltip') ? config.withTooltip : true;\r\n }\r\n\r\n}\r\n\r\nexport class Am5SeriesConfig extends Am5PieSeriesConfig {\r\n color?: string;\r\n dateFormat?: string;\r\n stacked?: boolean;\r\n strokeWidth?: number;\r\n type: 'line' | 'bar' | 'stepline';\r\n yOpenValue?: string;\r\n\r\n constructor(config: Am5SeriesConfig) {\r\n super(config);\r\n this.color = config.color || '';\r\n this.dateFormat = config.dateFormat || '';\r\n this.stacked = UtilsService.hasProp(config, 'stacked') ? config.stacked : false;\r\n this.strokeWidth = config.strokeWidth || 2;\r\n this.type = config.type;\r\n this.yOpenValue = config.yOpenValue || '';\r\n }\r\n\r\n}\r\n\r\nexport class Am5DateRangeConfig {\r\n beginDt: DateTime;\r\n endDt: DateTime;\r\n clearRanges?: boolean;\r\n strokeColor?: string;\r\n strokeDasharray?: number | number[];\r\n strokeWidth?: number;\r\n fillColor?: string;\r\n fillOpacity?: number;\r\n\r\n constructor(\r\n config: Am5DateRangeConfig\r\n ) {\r\n this.beginDt = config.beginDt;\r\n this.endDt = config.endDt;\r\n this.clearRanges = UtilsService.hasProp(config, 'clearRanges') ? config.clearRanges : true;\r\n this.strokeColor = config.strokeColor || '';\r\n this.strokeDasharray = config.strokeDasharray || 0;\r\n this.strokeWidth = UtilsService.hasProp(config, 'strokeWidth') ? config.strokeWidth : 1;\r\n this.fillColor = config.fillColor || '';\r\n this.fillOpacity = UtilsService.hasProp(config, 'fillOpacity') ? config.fillOpacity : 0.05;\r\n }\r\n\r\n}\r\n","import * as am5 from '@amcharts/amcharts5';\r\nimport {DataItem, Label, Legend, Root, Tooltip} from '@amcharts/amcharts5';\r\nimport * as am5xy from '@amcharts/amcharts5/xy';\r\nimport {\r\n AxisRenderer,\r\n AxisRendererX,\r\n AxisRendererY,\r\n CategoryAxis,\r\n ColumnSeries,\r\n DateAxis,\r\n IDateAxisDataItem,\r\n LineSeries,\r\n StepLineSeries,\r\n ValueAxis\r\n} from '@amcharts/amcharts5/xy';\r\nimport {Injectable, OnDestroy} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {FONT_FAMILY, ThemeModel, ThemeService, UtilsService} from '@engie-group/ngx-gem-spaas';\r\nimport {\r\n Am5AxisConfig,\r\n Am5DateRangeConfig,\r\n Am5PieContainer,\r\n Am5RootConfig,\r\n Am5SeriesConfig,\r\n Am5XyContainer\r\n} from \"../_models/am5.model\";\r\n\r\nam5.addLicense('AM5C-5327-9399-0224-1489');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Am5Service implements OnDestroy {\r\n\r\n private theme: ThemeModel | null = null;\r\n private onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n constructor(\r\n private themeService: ThemeService,\r\n ) {\r\n this.onNewTheme();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.onDestroy$.next();\r\n this.onDestroy$.complete();\r\n }\r\n\r\n private onNewTheme(): void {\r\n this.themeService.onNewActiveTheme()\r\n .pipe(\r\n takeUntil(this.onDestroy$)\r\n )\r\n .subscribe((theme: ThemeModel) => {\r\n this.theme = theme;\r\n }\r\n );\r\n }\r\n\r\n getTheme(): ThemeModel | null {\r\n return this.theme;\r\n }\r\n\r\n // ********************************************************************************************************\r\n // CHART CREATION/DESTRUCTION\r\n // ********************************************************************************************************\r\n\r\n // create xy chart\r\n createXyChart(\r\n chartDiv: string | HTMLElement,\r\n config?: Am5RootConfig,\r\n ): Am5XyContainer {\r\n\r\n const themeColor: string = this.theme?.getRgb('color') as string;\r\n const rootConfig = new Am5RootConfig(config || {});\r\n\r\n const root = am5.Root.new(\r\n chartDiv,\r\n {\r\n tooltipContainerBounds: rootConfig.tooltipContainerBounds,\r\n },\r\n );\r\n let chart = root.container.children.push(\r\n am5xy.XYChart.new(root, {\r\n layout: root.verticalLayout,\r\n // paddingBottom: 5,\r\n paddingLeft: 18,\r\n paddingRight: 4,\r\n })\r\n );\r\n\r\n // zoom-out button\r\n const bg = am5.RoundedRectangle.new(root, {\r\n cornerRadiusTL: 4,\r\n cornerRadiusTR: 4,\r\n cornerRadiusBR: 4,\r\n cornerRadiusBL: 4,\r\n fill: am5.color(themeColor),\r\n strokeWidth: 0,\r\n });\r\n bg.states.create('hover', {}).setAll({\r\n fill: am5.color(this.theme?.getRgb('primary') as string),\r\n })\r\n chart.zoomOutButton.setAll({\r\n background: bg,\r\n icon: am5.Rectangle.new(root, {\r\n fill: am5.color(this.theme?.getRgb('bg') as string),\r\n height: 2,\r\n width: 12,\r\n }),\r\n paddingTop: 7,\r\n paddingRight: 8,\r\n paddingBottom: 7,\r\n paddingLeft: 8,\r\n dx: 10,\r\n dy: -18,\r\n });\r\n\r\n // cursor\r\n const cursor = chart.set('cursor', am5xy.XYCursor.new(root, {\r\n behavior: 'zoomX'\r\n }));\r\n cursor.lineX.setAll({\r\n // fill: am5.color(this.theme?.getRgb('color') as string),\r\n stroke: am5.color(themeColor),\r\n strokeWidth: 1,\r\n strokeDasharray: [4, 4]\r\n });\r\n\r\n cursor.lineY.setAll({\r\n visible: false\r\n });\r\n\r\n this.createLegend(\r\n {root: root, chart: chart},\r\n rootConfig.withLegend,\r\n rootConfig.legendWithoutValueLabels,\r\n );\r\n\r\n return {root: root, chart: chart};\r\n\r\n }\r\n\r\n createLegend(\r\n am5Container: Am5XyContainer | Am5PieContainer,\r\n withLegend: boolean | undefined,\r\n legendWithoutValueLabels: boolean | undefined,\r\n ): void {\r\n if (withLegend) {\r\n const legend = am5Container.chart.children.unshift(\r\n am5.Legend.new(am5Container.root, {\r\n centerX: am5.percent(50),\r\n x: am5.percent(50),\r\n layout: am5Container.root.gridLayout,\r\n }));\r\n legend.labels.template.setAll({\r\n fill: am5.color(this.theme?.getRgb('color') as string),\r\n fontFamily: FONT_FAMILY,\r\n fontSize: '0.85em',\r\n })\r\n legend.valueLabels.template.setAll({\r\n fill: am5.color(this.theme?.getRgb('color') as string),\r\n fontFamily: FONT_FAMILY,\r\n fontSize: '0.85em',\r\n })\r\n legend.markers.template.setAll({\r\n height: 10,\r\n width: 10,\r\n })\r\n legend.valueLabels.template.set('forceHidden', legendWithoutValueLabels);\r\n }\r\n }\r\n\r\n destroyChart(\r\n am5Container: Am5XyContainer | Am5PieContainer | undefined,\r\n ): void {\r\n if (am5Container?.root) {\r\n am5Container.root.dispose();\r\n }\r\n }\r\n\r\n // ********************************************************************************************************\r\n // AXES\r\n // ********************************************************************************************************\r\n\r\n addCategoryAxis(\r\n am5XyContainer: Am5XyContainer,\r\n categoryField: string,\r\n config: Am5AxisConfig,\r\n ): CategoryAxis<AxisRenderer> {\r\n\r\n const axisConfig = new Am5AxisConfig('category', config);\r\n const axes = axisConfig.xOrY === 'x' ? am5XyContainer.chart.xAxes : am5XyContainer.chart.yAxes;\r\n const renderer = axisConfig.xOrY === 'x' ? am5xy.AxisRendererX.new(am5XyContainer.root, {minGridDistance: 1}) : am5xy.AxisRendererY.new(am5XyContainer.root, {});\r\n const axis = axes.push(\r\n am5xy.CategoryAxis.new(am5XyContainer.root, {\r\n categoryField: categoryField,\r\n renderer: renderer,\r\n tooltip: this.createAxisTooltip(\r\n am5XyContainer.root,\r\n axisConfig.withTooltip,\r\n )\r\n })\r\n );\r\n\r\n this.setGenericAxisProps(\r\n renderer,\r\n axisConfig.withGrid,\r\n axisConfig.withLabels,\r\n );\r\n this.setAxisTitle(\r\n am5XyContainer.root,\r\n axis,\r\n axisConfig.xOrY,\r\n axisConfig.title,\r\n )\r\n\r\n return axis;\r\n\r\n }\r\n\r\n addDateAxis(\r\n am5XyContainer: Am5XyContainer,\r\n config: Am5AxisConfig,\r\n baseInterval: am5.time.ITimeInterval = {timeUnit: 'minute', count: 15},\r\n ): DateAxis<AxisRenderer> {\r\n\r\n const axisConfig = new Am5AxisConfig('date', config);\r\n const axes = axisConfig.xOrY === 'x' ? am5XyContainer.chart.xAxes : am5XyContainer.chart.yAxes;\r\n const renderer = axisConfig.xOrY === 'x' ? am5xy.AxisRendererX.new(am5XyContainer.root, {minGridDistance: 40}) : am5xy.AxisRendererY.new(am5XyContainer.root, {});\r\n const axis = axes.push(\r\n am5xy.DateAxis.new(am5XyContainer.root, {\r\n baseInterval: baseInterval,\r\n renderer: renderer,\r\n tooltip: this.createAxisTooltip(\r\n am5XyContainer.root,\r\n axisConfig.withTooltip,\r\n ),\r\n tooltipDateFormat: 'HH:mm',\r\n })\r\n );\r\n this.setGenericAxisProps(\r\n renderer,\r\n axisConfig.withGrid,\r\n axisConfig.withLabels,\r\n );\r\n this.setAxisTitle(\r\n am5XyContainer.root,\r\n axis,\r\n axisConfig.xOrY,\r\n axisConfig.title,\r\n )\r\n\r\n return axis;\r\n\r\n }\r\n\r\n addValueAxis(\r\n am5XyContainer: Am5XyContainer,\r\n config: Am5AxisConfig,\r\n ): ValueAxis<AxisRenderer> {\r\n\r\n const axisConfig = new Am5AxisConfig('value', config);\r\n const axes = axisConfig.xOrY === 'x' ? am5XyContainer.chart.xAxes : am5XyContainer.chart.yAxes;\r\n const renderer = axisConfig.xOrY === 'x' ? am5xy.AxisRendererX.new(am5XyContainer.root, {}) : am5xy.AxisRendererY.new(am5XyContainer.root, {});\r\n\r\n const axis = axes.push(\r\n am5xy.ValueAxis.new(am5XyContainer.root, {\r\n renderer: renderer,\r\n tooltip: this.createAxisTooltip(\r\n am5XyContainer.root,\r\n axisConfig.withTooltip,\r\n )\r\n })\r\n );\r\n\r\n this.setGenericAxisProps(\r\n renderer,\r\n axisConfig.withGrid,\r\n axisConfig.withLabels,\r\n );\r\n this.setAxisTitle(\r\n am5XyContainer.root,\r\n axis,\r\n axisConfig.xOrY,\r\n axisConfig.title,\r\n )\r\n\r\n return axis;\r\n }\r\n\r\n private createAxisTooltip(\r\n root: Root,\r\n withToolTip: boolean | undefined,\r\n ): Tooltip | undefined {\r\n if (!withToolTip) {\r\n return undefined;\r\n }\r\n const tooltip = am5.Tooltip.new(root, {\r\n background: am5.Rectangle.new(root, {\r\n fill: am5.color(this.theme?.getRgb('primary') as string),\r\n strokeWidth: 0,\r\n }),\r\n paddingBottom: 2,\r\n paddingTop: 2,\r\n });\r\n tooltip.label.set('fontFamily', FONT_FAMILY);\r\n return tooltip;\r\n }\r\n\r\n private setGenericAxisProps(\r\n renderer: AxisRendererX | AxisRendererY,\r\n withGrid: boolean | undefined,\r\n withLabels: boolean | undefined,\r\n ): void {\r\n // grid\r\n renderer.grid.template.setAll({\r\n forceHidden: !withGrid,\r\n location: 1,\r\n stroke: am5.color(this.theme?.getRgb('color') as string),\r\n });\r\n // labels\r\n renderer.labels.template.setAll({\r\n forceHidden: !withLabels,\r\n fontFamily: FONT_FAMILY,\r\n fontSize: '0.7em',\r\n fill: am5.color(this.theme?.getRgb('color') as string),\r\n // minWidth: 10, // impacts space (width) for y-axis labels\r\n paddingTop: 7,\r\n });\r\n }\r\n\r\n private setAxisTitle(\r\n root: Root,\r\n axis: DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>,\r\n xOrY: 'x' | 'y',\r\n title: string = '',\r\n ): void {\r\n if (title) {\r\n if (xOrY === 'x') {\r\n axis.children.push(\r\n am5.Label.new(root, {\r\n fill: am5.color(this.theme?.getRgb('color') as string),\r\n fontFamily: FONT_FAMILY,\r\n fontWeight: '500',\r\n centerX: am5.p50,\r\n text: title,\r\n x: am5.p50,\r\n })\r\n );\r\n } else {\r\n axis.children.unshift(\r\n am5.Label.new(root, {\r\n fill: am5.color(this.theme?.getRgb('color') as string),\r\n fontFamily: FONT_FAMILY,\r\n fontWeight: '500',\r\n centerX: am5.p50,\r\n rotation: -90,\r\n text: title,\r\n y: am5.p50,\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n updateAxisTitle(\r\n axis: CategoryAxis<AxisRenderer> | DateAxis<AxisRenderer> | ValueAxis<AxisRenderer>,\r\n newTitle: string,\r\n ): void {\r\n // search for label (title)\r\n let title: Label | undefined;\r\n for (const child of axis.children) {\r\n if (child instanceof Label) {\r\n title = child;\r\n break;\r\n }\r\n }\r\n if (title) {\r\n title.set('text', newTitle);\r\n }\r\n }\r\n\r\n // ********************************************************************************************************\r\n // SERIES\r\n // ********************************************************************************************************\r\n\r\n addSeries(\r\n am5XyContainer: Am5XyContainer,\r\n xAxis: DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>,\r\n yAxis: DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>,\r\n config: Am5SeriesConfig,\r\n ): LineSeries | ColumnSeries | StepLineSeries {\r\n\r\n const seriesConfig = new Am5SeriesConfig(config);\r\n\r\n const seriesTooltip = am5.Tooltip.new(am5XyContainer.root, {\r\n autoTextColor: !seriesConfig.color,\r\n getFillFromSprite: !seriesConfig.color,\r\n labelText: seriesConfig.tooltipText || '[bold]{name}:[/] {valueY}',\r\n paddingTop: 4,\r\n paddingBottom: 4,\r\n });\r\n seriesTooltip.label.set('fontFamily', FONT_FAMILY);\r\n seriesTooltip.get('background')?.setAll({\r\n stroke: am5.color(this.theme?.getRgb('bg') as string), // the border of the tooltip\r\n });\r\n\r\n const commonSeriesSettings: am5xy.IXYSeriesSettings = {\r\n name: seriesConfig.name,\r\n stacked: seriesConfig.stacked,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n tooltip: seriesConfig.withTooltip ? seriesTooltip : undefined,\r\n };\r\n\r\n // special attributes for category series\r\n const hasCategoryAxis = xAxis instanceof CategoryAxis ? 'x' : yAxis instanceof CategoryAxis ? 'y' : '';\r\n if (hasCategoryAxis) {\r\n if (hasCategoryAxis === 'x') {\r\n // category is on x-axis\r\n commonSeriesSettings.categoryXField = seriesConfig.xValue;\r\n commonSeriesSettings.valueYField = seriesConfig.yValue;\r\n } else {\r\n // category is on y-axis\r\n commonSeriesSettings.valueXField = seriesConfig.xValue;\r\n commonSeriesSettings.categoryYField = seriesConfig.yValue;\r\n }\r\n } else {\r\n // normal series (not category)\r\n commonSeriesSettings.valueXField = seriesConfig.xValue;\r\n commonSeriesSettings.valueYField = seriesConfig.yValue;\r\n commonSeriesSettings.openValueYField = seriesConfig.yOpenValue;\r\n }\r\n\r\n // if color is provided, set it\r\n if (seriesConfig.color) {\r\n // first the strokes and fills of the series itself\r\n commonSeriesSettings.stroke = am5.color(seriesConfig.color);\r\n if (\r\n seriesConfig.type === 'bar' || seriesConfig.yOpenValue\r\n ) {\r\n commonSeriesSettings.fill = am5.color(seriesConfig.color);\r\n }\r\n // then of the tooltip\r\n seriesTooltip.get('background')?.setAll({\r\n fill: am5.color(seriesConfig.color),\r\n });\r\n seriesTooltip.label.setAll({\r\n fill: am5.Color.alternative(\r\n am5.color(seriesConfig.color),\r\n am5.color('#f4f4f4'),\r\n am5.color('#121212'),\r\n ),\r\n });\r\n }\r\n\r\n let series: am5xy.LineSeries | am5xy.ColumnSeries | am5xy.StepLineSeries;\r\n\r\n switch (seriesConfig.type) {\r\n case 'line':\r\n series = am5xy.LineSeries.new(am5XyContainer.root, commonSeriesSettings);\r\n series.set('connect', false);\r\n this.setSeriesStrokeAndFill(\r\n seriesConfig,\r\n series,\r\n seriesTooltip,\r\n );\r\n break;\r\n case 'bar':\r\n series = am5xy.ColumnSeries.new(am5XyContainer.root, commonSeriesSettings);\r\n series.columns.template.setAll({\r\n fillOpacity: 0.4,\r\n strokeWidth: 1,\r\n width: am5.percent(80),\r\n });\r\n break;\r\n case 'stepline':\r\n series = am5xy.StepLineSeries.new(am5XyContainer.root, commonSeriesSettings);\r\n this.setSeriesStrokeAndFill(\r\n seriesConfig,\r\n series,\r\n seriesTooltip,\r\n );\r\n break;\r\n }\r\n\r\n // if date series, add a data processor\r\n if (seriesConfig.dateFormat) {\r\n const dateOnX = xAxis instanceof am5xy.DateAxis;\r\n series.data.processor = am5.DataProcessor.new(\r\n am5XyContainer.root,\r\n {\r\n numericFields: [dateOnX ? seriesConfig.yValue : seriesConfig.xValue],\r\n dateFields: [dateOnX ? seriesConfig.xValue : seriesConfig.yValue],\r\n dateFormat: seriesConfig.dateFormat,\r\n }\r\n );\r\n }\r\n\r\n am5XyContainer.chart.series.push(series);\r\n return series;\r\n\r\n }\r\n\r\n private setSeriesStrokeAndFill(\r\n seriesConfig: Am5SeriesConfig,\r\n series: am5xy.LineSeries | am5xy.StepLineSeries,\r\n seriesTooltip: am5.Tooltip,\r\n ): void {\r\n if (seriesConfig.yOpenValue) {\r\n // area series\r\n series.fills.template.setAll({\r\n fillOpacity: 0.2,\r\n visible: true\r\n });\r\n series.strokes.template.setAll({\r\n visible: false,\r\n });\r\n seriesTooltip.set(\r\n 'labelText',\r\n seriesConfig.tooltipText || '[bold]{name}:[/] {valueY} to {openValueY}',\r\n )\r\n } else {\r\n // normal line series\r\n series.strokes.template.setAll({\r\n strokeWidth: seriesConfig.strokeWidth,\r\n });\r\n }\r\n }\r\n\r\n // ********************************************************************************************************\r\n // DATA & RANGES\r\n // ********************************************************************************************************\r\n\r\n setDataForAll(\r\n am5XyContainer: Am5XyContainer,\r\n data: object[],\r\n axes: (DateAxis<AxisRenderer> | ValueAxis<AxisRenderer> | CategoryAxis<AxisRenderer>)[] = [],\r\n ): void {\r\n // always take a copy in case there are data-processors (will mutate data)\r\n const chartData = UtilsService.copy(data);\r\n for (const series of am5XyContainer.chart.series) {\r\n series.data.setAll(chartData);\r\n }\r\n for (const axis of axes) {\r\n axis.data.setAll(chartData);\r\n }\r\n this.setDataForLegend(am5XyContainer);\r\n }\r\n\r\n setDataForSeries(\r\n series: LineSeries | StepLineSeries | ColumnSeries,\r\n data: object[],\r\n ): void {\r\n // always take a copy in case there are data-processors (will mutate data)\r\n const chartData = UtilsService.copy(data);\r\n series.data.setAll(chartData);\r\n }\r\n\r\n setDataForLegend(\r\n am5XyContainer: Am5XyContainer,\r\n ): void {\r\n // search for legend\r\n const legend = this.getLegend(am5XyContainer);\r\n if (legend) {\r\n legend.data.setAll(am5XyContainer.chart.series.values);\r\n }\r\n }\r\n\r\n getLegend(\r\n am5XyContainer: Am5XyContainer,\r\n ): Legend | undefined {\r\n // search for legend\r\n let legend: Legend | undefined;\r\n for (const child of am5XyContainer.chart.children) {\r\n if (child instanceof Legend) {\r\n legend = child;\r\n break;\r\n }\r\n }\r\n return legend;\r\n }\r\n\r\n addDateRange(\r\n dateAxis: DateAxis<AxisRenderer>,\r\n config: Am5DateRangeConfig,\r\n ): DataItem<IDateAxisDataItem> {\r\n\r\n const rangeConfig = new Am5DateRangeConfig(config);\r\n\r\n if (rangeConfig.clearRanges) {\r\n dateAxis.axisRanges.clear();\r\n }\r\n const dataItem = dateAxis.makeDataItem({\r\n value: rangeConfig.beginDt.toJSDate().getTime(),\r\n endValue: rangeConfig.endDt.toJSDate().getTime(),\r\n });\r\n const range = dateAxis.createAxisRange(dataItem);\r\n const defaultColor = this.theme?.getRgb('color', 0.6) || '';\r\n range.get('axisFill')?.setAll({\r\n fillOpacity: rangeConfig.fillOpacity,\r\n fill: am5.color(rangeConfig.fillColor || defaultColor),\r\n stroke: am5.color(rangeConfig.strokeColor || defaultColor),\r\n strokeOpacity: 1,\r\n strokeDasharray: rangeConfig.strokeDasharray,\r\n strokeWidth: rangeConfig.strokeWidth,\r\n visible: true\r\n });\r\n\r\n return range;\r\n\r\n }\r\n\r\n}\r\n","import * as am5 from '@amcharts/amcharts5';\r\nimport {Legend} from '@amcharts/amcharts5';\r\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\r\nimport {PieSeries} from \"@amcharts/amcharts5/percent\";\r\nimport {Injectable, OnDestroy} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {ThemeModel, FONT_FAMILY} from '@engie-group/ngx-gem-spaas';\r\nimport {Am5PieContainer, Am5PieSeriesConfig, Am5RootConfig} from \"../_models/am5.model\";\r\nimport {Am5Service} from \"./am5.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Am5PieService implements OnDestroy {\r\n\r\n private onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n constructor(\r\n private am5Service: Am5Service,\r\n ) {\r\n }\r\n\r\n ngOnDestroy() {\r\n this.onDestroy$.next();\r\n this.onDestroy$.complete();\r\n }\r\n\r\n // ********************************************************************************************************\r\n // CHART CREATION/DESTRUCTION\r\n // ********************************************************************************************************\r\n\r\n // create xy chart\r\n createPieChart(\r\n chartDiv: string | HTMLElement,\r\n config?: Am5RootConfig,\r\n innerRadiusPercent = 0,\r\n ): Am5PieContainer {\r\n\r\n const rootConfig = new Am5RootConfig(config || {});\r\n\r\n const root = am5.Root.new(\r\n chartDiv,\r\n {\r\n tooltipContainerBounds: rootConfig.tooltipContainerBounds,\r\n },\r\n );\r\n let chart = root.container.children.push(\r\n am5percent.PieChart.new(root, {\r\n innerRadius: innerRadiusPercent ? am5.percent(innerRadiusPercent) : 0,\r\n layout: root.verticalLayout,\r\n })\r\n );\r\n\r\n this.am5Service.createLegend(\r\n {root: root, chart: chart},\r\n rootConfig.withLegend,\r\n rootConfig.legendWithoutValueLabels,\r\n );\r\n\r\n return {root: root, chart: chart};\r\n\r\n }\r\n\r\n // ********************************************************************************************************\r\n // SERIES\r\n // ********************************************************************************************************\r\n\r\n addSeries(\r\n am5PieContainer: Am5PieContainer,\r\n config: Am5PieSeriesConfig,\r\n withLabels: boolean = true,\r\n withBorders: boolean = true,\r\n ): PieSeries {\r\n\r\n const theme: ThemeModel | null = this.am5Service.getTheme();\r\n const seriesConfig = new Am5PieSeriesConfig(config);\r\n\r\n const commonSeriesSettings: am5percent.IPieSeriesSettings = {\r\n name: seriesConfig.name,\r\n categoryField: seriesConfig.xValue,\r\n valueField: seriesConfig.yValue,\r\n };\r\n\r\n const series: am5percent.PieSeries = am5percent.PieSeries.new(am5PieContainer.root, commonSeriesSettings);\r\n\r\n // tooltip\r\n if (seriesConfig.withTooltip) {\r\n const seriesTooltip = am5.Tooltip.new(am5PieContainer.root, {\r\n labelText: seriesConfig.tooltipText || '[bold]{category}:[/] {value}',\r\n paddingTop: 4,\r\n paddingBottom: 4,\r\n });\r\n seriesTooltip.label.set('fontFamily', FONT_FAMILY);\r\n seriesTooltip.get('background')?.setAll({\r\n stroke: am5.color(theme?.getRgb('bg') as string), // the border of the tooltip\r\n });\r\n\r\n series.slices.template.set('tooltip', seriesTooltip);\r\n } else {\r\n series.slices.template.set('tooltipText', '');\r\n }\r\n\r\n // configure labels and ticks\r\n series.labels.template.setAll({\r\n fill: am5.color(theme?.getRgb('color') as string),\r\n fontFamily: FONT_FAMILY,\r\n visible: withLabels,\r\n });\r\n series.ticks.template.setAll({\r\n stroke: am5.color(theme?.getRgb('color') as string),\r\n strokeWidth: 2,\r\n visible: withLabels,\r\n });\r\n\r\n // and borders if needed\r\n if (withBorders) {\r\n series.slices.template.setAll({\r\n stroke: am5.color(theme?.getRgb('bg') as string),\r\n strokeWidth: 2,\r\n })\r\n }\r\n\r\n am5PieContainer.chart.series.push(series);\r\n return series;\r\n\r\n }\r\n\r\n // ********************************************************************************************************\r\n // DATA & RANGES\r\n // ********************************************************************************************************\r\n\r\n setData(\r\n am5PieContainer: Am5PieContainer,\r\n data: object[],\r\n ): void {\r\n for (const series of am5PieContainer.chart.series) {\r\n series.data.setAll(data);\r\n }\r\n this.setDataForLegend(am5PieContainer);\r\n }\r\n\r\n setDataForLegend(\r\n am5Container: Am5PieContainer,\r\n ): void {\r\n // search for legend\r\n let legend: Legend | undefined;\r\n for (const child of am5Container.chart.children) {\r\n if (child instanceof Legend) {\r\n legend = child;\r\n break;\r\n }\r\n }\r\n if (legend) {\r\n const series = am5Container.chart.series.getIndex(0);\r\n if (series) {\r\n legend.data.setAll(series.dataItems);\r\n }\r\n }\r\n }\r\n\r\n}\r\n","// SERVICES\r\nexport * from './_services/am5.service';\r\nexport * from './_services/am5-pie.service';\r\n\r\n// MODELS AND CONSTANTS\r\nexport * from './_models/am5.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Am5Service"],"mappings":"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"}