{"version":3,"file":"asoftwareworld-charts-generic-chart.mjs","sources":["../../src/app/component/generic-chart/enum/chart-type.enum.ts","../../src/app/component/generic-chart/generic-chart.ts","../../src/app/component/generic-chart/generic-chart.html","../../src/app/component/generic-chart/generic-chart.module.ts","../../src/app/component/generic-chart/public_api.ts","../../src/app/component/generic-chart/asoftwareworld-charts-generic-chart.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nexport enum AswChartTypeEnum {\r\n    Line = 'line',\r\n    Column = 'column',\r\n    Bar = 'bar',\r\n    Sankey = 'sankey'\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { CurrencyPipe } from '@angular/common';\r\nimport {\r\n    AfterViewInit,\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    HostListener,\r\n    Input,\r\n    OnChanges,\r\n    Output,\r\n    ViewChild\r\n} from '@angular/core';\r\nimport {\r\n    AswChartConstants,\r\n    AswCurrencyPipe,\r\n    ChartLegendTypeEnum,\r\n    ChartPointerEvent,\r\n    CurrencyCodeEnum,\r\n    GridOptionsEnum,\r\n    LegendLayoutEnum,\r\n    LegendPositionEnum,\r\n} from '@asoftwareworld/charts/core';\r\nimport { ObjectUtils } from '@asoftwareworld/charts/utils';\r\nimport * as Highcharts from 'highcharts';\r\nimport {\r\n    AlignValue,\r\n    Options,\r\n    PointClickEventObject,\r\n    PointOptionsObject,\r\n    Point,\r\n    SeriesPieOptions,\r\n    VerticalAlignValue\r\n} from 'highcharts';\r\nimport { AswChartTypeEnum } from './enum/chart-type.enum';\r\nimport more from 'highcharts/highcharts-more';\r\nmore(Highcharts);\r\n\r\n@Component({\r\n    selector: 'asw-generic-chart',\r\n    templateUrl: './generic-chart.html',\r\n})\r\nexport class AswGenericChart implements OnChanges, AfterViewInit {\r\n    private cloneConfiguration!: Options;\r\n    public deviceSize: GridOptionsEnum = GridOptionsEnum.Large;\r\n    private viewInitialized = false;\r\n    @Input() chartType: AswChartTypeEnum = AswChartTypeEnum.Line;\r\n    @Input() config!: Options;\r\n    @Input() isLegendSort = true;\r\n    @Input() isLegendDisplay = true;\r\n    @Input() currencyCode: CurrencyCodeEnum = CurrencyCodeEnum.Blank;\r\n    @Input() legendPosition: LegendPositionEnum = LegendPositionEnum.Right;\r\n    @Input() legendType: ChartLegendTypeEnum = ChartLegendTypeEnum.Both;\r\n    @Input() legendWidthPx = 250;\r\n    @Input() legendLayout: LegendLayoutEnum = LegendLayoutEnum.Vertical;\r\n\r\n    @Output() chartPointClick: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    @ViewChild('genericChart', { static: true }) genericChart!: ElementRef;\r\n    constructor(\r\n        private currencyPipe: CurrencyPipe,\r\n        private aswCurrencyPipe: AswCurrencyPipe) { }\r\n\r\n    ngOnChanges(): void {\r\n        if (!this.viewInitialized) {\r\n            return;\r\n        }\r\n        this.initializeChart();\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.viewInitialized = true;\r\n        this.initializeChart();\r\n    }\r\n\r\n    initializeChart(): void {\r\n        if (this.config) {\r\n            this.cloneConfiguration = this.config;\r\n            const containerWidth = this.genericChart.nativeElement.clientWidth;\r\n            this.deviceSize = ObjectUtils.findDeviceSize(containerWidth);\r\n            this.removeChartCredit();\r\n            this.setChartTooltip();\r\n            const series: SeriesPieOptions[] = this.cloneConfiguration.series as SeriesPieOptions[];\r\n            this.setChartSeriesOptions(series);\r\n            if (this.legendLayout === LegendLayoutEnum.Vertical) {\r\n                this.setChartLegendOption(this.legendWidthPx);\r\n            }\r\n            this.clickOnLinePoint();\r\n            Highcharts.chart(this.genericChart.nativeElement, this.cloneConfiguration);\r\n        }\r\n    }\r\n\r\n    @HostListener('window:resize')\r\n    onResize(): void {\r\n        this.initializeChart();\r\n    }\r\n\r\n    private removeChartCredit(): void {\r\n        this.cloneConfiguration.credits = {\r\n            enabled: false\r\n        };\r\n    }\r\n\r\n    private setChartTooltip(): void {\r\n        const this$: this = this;\r\n        this.cloneConfiguration.tooltip = {\r\n            useHTML: true,\r\n            split: false,\r\n            backgroundColor: AswChartConstants.blackColor,\r\n            borderColor: AswChartConstants.blackColor,\r\n            style: {\r\n                color: AswChartConstants.whiteColor,\r\n                fontWeight: AswChartConstants.fontWeight\r\n            },\r\n            borderRadius: 0,\r\n            enabled: true,\r\n            formatter(): string {\r\n                return `\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-12 text-end text-right\">\r\n                            <strong>${this.point.category}</strong>\r\n                        </div>\r\n                        <div class=\"col-md-12 text-end text-right\">\r\n                            <span style=\"color: ${this.point.color}\">\\u25A0</span>\r\n                            <strong>${this.point.series.name}</strong>\r\n                        </div>\r\n                        <div class=\"col-md-12 text-end text-right\">\r\n                            ${this$.currencyCode === CurrencyCodeEnum.Blank\r\n                                ? this.point.options.y : this$.currencyPipe.transform(this.point.options.y, this$.currencyCode)}\r\n                        </div>\r\n                    </div>\r\n                `;\r\n            }\r\n        };\r\n    }\r\n\r\n    private clickOnLinePoint(): void {\r\n        if (this.cloneConfiguration.plotOptions) {\r\n            // tslint:disable-next-line:no-non-null-assertion\r\n            this.cloneConfiguration.plotOptions![this.chartType] = {\r\n                point: {\r\n                    events: {\r\n                        click: ((event: PointClickEventObject) => {\r\n                            const pointClickEvent: ChartPointerEvent = {\r\n                                name: event.point.series.name,\r\n                                index: event.point.index,\r\n                                value: event.point.options.y,\r\n                                category: event.point.category\r\n                            };\r\n                            this.chartPointClick.emit(pointClickEvent);\r\n                        })\r\n                    }\r\n                }\r\n            };\r\n        } else {\r\n            this.cloneConfiguration.plotOptions = {\r\n                series: {\r\n                    point: {\r\n                        events: {\r\n                            click: ((event: PointClickEventObject) => {\r\n                                const pointClickEvent: ChartPointerEvent = {\r\n                                    name: event.point.series.name,\r\n                                    index: event.point.index,\r\n                                    value: event.point.options.y,\r\n                                    category: event.point.category\r\n                                };\r\n                                this.chartPointClick.emit(pointClickEvent);\r\n                            })\r\n                        }\r\n                    }\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    private setChartSeriesOptions(series: SeriesPieOptions[]): void {\r\n        series.forEach((seriesOption: SeriesPieOptions) => {\r\n            seriesOption.allowPointSelect = true;\r\n            seriesOption.showInLegend = true;\r\n            seriesOption.cursor = AswChartConstants.pointer;\r\n            const data: PointOptionsObject[] = seriesOption.data as PointOptionsObject[];\r\n            // this.handleNegativeSeriesData(data);\r\n            // const sortedSeriesOptionData: PointOptionsObject[] = this.isLegendSort ? this.sortSeriesData(data) : data;\r\n            // seriesOption.data = sortedSeriesOptionData;\r\n        });\r\n    }\r\n\r\n    private sortSeriesData(data: PointOptionsObject[]): PointOptionsObject[] {\r\n        if (this.legendType === ChartLegendTypeEnum.Default) {\r\n            data.sort((a: any, b: any) => {\r\n                return ('' + a.name).localeCompare(b.name);\r\n            });\r\n            return data;\r\n        } else {\r\n            data.sort((a: any, b: any) => {\r\n                if (a.y && b.y) {\r\n                    return a.value - b.value;\r\n                } else {\r\n                    return 0;\r\n                }\r\n            });\r\n            data.reverse();\r\n            return data;\r\n        }\r\n    }\r\n\r\n    private handleNegativeSeriesData(data: PointOptionsObject[]): void {\r\n        data.forEach((element: PointOptionsObject) => {\r\n            element.value = element.y;\r\n            element.y = element.y ? Math.abs(element.y) : 0.001;\r\n        });\r\n    }\r\n\r\n    private setChartLegendOption(legendWidthPx: number): void {\r\n        const this$: this = this;\r\n        this.cloneConfiguration.legend = {\r\n            useHTML: true,\r\n            enabled: this.isLegendDisplay,\r\n            floating: false,\r\n            align: this.setLegendAlignment(),\r\n            layout: 'vertical',\r\n            verticalAlign: this.setLegendVerticalAlignment(),\r\n            symbolHeight: 10,\r\n            symbolWidth: 10,\r\n            symbolRadius: 0,\r\n            itemMarginTop: 3, // Space between each category in the legend\r\n            itemMarginBottom: 3,\r\n            itemStyle: {\r\n                fontSize: this.deviceSize === GridOptionsEnum.ExtraSmall ? '12px' : '14px',\r\n                fontWeight: AswChartConstants.fontWeight\r\n            },\r\n            width: legendWidthPx + 15,\r\n            title: {\r\n                text: this$.setChartLegendWithHeader(legendWidthPx + 15),\r\n                style: {\r\n                    fontSize: this.deviceSize === GridOptionsEnum.ExtraSmall\r\n                        ? AswChartConstants.fontSize12 : AswChartConstants.fontSize14,\r\n                    color: '#6c757d',\r\n                    fontWeight: AswChartConstants.fontWeight,\r\n                    fontFamily: '500 14px/20px Google Sans Text,Arial,Helvetica,sans-serif'\r\n                }\r\n            },\r\n            labelFormatter(): string {\r\n                const point: any = this as Point;\r\n                const value = point.yData.reduce((acc: any, cur: any) => acc + cur, 0);\r\n                return this$.setChartLegendWithHeader(\r\n                    legendWidthPx,\r\n                    point.name,\r\n                    value);\r\n            }\r\n        };\r\n    }\r\n\r\n    private setLegendAlignment(): AlignValue {\r\n        if (this.deviceSize === GridOptionsEnum.ExtraSmall) {\r\n            return 'center';\r\n        } else if (this.legendPosition === LegendPositionEnum.Right) {\r\n            return LegendPositionEnum.Right;\r\n        } else if (this.legendPosition === LegendPositionEnum.Left) {\r\n            return LegendPositionEnum.Left;\r\n        } else {\r\n            return 'center';\r\n        }\r\n    }\r\n\r\n    private setLegendVerticalAlignment(): VerticalAlignValue {\r\n        if (this.deviceSize === GridOptionsEnum.ExtraSmall) {\r\n            return LegendPositionEnum.Bottom;\r\n        } else if (this.legendPosition === LegendPositionEnum.Right) {\r\n            return 'middle';\r\n        } else if (this.legendPosition === LegendPositionEnum.Left) {\r\n            return 'middle';\r\n        } else {\r\n            return LegendPositionEnum.Bottom;\r\n        }\r\n    }\r\n\r\n    private setChartLegendWithHeader(\r\n        legendWidthPx: number,\r\n        name?: string | null,\r\n        value?: number | null | undefined): string {\r\n        let legendCategoryWidthPx: number;\r\n        let legendValueWidthPx: number;\r\n        if (this.legendType === ChartLegendTypeEnum.Default) {\r\n            return `\r\n                <div style=\"width:${legendWidthPx}px\">\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-12 col-sm-12 col-12\">\r\n                            ${name ? name : 'Category'}\r\n                        </div>\r\n                    </div>\r\n                </div>`;\r\n        } else {\r\n            legendCategoryWidthPx = legendWidthPx * 0.5;\r\n            legendValueWidthPx = legendWidthPx * 0.5;\r\n            return `\r\n                <div style=\"width:${legendCategoryWidthPx + legendValueWidthPx}px\">\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-6 col-sm-6 col-6\">\r\n                            ${name ? name : 'Category'}\r\n                        </div>\r\n                        <div class=\"col-md-6 col-sm-6 col-6 text-end text-right\">\r\n                            ${value ? this.currencyCode === CurrencyCodeEnum.Blank\r\n                                ? value : this.currencyPipe.transform(value, this.currencyCode, 'symbol', '.2') : 'Total'}\r\n                        </div>\r\n                    </div>\r\n                </div>`;\r\n        }\r\n    }\r\n}\r\n","<div #genericChart></div>","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule, CurrencyPipe, PercentPipe } from '@angular/common';\r\nimport { AswGenericChart } from './generic-chart';\r\nimport { AswCurrencyPipe } from '@asoftwareworld/charts/core';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        AswGenericChart\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n    ],\r\n    exports: [\r\n        AswGenericChart\r\n    ],\r\n    providers: [\r\n        PercentPipe,\r\n        AswCurrencyPipe,\r\n        CurrencyPipe\r\n    ]\r\n})\r\nexport class AswGenericChartModule { }\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nexport * from './generic-chart';\r\nexport * from './generic-chart.module';\r\nexport * from './enum/chart-type.enum';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}