@esfaenza/dashboard-feature 19.2.1 → 19.2.2

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.
@@ -1600,7 +1600,8 @@ class DashboardFeatureModule {
1600
1600
  { provide: DSH_OPTIONS, multi: true, useValue: new DefaultDashboardModuleOptions() },
1601
1601
  { provide: DSH_OPTIONS, multi: true, useValue: options },
1602
1602
  { provide: DSH_DATA_SERVICE, useClass: DashboardFeatureAPIDataService },
1603
- DashboardWidgetFactory
1603
+ DashboardWidgetFactory,
1604
+ { provide: CircleProgressOptions, useValue: options }
1604
1605
  ]
1605
1606
  };
1606
1607
  }
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-dashboard-feature.mjs","sources":["../../../projects/dashboard-feature/src/lib/public-injection-tokens.ts","../../../projects/dashboard-feature/src/lib/private-injection-tokens.ts","../../../projects/dashboard-feature/src/lib/components/widgets/chart/jace-dsh-chart.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/chart/jace-dsh-chart.component.html","../../../projects/dashboard-feature/src/lib/components/widgets/counter/jace-dsh-counter.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/counter/jace-dsh-counter.component.html","../../../projects/dashboard-feature/src/lib/components/widgets/list/jace-dsh-list.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/list/jace-dsh-list.component.html","../../../projects/dashboard-feature/src/lib/components/widgets/multiprog/circle-progress/circle-progress.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/multiprog/jace-dsh-multiprog.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/multiprog/jace-dsh-multiprog.component.html","../../../projects/dashboard-feature/src/lib/models/widgets/BaseJaceWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceChartWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceCounterWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceListWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceMultiprogWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/options/DefaultDashboardModuleOptions.ts","../../../projects/dashboard-feature/src/lib/services/DashboardWidgetFactory.ts","../../../projects/dashboard-feature/src/lib/models/externals/SaveJaceDashboardLayoutDTO.ts","../../../projects/dashboard-feature/src/lib/models/externals/JaceWidgetInstanceDetail.ts","../../../projects/dashboard-feature/src/lib/components/dashboard/dashboard.component.ts","../../../projects/dashboard-feature/src/lib/components/dashboard/dashboard.component.html","../../../projects/dashboard-feature/src/lib/models/externals/Repository.ts","../../../projects/dashboard-feature/src/lib/services/dashboard-feature.service.ts","../../../projects/dashboard-feature/src/lib/dashboard-feature.module.ts","../../../projects/dashboard-feature/src/lib/models/config/JaceDashboardConfig.ts","../../../projects/dashboard-feature/src/lib/models/externals/JaceDashboardLayoutAppSearch.ts","../../../projects/dashboard-feature/src/lib/models/externals/JaceDashboardLayoutDetail.ts","../../../projects/dashboard-feature/src/lib/components/widgets/BaseWidgetComponent.ts","../../../projects/dashboard-feature/src/lib/components/widgets/JaceWidgetTypes.ts","../../../projects/dashboard-feature/src/public-api.ts","../../../projects/dashboard-feature/src/esfaenza-dashboard-feature.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\r\nimport { IDashboardFeatureDataService } from \"./services/IDashboardFeatureDataService\";\r\n\r\n/**\r\n * Token di registrazione della DashboardFeatureService.\r\n * Permette di fare l'override dell'implementazione di default a scopo di test delle widget\r\n */\r\nexport const DSH_DATA_SERVICE: InjectionToken<IDashboardFeatureDataService> = new InjectionToken<IDashboardFeatureDataService>('DSH_DATA_SERVICE');","import {InjectionToken} from \"@angular/core\";\r\nimport { IDashboardModuleOptions } from \"./models/options/IDashboardModuleOptions\";\r\n\r\n\r\nexport const DSH_OPTIONS: InjectionToken<IDashboardModuleOptions> = new InjectionToken<IDashboardModuleOptions>('DSH_MODULE_OPTIONS');","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\n\r\nimport { JaceChartWidgetModel } from '../../../models/widgets/JaceChartWidgetModel';\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-chart',\r\n templateUrl: './jace-dsh-chart.component.html',\r\n styleUrls: ['./jace-dsh-chart.component.css'],\r\n standalone: false\r\n})\r\n\r\nexport class JaceChartWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceChartWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n public chartName:string=\"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService) { }\r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceChartWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid,this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.chartName = this.model.name;\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n\r\n <div class=\"jace-dsh-chart-container jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <!-- [Type]=\"Widget.chartType\" -->\r\n <h6 *ngIf=\"model?.queryerror\" class=\"fg-disabled\" style=\"margin-top: 0.5rem;\"><span\r\n class=\"fa fa-times-circle-o\"></span>&nbsp;&nbsp;Error retrieving data</h6>\r\n <es-chart [Legend]=\"model.legend\" [Theme]=\"'dataviz'\" [Type]=\"model.chartType\" [Data]=\"model.chartData\"\r\n [name]=\"chartName\"></es-chart>\r\n </div>\r\n\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\nimport { JaceCounterWidgetModel } from '../../../models/widgets/JaceCounterWidgetModel';\r\n\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-counter',\r\n templateUrl: './jace-dsh-counter.component.html',\r\n styleUrls: ['./jace-dsh-counter.component.css'],\r\n standalone: false\r\n //TODO per online update: scommentare OnPush\r\n //changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class JaceCounterWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceCounterWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService) { }\r\n\r\n//TODO per online update: importare cdr: ChangeDectectorRef \r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceCounterWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid,this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n \r\n this.dataReady = true;\r\n //TODO per online update: this.cdr.markForCheck(); \r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n <div class=\"jace-dsh-counter-body jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <i class=\"jace-dsh-counter-icon fa fa-2x\" [ngClass]=\"[ model.icon ? model.icon : '']\" *ngIf=\"model.icon\"></i>\r\n <div class=\"jace-dsh-counter-super\">{{model.superText}}</div>\r\n <div class=\"jace-dsh-counter-value\"><span>{{model.value}}</span> <span\r\n class=\"jace-dsh-counter-unit\">{{model.unit}}</span> </div>\r\n\r\n <div class=\"jace-dsh-counter-sub\">{{model.subText}}</div>\r\n </div>\r\n\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\nimport { JaceListItemWidget, JaceListWidgetModel } from '../../../models/widgets/JaceListWidgetModel';\r\nimport { Router } from '@angular/router';\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-list',\r\n templateUrl: './jace-dsh-list.component.html',\r\n styleUrls: ['./jace-dsh-list.component.css'],\r\n standalone: false\r\n})\r\n\r\nexport class JaceListWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceListWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService,private router: Router) { }\r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceListWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid, this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n itemClicked(item: JaceListItemWidget){\r\n if(item.link)\r\n {\r\n //naviga al link\r\n let to = item.link;\r\n let par:{[key:string]:any} = {};\r\n if(item.id && item.idParamName){ \r\n par[item.idParamName] = item.id;\r\n }\r\n \r\n this.router.navigate([to, par]);\r\n }\r\n }\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n <div class=\"jace-dsh-list-body jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <div class=\"jace-dsh-list-super-text\" *ngIf=\"model.superText\">{{model.superText}}</div>\r\n <div class=\"jace-dsh-list-item\" (click)=\"itemClicked(item)\" [class.jace-dsh-list-link]=\"item.link\"\r\n *ngFor=\"let item of model.items\">\r\n <div>\r\n <span class=\"jace-dsh-list-item-id\" *ngIf=\"item.id && item.showId\">{{item.id}}</span>\r\n <span>{{item.description}}</span>\r\n </div>\r\n <div *ngIf=\"item.subline\">\r\n <span class=\"jace-dsh-list-item-subline\">{{item.subline}}</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnChanges, Output, OnInit, OnDestroy, ElementRef, SimpleChanges, NgZone, Injector } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subscription, timer } from 'rxjs';\r\n\r\nexport interface CircleProgressOptionsInterface {\r\n class?: string;\r\n backgroundGradient?: boolean;\r\n backgroundColor?: string;\r\n backgroundGradientStopColor?: string;\r\n backgroundOpacity?: number;\r\n backgroundStroke?: string;\r\n backgroundStrokeWidth?: number;\r\n backgroundPadding?: number;\r\n percent?: number;\r\n radius?: number;\r\n space?: number;\r\n toFixed?: number;\r\n maxPercent?: number;\r\n renderOnClick?: boolean;\r\n units?: string;\r\n unitsFontSize?: string;\r\n unitsFontWeight?: string;\r\n unitsColor?: string;\r\n outerStrokeGradient?: boolean;\r\n outerStrokeWidth?: number;\r\n outerStrokeColor?: string;\r\n outerStrokeGradientStopColor?: string;\r\n outerStrokeLinecap?: string;\r\n innerStrokeColor?: string;\r\n innerStrokeWidth?: number;\r\n titleFormat?: Function;\r\n title?: string | Array<String>;\r\n titleColor?: string;\r\n titleFontSize?: string;\r\n titleFontWeight?: string;\r\n subtitleFormat?: Function;\r\n subtitle?: string | Array<String>;\r\n subtitleColor?: string;\r\n subtitleFontSize?: string;\r\n subtitleFontWeight?: string;\r\n imageSrc?: string;\r\n imageHeight?: number;\r\n imageWidth?: number;\r\n animation?: boolean;\r\n animateTitle?: boolean;\r\n animateSubtitle?: boolean;\r\n animationDuration?: number;\r\n showTitle?: boolean;\r\n showSubtitle?: boolean;\r\n showUnits?: boolean;\r\n showImage?: boolean;\r\n showBackground?: boolean;\r\n showInnerStroke?: boolean;\r\n clockwise?: boolean;\r\n responsive?: boolean;\r\n startFromZero?: boolean;\r\n showZeroOuterStroke?: boolean;\r\n lazy?: boolean;\r\n}\r\n\r\nexport class CircleProgressOptions implements CircleProgressOptionsInterface {\r\n class = '';\r\n backgroundGradient = false;\r\n backgroundColor = 'transparent';\r\n backgroundGradientStopColor = 'transparent';\r\n backgroundOpacity = 1;\r\n backgroundStroke = 'transparent';\r\n backgroundStrokeWidth = 0;\r\n backgroundPadding = 5;\r\n percent = 0;\r\n radius = 90;\r\n space = 4;\r\n toFixed = 0;\r\n maxPercent = 1000;\r\n renderOnClick = true;\r\n units = '%';\r\n unitsFontSize = '10';\r\n unitsFontWeight = 'normal';\r\n unitsColor = '#444444';\r\n outerStrokeGradient = false;\r\n outerStrokeWidth = 8;\r\n outerStrokeColor = '#78C000';\r\n outerStrokeGradientStopColor = 'transparent';\r\n outerStrokeLinecap = 'round';\r\n innerStrokeColor = '#C7E596';\r\n innerStrokeWidth = 4;\r\n titleFormat = undefined;\r\n title: string | Array<String> = 'auto';\r\n titleColor = '#444444';\r\n titleFontSize = '20';\r\n titleFontWeight = 'normal';\r\n subtitleFormat = undefined;\r\n subtitle: string | Array<String> = 'progress';\r\n subtitleColor = '#A9A9A9';\r\n subtitleFontSize = '10';\r\n subtitleFontWeight = 'normal';\r\n imageSrc = undefined;\r\n imageHeight = 0;\r\n imageWidth = 0;\r\n animation = true;\r\n animateTitle = true;\r\n animateSubtitle = false;\r\n animationDuration = 500;\r\n showTitle = true;\r\n showSubtitle = true;\r\n showUnits = true;\r\n showImage = false;\r\n showBackground = true;\r\n showInnerStroke = true;\r\n clockwise = true;\r\n responsive = false;\r\n startFromZero = true;\r\n showZeroOuterStroke = true;\r\n lazy = false;\r\n}\r\n\r\n@Component({\r\n selector: 'circle-progress',\r\n standalone: false,\r\n template: `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" *ngIf=\"svg\"\r\n [attr.viewBox]=\"svg.viewBox\" preserveAspectRatio=\"xMidYMid meet\"\r\n [attr.height]=\"svg.height\" [attr.width]=\"svg.width\" (click)=\"emitClickEvent($event)\" [attr.class]=\"options.class\">\r\n <defs>\r\n <linearGradient *ngIf=\"options.outerStrokeGradient\" [attr.id]=\"svg.outerLinearGradient.id\">\r\n <stop offset=\"5%\" [attr.stop-color]=\"svg.outerLinearGradient.colorStop1\" [attr.stop-opacity]=\"1\"/>\r\n <stop offset=\"95%\" [attr.stop-color]=\"svg.outerLinearGradient.colorStop2\" [attr.stop-opacity]=\"1\"/>\r\n </linearGradient>\r\n <radialGradient *ngIf=\"options.backgroundGradient\" [attr.id]=\"svg.radialGradient.id\">\r\n <stop offset=\"5%\" [attr.stop-color]=\"svg.radialGradient.colorStop1\" [attr.stop-opacity]=\"1\"/>\r\n <stop offset=\"95%\" [attr.stop-color]=\"svg.radialGradient.colorStop2\" [attr.stop-opacity]=\"1\"/>\r\n </radialGradient>\r\n </defs>\r\n <ng-container *ngIf=\"options.showBackground\">\r\n <circle *ngIf=\"!options.backgroundGradient\"\r\n [attr.cx]=\"svg.backgroundCircle.cx\"\r\n [attr.cy]=\"svg.backgroundCircle.cy\"\r\n [attr.r]=\"svg.backgroundCircle.r\"\r\n [attr.fill]=\"svg.backgroundCircle.fill\"\r\n [attr.fill-opacity]=\"svg.backgroundCircle.fillOpacity\"\r\n [attr.stroke]=\"svg.backgroundCircle.stroke\"\r\n [attr.stroke-width]=\"svg.backgroundCircle.strokeWidth\"/>\r\n <circle *ngIf=\"options.backgroundGradient\"\r\n [attr.cx]=\"svg.backgroundCircle.cx\"\r\n [attr.cy]=\"svg.backgroundCircle.cy\"\r\n [attr.r]=\"svg.backgroundCircle.r\"\r\n attr.fill=\"url({{window.location.href}}#{{svg.radialGradient.id}})\"\r\n [attr.fill-opacity]=\"svg.backgroundCircle.fillOpacity\"\r\n [attr.stroke]=\"svg.backgroundCircle.stroke\"\r\n [attr.stroke-width]=\"svg.backgroundCircle.strokeWidth\"/>\r\n </ng-container> \r\n <circle *ngIf=\"options.showInnerStroke\"\r\n [attr.cx]=\"svg.circle.cx\"\r\n [attr.cy]=\"svg.circle.cy\"\r\n [attr.r]=\"svg.circle.r\"\r\n [attr.fill]=\"svg.circle.fill\"\r\n [attr.stroke]=\"svg.circle.stroke\"\r\n [attr.stroke-width]=\"svg.circle.strokeWidth\"/>\r\n <ng-container *ngIf=\"+options.percent!==0 || options.showZeroOuterStroke\">\r\n <path *ngIf=\"!options.outerStrokeGradient\"\r\n [attr.d]=\"svg.path.d\"\r\n [attr.stroke]=\"svg.path.stroke\"\r\n [attr.stroke-width]=\"svg.path.strokeWidth\"\r\n [attr.stroke-linecap]=\"svg.path.strokeLinecap\"\r\n [attr.fill]=\"svg.path.fill\"/>\r\n <path *ngIf=\"options.outerStrokeGradient\"\r\n [attr.d]=\"svg.path.d\"\r\n attr.stroke=\"url({{window.location.href}}#{{svg.outerLinearGradient.id}})\"\r\n [attr.stroke-width]=\"svg.path.strokeWidth\"\r\n [attr.stroke-linecap]=\"svg.path.strokeLinecap\"\r\n [attr.fill]=\"svg.path.fill\"/>\r\n </ng-container>\r\n <text *ngIf=\"!options.showImage && (options.showTitle || options.showUnits || options.showSubtitle)\"\r\n alignment-baseline=\"baseline\"\r\n [attr.x]=\"svg.circle.cx\"\r\n [attr.y]=\"svg.circle.cy\"\r\n [attr.text-anchor]=\"svg.title.textAnchor\">\r\n <ng-container *ngIf=\"options.showTitle\">\r\n <tspan *ngFor=\"let tspan of svg.title.tspans\"\r\n [attr.x]=\"svg.title.x\"\r\n [attr.y]=\"svg.title.y\"\r\n [attr.dy]=\"tspan.dy\"\r\n [attr.font-size]=\"svg.title.fontSize\"\r\n [attr.font-weight]=\"svg.title.fontWeight\"\r\n [attr.fill]=\"svg.title.color\">{{tspan.span}}</tspan>\r\n </ng-container>\r\n <tspan *ngIf=\"options.showUnits\"\r\n [attr.font-size]=\"svg.units.fontSize\"\r\n [attr.font-weight]=\"svg.units.fontWeight\"\r\n [attr.fill]=\"svg.units.color\">{{svg.units.text}}</tspan>\r\n <ng-container *ngIf=\"options.showSubtitle\">\r\n <tspan *ngFor=\"let tspan of svg.subtitle.tspans\"\r\n [attr.x]=\"svg.subtitle.x\"\r\n [attr.y]=\"svg.subtitle.y\"\r\n [attr.dy]=\"tspan.dy\"\r\n [attr.font-size]=\"svg.subtitle.fontSize\"\r\n [attr.font-weight]=\"svg.subtitle.fontWeight\"\r\n [attr.fill]=\"svg.subtitle.color\">{{tspan.span}}</tspan>\r\n </ng-container>\r\n </text>\r\n <image *ngIf=\"options.showImage\" preserveAspectRatio=\"none\" \r\n [attr.height]=\"svg.image.height\"\r\n [attr.width]=\"svg.image.width\"\r\n [attr.xlink:href]=\"svg.image.src\"\r\n [attr.x]=\"svg.image.x\"\r\n [attr.y]=\"svg.image.y\"\r\n />\r\n </svg>\r\n `\r\n})\r\nexport class CircleProgressComponent implements OnChanges, OnInit, OnDestroy {\r\n\r\n @Output() onClick = new EventEmitter<MouseEvent>();\r\n\r\n @Input() name: string;\r\n @Input() class: string;\r\n @Input() backgroundGradient: boolean;\r\n @Input() backgroundColor: string;\r\n @Input() backgroundGradientStopColor: String;\r\n @Input() backgroundOpacity: number;\r\n @Input() backgroundStroke: string;\r\n @Input() backgroundStrokeWidth: number;\r\n @Input() backgroundPadding: number;\r\n\r\n @Input() radius: number;\r\n @Input() space: number;\r\n @Input() percent: number;\r\n @Input() toFixed: number;\r\n @Input() maxPercent: number;\r\n @Input() renderOnClick: boolean;\r\n\r\n @Input() units: string;\r\n @Input() unitsFontSize: string;\r\n @Input() unitsFontWeight: string;\r\n @Input() unitsColor: string;\r\n\r\n @Input() outerStrokeGradient: boolean;\r\n @Input() outerStrokeWidth: number;\r\n @Input() outerStrokeColor: string;\r\n @Input() outerStrokeGradientStopColor: String;\r\n @Input() outerStrokeLinecap: string;\r\n\r\n @Input() innerStrokeColor: string;\r\n @Input() innerStrokeWidth: string | number;\r\n\r\n @Input() titleFormat: Function;\r\n @Input() title: string | Array<String>;\r\n @Input() titleColor: string;\r\n @Input() titleFontSize: string;\r\n @Input() titleFontWeight: string;\r\n\r\n @Input() subtitleFormat: Function;\r\n @Input() subtitle: string | string[];\r\n @Input() subtitleColor: string;\r\n @Input() subtitleFontSize: string;\r\n @Input() subtitleFontWeight: string;\r\n\r\n @Input() imageSrc: string;\r\n @Input() imageHeight: number;\r\n @Input() imageWidth: number;\r\n\r\n @Input() animation: boolean;\r\n @Input() animateTitle: boolean;\r\n @Input() animateSubtitle: boolean;\r\n @Input() animationDuration: number;\r\n\r\n @Input() showTitle: boolean;\r\n @Input() showSubtitle: boolean;\r\n @Input() showUnits: boolean;\r\n @Input() showImage: boolean;\r\n @Input() showBackground: boolean;\r\n @Input() showInnerStroke: boolean;\r\n @Input() clockwise: boolean;\r\n @Input() responsive: boolean;\r\n @Input() startFromZero: boolean;\r\n @Input() showZeroOuterStroke: boolean;\r\n\r\n @Input() lazy: boolean;\r\n\r\n @Input('options') templateOptions: CircleProgressOptions;\r\n\r\n // <svg> of component\r\n svgElement: HTMLElement = null;\r\n // whether <svg> is in viewport\r\n isInViewport: Boolean = false;\r\n // event for notifying viewport change caused by scrolling or resizing\r\n onViewportChanged: EventEmitter<{ oldValue: Boolean, newValue: Boolean }> = new EventEmitter();\r\n window: Window;\r\n _viewportChangedSubscriber: Subscription = null;\r\n\r\n svg: any;\r\n\r\n options: CircleProgressOptions = new CircleProgressOptions();\r\n defaultOptions: CircleProgressOptions = new CircleProgressOptions();\r\n _lastPercent: number = 0;\r\n _gradientUUID: string = null;\r\n render = () => {\r\n\r\n this.applyOptions();\r\n\r\n if (this.options.lazy) {\r\n // Draw svg if it doesn't exist\r\n this.svgElement === null && this.draw(this._lastPercent);\r\n // Draw it only when it's in the viewport\r\n if (this.isInViewport) {\r\n // Draw it at the latest position when I am in.\r\n if (this.options.animation && this.options.animationDuration > 0) {\r\n this.animate(this._lastPercent, this.options.percent);\r\n } else {\r\n this.draw(this.options.percent);\r\n }\r\n this._lastPercent = this.options.percent;\r\n }\r\n } else {\r\n if (this.options.animation && this.options.animationDuration > 0) {\r\n this.animate(this._lastPercent, this.options.percent);\r\n } else {\r\n this.draw(this.options.percent);\r\n }\r\n this._lastPercent = this.options.percent;\r\n }\r\n };\r\n polarToCartesian = (centerX: number, centerY: number, radius: number, angleInDegrees: number) => {\r\n let angleInRadius = angleInDegrees * Math.PI / 180;\r\n let x = centerX + Math.sin(angleInRadius) * radius;\r\n let y = centerY - Math.cos(angleInRadius) * radius;\r\n return { x: x, y: y };\r\n };\r\n draw = (percent: number) => {\r\n // make percent reasonable\r\n percent = (percent === undefined) ? this.options.percent : Math.abs(percent);\r\n // circle percent shouldn't be greater than 100%.\r\n let circlePercent = (percent > 100) ? 100 : percent;\r\n // determine box size\r\n let boxSize = this.options.radius * 2 + this.options.outerStrokeWidth * 2;\r\n if (this.options.showBackground) {\r\n boxSize += (this.options.backgroundStrokeWidth * 2 + this.max(0, this.options.backgroundPadding * 2));\r\n }\r\n // the centre of the circle\r\n let centre = { x: boxSize / 2, y: boxSize / 2 };\r\n // the start point of the arc\r\n let startPoint = { x: centre.x, y: centre.y - this.options.radius };\r\n // get the end point of the arc\r\n let endPoint = this.polarToCartesian(centre.x, centre.y, this.options.radius, 360 * (this.options.clockwise ?\r\n circlePercent :\r\n (100 - circlePercent)) / 100); // ####################\r\n // We'll get an end point with the same [x, y] as the start point when percent is 100%, so move x a little bit.\r\n if (circlePercent === 100) {\r\n endPoint.x = endPoint.x + (this.options.clockwise ? -0.01 : +0.01);\r\n }\r\n // largeArcFlag and sweepFlag\r\n let largeArcFlag: any, sweepFlag: any;\r\n if (circlePercent > 50) {\r\n [largeArcFlag, sweepFlag] = this.options.clockwise ? [1, 1] : [1, 0];\r\n } else {\r\n [largeArcFlag, sweepFlag] = this.options.clockwise ? [0, 1] : [0, 0];\r\n }\r\n // percent may not equal the actual percent\r\n let titlePercent = this.options.animateTitle ? percent : this.options.percent;\r\n let titleTextPercent = titlePercent > this.options.maxPercent ?\r\n `${this.options.maxPercent.toFixed(this.options.toFixed)}+` : titlePercent.toFixed(this.options.toFixed);\r\n let subtitlePercent = this.options.animateSubtitle ? percent : this.options.percent;\r\n // get title object\r\n let title = {\r\n x: centre.x,\r\n y: centre.y,\r\n textAnchor: 'middle',\r\n color: this.options.titleColor,\r\n fontSize: this.options.titleFontSize,\r\n fontWeight: this.options.titleFontWeight,\r\n texts: [],\r\n tspans: []\r\n };\r\n // from v0.9.9, both title and titleFormat(...) may be an array of string.\r\n if (this.options.titleFormat !== undefined && this.options.titleFormat.constructor.name === 'Function') {\r\n let formatted = this.options.titleFormat(titlePercent);\r\n if (formatted instanceof Array) {\r\n title.texts = [...formatted];\r\n } else {\r\n title.texts.push(formatted.toString());\r\n }\r\n } else {\r\n if (this.options.title === 'auto') {\r\n title.texts.push(titleTextPercent);\r\n } else {\r\n if (this.options.title instanceof Array) {\r\n title.texts = [...this.options.title]\r\n } else {\r\n title.texts.push(this.options.title.toString());\r\n }\r\n }\r\n }\r\n // get subtitle object\r\n let subtitle = {\r\n x: centre.x,\r\n y: centre.y,\r\n textAnchor: 'middle',\r\n color: this.options.subtitleColor,\r\n fontSize: this.options.subtitleFontSize,\r\n fontWeight: this.options.subtitleFontWeight,\r\n texts: [],\r\n tspans: []\r\n }\r\n // from v0.9.9, both subtitle and subtitleFormat(...) may be an array of string.\r\n if (this.options.subtitleFormat !== undefined && this.options.subtitleFormat.constructor.name === 'Function') {\r\n let formatted = this.options.subtitleFormat(subtitlePercent);\r\n if (formatted instanceof Array) {\r\n subtitle.texts = [...formatted];\r\n } else {\r\n subtitle.texts.push(formatted.toString());\r\n }\r\n } else {\r\n if (this.options.subtitle instanceof Array) {\r\n subtitle.texts = [...this.options.subtitle]\r\n } else {\r\n subtitle.texts.push(this.options.subtitle.toString());\r\n }\r\n }\r\n // get units object\r\n let units = {\r\n text: `${this.options.units}`,\r\n fontSize: this.options.unitsFontSize,\r\n fontWeight: this.options.unitsFontWeight,\r\n color: this.options.unitsColor\r\n };\r\n // get total count of text lines to be shown\r\n let rowCount = 0, rowNum = 1;\r\n this.options.showTitle && (rowCount += title.texts.length);\r\n this.options.showSubtitle && (rowCount += subtitle.texts.length);\r\n // calc dy for each tspan for title\r\n if (this.options.showTitle) {\r\n for (let span of title.texts) {\r\n title.tspans.push({ span: span, dy: this.getRelativeY(rowNum, rowCount) });\r\n rowNum++;\r\n }\r\n }\r\n // calc dy for each tspan for subtitle\r\n if (this.options.showSubtitle) {\r\n for (let span of subtitle.texts) {\r\n subtitle.tspans.push({ span: span, dy: this.getRelativeY(rowNum, rowCount) })\r\n rowNum++;\r\n }\r\n }\r\n // create ID for gradient element\r\n if (null === this._gradientUUID) {\r\n this._gradientUUID = this.uuid();\r\n }\r\n // Bring it all together\r\n this.svg = {\r\n viewBox: `0 0 ${boxSize} ${boxSize}`,\r\n // Set both width and height to '100%' if it's responsive\r\n width: this.options.responsive ? '100%' : boxSize,\r\n height: this.options.responsive ? '100%' : boxSize,\r\n backgroundCircle: {\r\n cx: centre.x,\r\n cy: centre.y,\r\n r: this.options.radius + this.options.outerStrokeWidth / 2 + this.options.backgroundPadding,\r\n fill: this.options.backgroundColor,\r\n fillOpacity: this.options.backgroundOpacity,\r\n stroke: this.options.backgroundStroke,\r\n strokeWidth: this.options.backgroundStrokeWidth,\r\n },\r\n path: {\r\n // A rx ry x-axis-rotation large-arc-flag sweep-flag x y (https://developer.mozilla.org/en/docs/Web/SVG/Tutorial/Paths#Arcs)\r\n d: `M ${startPoint.x} ${startPoint.y}\r\n A ${this.options.radius} ${this.options.radius} 0 ${largeArcFlag} ${sweepFlag} ${endPoint.x} ${endPoint.y}`,\r\n stroke: this.options.outerStrokeColor,\r\n strokeWidth: this.options.outerStrokeWidth,\r\n strokeLinecap: this.options.outerStrokeLinecap,\r\n fill: 'none'\r\n },\r\n circle: {\r\n cx: centre.x,\r\n cy: centre.y,\r\n r: this.options.radius - this.options.space - this.options.outerStrokeWidth / 2 - this.options.innerStrokeWidth / 2,\r\n fill: 'none',\r\n stroke: this.options.innerStrokeColor,\r\n strokeWidth: this.options.innerStrokeWidth,\r\n },\r\n title: title,\r\n units: units,\r\n subtitle: subtitle,\r\n image: {\r\n x: centre.x - this.options.imageWidth / 2,\r\n y: centre.y - this.options.imageHeight / 2,\r\n src: this.options.imageSrc,\r\n width: this.options.imageWidth,\r\n height: this.options.imageHeight,\r\n },\r\n outerLinearGradient: {\r\n id: 'outer-linear-' + this._gradientUUID,\r\n colorStop1: this.options.outerStrokeColor,\r\n colorStop2: this.options.outerStrokeGradientStopColor === 'transparent' ? '#FFF' : this.options.outerStrokeGradientStopColor,\r\n },\r\n radialGradient: {\r\n id: 'radial-' + this._gradientUUID,\r\n colorStop1: this.options.backgroundColor,\r\n colorStop2: this.options.backgroundGradientStopColor === 'transparent' ? '#FFF' : this.options.backgroundGradientStopColor,\r\n }\r\n };\r\n };\r\n getAnimationParameters = (previousPercent: number, currentPercent: number) => {\r\n const MIN_INTERVAL = 10;\r\n let times: number, step: number, interval: number;\r\n let fromPercent = this.options.startFromZero ? 0 : (previousPercent < 0 ? 0 : previousPercent);\r\n let toPercent = currentPercent < 0 ? 0 : this.min(currentPercent, this.options.maxPercent);\r\n let delta = Math.abs(Math.round(toPercent - fromPercent));\r\n\r\n if (delta >= 100) {\r\n // we will finish animation in 100 times\r\n times = 100;\r\n if (!this.options.animateTitle && !this.options.animateSubtitle) {\r\n step = 1;\r\n } else {\r\n // show title or subtitle animation even if the arc is full, we also need to finish it in 100 times.\r\n step = Math.round(delta / times);\r\n }\r\n } else {\r\n // we will finish in as many times as the number of percent.\r\n times = delta;\r\n step = 1;\r\n }\r\n // Get the interval of timer\r\n interval = Math.round(this.options.animationDuration / times);\r\n // Readjust all values if the interval of timer is extremely small.\r\n if (interval < MIN_INTERVAL) {\r\n interval = MIN_INTERVAL;\r\n times = this.options.animationDuration / interval;\r\n if (!this.options.animateTitle && !this.options.animateSubtitle && delta > 100) {\r\n step = Math.round(100 / times);\r\n } else {\r\n step = Math.round(delta / times);\r\n }\r\n }\r\n // step must be greater than 0.\r\n if (step < 1) {\r\n step = 1;\r\n }\r\n return { times: times, step: step, interval: interval };\r\n };\r\n animate = (previousPercent: number, currentPercent: number) => {\r\n if (this._timerSubscription && !this._timerSubscription.closed) {\r\n this._timerSubscription.unsubscribe();\r\n }\r\n let fromPercent = this.options.startFromZero ? 0 : previousPercent;\r\n let toPercent = currentPercent;\r\n let { step: step, interval: interval } = this.getAnimationParameters(fromPercent, toPercent);\r\n let count = fromPercent;\r\n if (fromPercent < toPercent) {\r\n this._timerSubscription = timer(0, interval).subscribe(() => {\r\n count += step;\r\n if (count <= toPercent) {\r\n if (!this.options.animateTitle && !this.options.animateSubtitle && count >= 100) {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n } else {\r\n this.draw(count);\r\n }\r\n } else {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n }\r\n });\r\n } else {\r\n this._timerSubscription = timer(0, interval).subscribe(() => {\r\n count -= step;\r\n if (count >= toPercent) {\r\n if (!this.options.animateTitle && !this.options.animateSubtitle && toPercent >= 100) {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n } else {\r\n this.draw(count);\r\n }\r\n } else {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n }\r\n });\r\n }\r\n };\r\n emitClickEvent(event: MouseEvent): void {\r\n if (this.options.renderOnClick) {\r\n this.animate(0, this.options.percent);\r\n }\r\n if (this.onClick.observers.length > 0) {\r\n this.onClick.emit(event);\r\n }\r\n }\r\n private _timerSubscription: Subscription;\r\n private applyOptions = () => {\r\n // the options of <circle-progress> may change already\r\n for (let name of Object.keys(this.options)) {\r\n if (this.hasOwnProperty(name) && this[name] !== undefined) {\r\n this.options[name] = this[name];\r\n } else if (this.templateOptions && this.templateOptions[name] !== undefined) {\r\n this.options[name] = this.templateOptions[name];\r\n }\r\n }\r\n // make sure key options valid\r\n this.options.radius = Math.abs(+this.options.radius);\r\n this.options.space = +this.options.space;\r\n this.options.percent = +this.options.percent > 0 ? +this.options.percent : 0;\r\n this.options.maxPercent = Math.abs(+this.options.maxPercent);\r\n this.options.animationDuration = Math.abs(this.options.animationDuration);\r\n this.options.outerStrokeWidth = Math.abs(+this.options.outerStrokeWidth);\r\n this.options.innerStrokeWidth = Math.abs(+this.options.innerStrokeWidth);\r\n this.options.backgroundPadding = +this.options.backgroundPadding;\r\n };\r\n private getRelativeY = (rowNum: number, rowCount: number): string => {\r\n // why '-0.18em'? It's a magic number when property 'alignment-baseline' equals 'baseline'. :)\r\n let initialOffset = -0.18, offset = 1;\r\n return (initialOffset + offset * (rowNum - rowCount / 2)).toFixed(2) + 'em';\r\n };\r\n\r\n private min = (a: number, b: number) => {\r\n return a < b ? a : b;\r\n };\r\n\r\n private max = (a: number, b: number) => {\r\n return a > b ? a : b;\r\n };\r\n\r\n private uuid = () => {\r\n // https://www.w3resource.com/javascript-exercises/javascript-math-exercise-23.php\r\n var dt = new Date().getTime();\r\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (dt + Math.random() * 16) % 16 | 0;\r\n dt = Math.floor(dt / 16);\r\n return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n return uuid;\r\n }\r\n\r\n public isDrawing(): boolean {\r\n return (this._timerSubscription && !this._timerSubscription.closed);\r\n }\r\n\r\n public findSvgElement(): void {\r\n if (this.svgElement === null) {\r\n let tags = this.elRef.nativeElement.getElementsByTagName('svg');\r\n if (tags.length > 0) {\r\n this.svgElement = tags[0];\r\n }\r\n }\r\n }\r\n\r\n private isElementInViewport(el): Boolean {\r\n // Return false if el has not been created in page.\r\n if (el === null || el === undefined) return false;\r\n // Check if the element is out of view due to a container scrolling\r\n let rect = el.getBoundingClientRect(), parent = el.parentNode, parentRect;\r\n do {\r\n parentRect = parent.getBoundingClientRect();\r\n if (rect.top >= parentRect.bottom) return false;\r\n if (rect.bottom <= parentRect.top) return false;\r\n if (rect.left >= parentRect.right) return false;\r\n if (rect.right <= parentRect.left) return false;\r\n parent = parent.parentNode;\r\n } while (parent != this.document.body);\r\n // Check its within the document viewport\r\n if (rect.top >= (this.window.innerHeight || this.document.documentElement.clientHeight)) return false;\r\n if (rect.bottom <= 0) return false;\r\n if (rect.left >= (this.window.innerWidth || this.document.documentElement.clientWidth)) return false;\r\n if (rect.right <= 0) return false;\r\n return true;\r\n }\r\n\r\n checkViewport = () => {\r\n this.findSvgElement();\r\n let previousValue = this.isInViewport;\r\n this.isInViewport = this.isElementInViewport(this.svgElement);\r\n if (previousValue !== this.isInViewport && this.onViewportChanged.observers.length > 0) {\r\n this.ngZone.run(() => {\r\n this.onViewportChanged.emit({ oldValue: previousValue, newValue: this.isInViewport });\r\n });\r\n }\r\n }\r\n\r\n onScroll = (event: Event) => {\r\n this.checkViewport();\r\n }\r\n\r\n loadEventsForLazyMode = () => {\r\n if (this.options.lazy) {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.document.addEventListener('scroll', this.onScroll, true);\r\n this.window.addEventListener('resize', this.onScroll, true);\r\n });\r\n if (this._viewportChangedSubscriber === null) {\r\n this._viewportChangedSubscriber = this.onViewportChanged.subscribe(({ oldValue, newValue }) => {\r\n newValue ? this.render() : null;\r\n });\r\n }\r\n // svgElement must be created in DOM before being checked.\r\n // Is there a better way to check the existence of svgElemnt?\r\n let _timer = timer(0, 50).subscribe(() => {\r\n this.svgElement === null ? this.checkViewport() : _timer.unsubscribe();\r\n })\r\n }\r\n }\r\n\r\n unloadEventsForLazyMode = () => {\r\n // Remove event listeners\r\n this.document.removeEventListener('scroll', this.onScroll, true);\r\n this.window.removeEventListener('resize', this.onScroll, true);\r\n // Unsubscribe onViewportChanged\r\n if (this._viewportChangedSubscriber !== null) {\r\n this._viewportChangedSubscriber.unsubscribe();\r\n this._viewportChangedSubscriber = null;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.loadEventsForLazyMode();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unloadEventsForLazyMode();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n\r\n this.render();\r\n\r\n if ('lazy' in changes) {\r\n changes.lazy.currentValue ? this.loadEventsForLazyMode() : this.unloadEventsForLazyMode();\r\n }\r\n\r\n }\r\n\r\n private document: Document;\r\n\r\n constructor(\r\n defaultOptions: CircleProgressOptions,\r\n private ngZone: NgZone,\r\n private elRef: ElementRef,\r\n injector: Injector,\r\n ) {\r\n this.document = injector.get(DOCUMENT);\r\n this.window = this.document.defaultView;\r\n Object.assign(this.options, defaultOptions);\r\n Object.assign(this.defaultOptions, defaultOptions);\r\n }\r\n\r\n}","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\n\r\nimport { Router } from '@angular/router';\r\nimport { JaceMultiprogWidgetModel } from '../../../models/widgets/JaceMultiprogWidgetModel';\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-multiprog',\r\n templateUrl: './jace-dsh-multiprog.component.html',\r\n styleUrls: ['./jace-dsh-multiprog.component.css'],\r\n standalone: false\r\n})\r\nexport class JaceMultiprogWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceMultiprogWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService,private router: Router) { }\r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceMultiprogWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid, this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner\"></i>\r\n </div>\r\n <div class=\"jace-dsh-multiprog-container jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <div *ngFor=\"let item of model.progressTitles; let i = index\" class=\"jace-dsh-multiprog-progress\">\r\n <div class=\"jace-dsh-multiprog-title\">{{item}}</div>\r\n <!-- messo circle progress per tutto... prima si poteva switchare su progress bar ma pace -->\r\n <circle-progress [percent]=\"model.progressValues[i]\" [showSubtitle]=false [radius]=\"36\"\r\n [outerStrokeWidth]=\"4\" [innerStrokeWidth]=\"2\" [outerStrokeColor]=\"'#7489AA'\"\r\n [innerStrokeColor]=\"'#EFECCA'\" [animation]=\"true\" [animationDuration]=\"300\" [showTitle]=\"true\"\r\n ></circle-progress>\r\n </div>\r\n </div>\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { GridsterItem, GridsterItemComponentInterface } from \"angular-gridster2\";\r\nimport { JaceWidgetInstanceDetail } from \"../externals/JaceWidgetInstanceDetail\";\r\nimport { IJaceWidgetModel } from \"./IJaceWidgetModel\";\r\n\r\nexport abstract class BaseJaceWidgetModel implements IJaceWidgetModel{\r\n \r\n name!: string;\r\n title?: string| undefined;\r\n widgetType!: string;\r\n dataError: boolean;\r\n options?: { [key: string]: any; }| undefined;\r\n backendid: string = \"default_backend\";\r\n\r\n x!: number;\r\n y!: number;\r\n //grid overrides\r\n rows!: number;\r\n cols!: number;\r\n resizeEnabled?: boolean = false;\r\n layerIndex?: number | undefined;\r\n initCallback?: ((item: GridsterItem, itemComponent: GridsterItemComponentInterface) => void) | undefined;\r\n dragEnabled?: boolean | undefined;\r\n compactEnabled?: boolean | undefined;\r\n maxItemRows?: number | undefined;\r\n minItemRows?: number | undefined;\r\n maxItemCols?: number | undefined;\r\n minItemCols?: number | undefined;\r\n minItemArea?: number | undefined;\r\n maxItemArea?: number | undefined;\r\n\r\n [propName: string]: any;\r\n\r\n constructor(){\r\n this.dataError = false;\r\n this.options = {};\r\n }\r\n\r\n configureFromInstanceDetails(details: JaceWidgetInstanceDetail): void {\r\n this.name = details.name;\r\n this.widgetType = details.type;\r\n this.title = details.title;\r\n this.x = details.x;\r\n this.y = details.y;\r\n this.cols = details.cols;\r\n this.rows = details.rows;\r\n this.compactEnabled = details.compactenabled;\r\n this.dragEnabled = details.dragenabled;\r\n this.options = details.options;\r\n this.dataError = details.queryerror;\r\n this.resizeEnabled = details.resizeenabled;\r\n this.backendid = details.backendid??\"default_backend\";\r\n }\r\n abstract setData(data?: any): void ;\r\n}","import { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\nexport class JaceChartWidgetModel extends BaseJaceWidgetModel {\r\n \r\n chartType: 'pie' | 'line' | 'vertical' | 'vertical-2d' | 'vertical-stacked'='line';\r\n legend: boolean=false;\r\n\r\n //LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | VerticalStackedChartData | any;\r\n chartData: any;\r\n\r\n constructor() {\r\n super();\r\n this.widgetType= \"CHART\"; \r\n }\r\n\r\n setData(data?: any): void {\r\n if (!data)\r\n return;\r\n\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n\r\n if (data['legend'])\r\n this.legend = data['legend'];\r\n else\r\n this.legend = true;\r\n if (data['charttype'])\r\n this.chartType = data['charttype'];\r\n\r\n if (data['chartdata']) {\r\n this.chartData = data['chartdata'];\r\n }\r\n if (this.options && this.options['legend'] == undefined)\r\n this.options['legend'] = true;\r\n }\r\n\r\n}","\r\nimport { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\nexport class JaceCounterWidgetModel extends BaseJaceWidgetModel {\r\n\r\n superText?: string=undefined;\r\n subText?: string = undefined;\r\n value: number = 0; \r\n icon?: string=undefined;\r\n unit?: string=undefined;\r\n \r\n\r\n constructor() {\r\n super();\r\n this.widgetType= \"COUNTER\"; \r\n }\r\n \r\n\r\n setData(data?: any): void {\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n this.superText = data['supertext'];\r\n this.subText = data['subtext'];\r\n this.value = data['value'];\r\n this.icon = data['icon'];\r\n this.options = data['options'];\r\n this.unit = data['unit'];\r\n }\r\n\r\n \r\n\r\n\r\n\r\n}","import { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\nexport class JaceListItemWidget {\r\n id?: any;\r\n showId: boolean;\r\n idParamName?: string;\r\n description!: string;\r\n subline?: string;\r\n classes?: string;\r\n link?: string;\r\n}\r\nexport class JaceListWidgetModel extends BaseJaceWidgetModel{\r\n \r\n superText?: string = undefined;\r\n items: JaceListItemWidget[] = [];\r\n\r\n constructor() {\r\n super();\r\n this.widgetType= \"LIST\"; \r\n }\r\n\r\n\r\n setData(data?: any) {\r\n if (!data)\r\n return;\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n this.superText = data['supertext'];\r\n if (data['items']) {\r\n const d = data['items'] as Array<any>;\r\n this.items = [];\r\n for (let index = 0; index < d.length; index++) {\r\n const item = new JaceListItemWidget();\r\n const element = d[index];\r\n\r\n if (element['id'])\r\n item.id = element['id'];\r\n\r\n if (element['idparamname'])\r\n item.idParamName = element['idparamname'];\r\n\r\n if (element['link'])\r\n item.link = element['link'];\r\n\r\n if (element['subline'])\r\n item.subline = element['subline'];\r\n\r\n if (element['classes'])\r\n item.classes = element['classes'];\r\n\r\n item.description = element.description;\r\n this.items.push(item);\r\n }\r\n }\r\n }\r\n\r\n}","import { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\n\r\nexport class JaceMultiprogWidgetModel extends BaseJaceWidgetModel {\r\n \r\n resizeEnabled: boolean = true;\r\n\r\n progressTitles: string[]=[];\r\n progressValues: number[]=[];\r\n\r\n circleProgress: boolean=false;\r\n \r\n constructor() {\r\n super();\r\n this.widgetType= \"MULTIPROGRESS\"; \r\n }\r\n\r\n setData(data?: any): void {\r\n\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n\r\n this.progressTitles = data['progresstitles'] ?? [];\r\n this.progressValues = data['progressvalues'] ?? [];\r\n this.circleProgress = data['circleprogress'];\r\n this.options = data['options'] ?? {};\r\n\r\n\r\n if (this.circleProgress === undefined)\r\n this.circleProgress = true;\r\n\r\n if (this.cols === undefined && this.progressValues) {\r\n if (this.progressValues.length == 1)\r\n this.cols = 1;\r\n else\r\n this.cols = 2;\r\n }\r\n }\r\n\r\n}","import { JaceChartWidgetComponent } from \"../../components/widgets/chart/jace-dsh-chart.component\";\r\nimport { JaceCounterWidgetComponent } from \"../../components/widgets/counter/jace-dsh-counter.component\";\r\nimport { JaceListWidgetComponent } from \"../../components/widgets/list/jace-dsh-list.component\";\r\nimport { JaceMultiprogWidgetComponent } from \"../../components/widgets/multiprog/jace-dsh-multiprog.component\";\r\nimport { JaceChartWidgetModel } from \"../widgets/JaceChartWidgetModel\";\r\nimport { JaceCounterWidgetModel } from \"../widgets/JaceCounterWidgetModel\";\r\nimport { JaceListWidgetModel } from \"../widgets/JaceListWidgetModel\";\r\nimport { JaceMultiprogWidgetModel } from \"../widgets/JaceMultiprogWidgetModel\";\r\nimport { IDashboardModuleOptions } from \"./IDashboardModuleOptions\";\r\nimport { IWidgetTypeConfig } from \"./IWidgetTypeConfig\";\r\n\r\nexport class DefaultDashboardModuleOptions implements IDashboardModuleOptions{\r\n widgetTypes!: IWidgetTypeConfig[];\r\n\r\n constructor(){\r\n this.widgetTypes = [\r\n {\r\n name: \"COUNTER\",\r\n component: JaceCounterWidgetComponent,\r\n model: JaceCounterWidgetModel\r\n },\r\n {\r\n name: \"LIST\",\r\n component: JaceListWidgetComponent,\r\n model: JaceListWidgetModel\r\n },\r\n {\r\n name: \"CHART\",\r\n component: JaceChartWidgetComponent,\r\n model: JaceChartWidgetModel\r\n },\r\n {\r\n name: \"MULTIPROGRESS\",\r\n component: JaceMultiprogWidgetComponent,\r\n model: JaceMultiprogWidgetModel\r\n }\r\n ];\r\n }\r\n}","import { ComponentRef, Injectable, ViewContainerRef } from '@angular/core';\r\nimport { IWidgetComponent } from '../components/widgets/IWidgetComponent';\r\nimport { JaceWidgetInstanceDetail } from '../models/externals/JaceWidgetInstanceDetail';\r\nimport { IJaceWidgetModel } from '../models/widgets/IJaceWidgetModel';\r\nimport { IDashboardModuleOptions } from '../models/options/IDashboardModuleOptions';\r\nimport { IWidgetTypeConfig } from '../models/options/IWidgetTypeConfig';\r\n\r\nexport interface IConstructableModel<T> {\r\n new(): T;\r\n}\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class DashboardWidgetFactory {\r\n\r\n types: { [name: string]: IWidgetTypeConfig } = {};\r\n\r\n constructor() { }\r\n\r\n\r\n addOption(option: IDashboardModuleOptions) {\r\n\r\n if (option.widgetTypes) {\r\n option.widgetTypes.forEach((o) => {\r\n this.types[o.name] = o;\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Versione ng11 della creazione dei componenti dinamici delle widget\r\n * @param type \r\n * @param vcr \r\n * @returns \r\n */\r\n resolveComponent(type: string, vcr: ViewContainerRef): ComponentRef<IWidgetComponent> | null {\r\n\r\n if (!this.types)\r\n return null;\r\n\r\n let t = this.types[type];\r\n\r\n if (!t)\r\n return null;\r\n\r\n let componentRef: ComponentRef<IWidgetComponent> = vcr.createComponent(t.component);\r\n\r\n return componentRef;\r\n }\r\n\r\n resolveDefinition(type: string, details: JaceWidgetInstanceDetail): IJaceWidgetModel | null {\r\n\r\n if (!this.types)\r\n return null;\r\n\r\n let t = this.types[type];\r\n\r\n if (!t)\r\n return null;\r\n\r\n let definitionInstance = this.createInstance(t.model);\r\n definitionInstance.configureFromInstanceDetails(details);\r\n\r\n return definitionInstance;\r\n }\r\n\r\n private createInstance<T extends IJaceWidgetModel>(type: IConstructableModel<T>): T {\r\n return new type();\r\n }\r\n\r\n}","import { JaceWidgetInstanceDetail } from \"./JaceWidgetInstanceDetail\";\r\n\r\n\r\nexport class SaveJaceDashboardLayoutDTO {\r\n backendid:string=\"default_backend\";\r\n name: string;\r\n widgets!: JaceWidgetInstanceDetail[];\r\n\r\n}","//Definizione della widget restituita dal backend\r\nexport class JaceWidgetInstanceDetail {\r\n id?: number;\r\n name!: string;\r\n title?: string;\r\n type!: string;\r\n x!: number;\r\n y!: number;\r\n cols!: number;\r\n rows!: number;\r\n backendid?: string;\r\n \r\n dragenabled?: boolean;\r\n resizeenabled?: boolean;\r\n compactenabled?: boolean; \r\n options?: { [key: string]: any };\r\n queryerror: boolean = false;\r\n }","import { AfterViewInit, ChangeDetectorRef, Component, ComponentRef, Inject, Input, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges, ViewChildren, ViewContainerRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { JaceDashboardConfig } from \"../../models/config/JaceDashboardConfig\";\r\nimport { IJaceWidgetModel } from \"../../models/widgets/IJaceWidgetModel\";\r\nimport { InboundMessageTypes, InterComService } from \"@esfaenza/extensions\";\r\n\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { SaveJaceDashboardLayoutDTO } from \"../../models/externals/SaveJaceDashboardLayoutDTO\";\r\nimport { JaceWidgetInstanceDetail } from \"../../models/externals/JaceWidgetInstanceDetail\";\r\nimport { JaceDashboardLayoutDetail } from \"../../models/externals/JaceDashboardLayoutDetail\";\r\nimport { DashboardWidgetFactory } from \"../../services/DashboardWidgetFactory\";\r\nimport { Subject, Subscription, timer } from \"rxjs\";\r\nimport { map, takeUntil } from \"rxjs/operators\";\r\nimport { IWidgetComponent } from \"../widgets/IWidgetComponent\";\r\nimport { DSH_DATA_SERVICE } from \"../../public-injection-tokens\";\r\nimport { IDashboardFeatureDataService } from \"../../services/IDashboardFeatureDataService\";\r\n\r\n/**\r\n * Componente di base che rappresenta una dashboard.\r\n * Utilizza Gridster2 per il layout delle widget [Gridster2](https://tiberiuzuld.github.io/angular-gridster2/)\r\n */\r\n@Component({\r\n selector: 'es-dashboard',\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.css'],\r\n standalone: false\r\n})\r\nexport class DashboardComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\r\n /**\r\n * Configurazione di questa dashboard.\r\n * Contiene anche le configurazioni di layout di Gridster2\r\n */\r\n @Input() Configuration!: JaceDashboardConfig;\r\n\r\n public dashboardDate = new Date();\r\n public dashboardLayout?: JaceDashboardLayoutDetail;\r\n\r\n widgetDefinitions: (IJaceWidgetModel | null)[] = [];\r\n\r\n changesSub?: Subscription;\r\n\r\n trackedSubscriptions: Subscription[] = [];\r\n\r\n readonly destroySignal$: Subject<void> = new Subject<void>();\r\n\r\n @ViewChildren('grid_item', { read: ViewContainerRef }) gridItemRefs!: QueryList<ViewContainerRef>;\r\n\r\n constructor(\r\n @Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService,\r\n private intercom: InterComService,\r\n private route: ActivatedRoute,\r\n private cmpFactory: DashboardWidgetFactory,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.route.snapshot.data[\"title\"] });\r\n }\r\n\r\n public ngOnInit() { }\r\n\r\n ngAfterViewInit(): void {\r\n //qui this.gridItemRefs è 'riempito'\r\n // sottoscrivo changes che sparerà tutte le volte che ngFor si aggiorna (ovvero quando cambia dashboard)\r\n this.changesSub = this.gridItemRefs.changes.pipe(\r\n takeUntil(this.destroySignal$)\r\n ).subscribe((comps: QueryList<ViewContainerRef>) => {\r\n this.renderLayout(comps);\r\n });\r\n //prima volta\r\n\r\n //setTimeout(()=>this.reloadData(),500);\r\n this.trackedSubscriptions.push(timer(500).pipe(\r\n takeUntil(this.destroySignal$),\r\n map(() => this.reloadData())\r\n ).subscribe()\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n //unsubscribe dalle changes dei viewref\r\n if (this.changesSub)\r\n this.changesSub.unsubscribe();\r\n\r\n this.clearTrackedSubscriptions();\r\n\r\n this.destroySignal$.next();\r\n this.destroySignal$.complete();\r\n }\r\n\r\n clearTrackedSubscriptions() {\r\n if (this.trackedSubscriptions) {\r\n for (let index = 0; index < this.trackedSubscriptions.length; index++) {\r\n const element = this.trackedSubscriptions[index];\r\n element.unsubscribe();\r\n }\r\n this.trackedSubscriptions = [];\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //occhio: arriva prima di ngAfterViewInit\r\n if (changes.Configuration) {\r\n //appena ho configuration \r\n console.log(changes.Configuration);\r\n // la prima volta l'ho già fatta alla creazione del componente\r\n if(!changes.Configuration.firstChange){\r\n this.reloadData();\r\n }\r\n }\r\n }\r\n\r\n reloadData() {\r\n if (!this.Configuration)\r\n return;\r\n\r\n this.dshService.GetUserDashboard(this.Configuration.backendId, this.Configuration.accountId, this.Configuration.dashboardName).pipe(\r\n takeUntil(this.destroySignal$)\r\n ).subscribe(c => {\r\n this.dashboardLayout = c;\r\n this.widgetDefinitions = c.widgets.map(i => {\r\n return this.cmpFactory.resolveDefinition(i.type, i)\r\n });\r\n });\r\n }\r\n\r\n removeItem(widgetName: string) {\r\n if (!this.dashboardLayout)\r\n return;\r\n let idx = this.dashboardLayout.widgets.findIndex(s => s.name == widgetName);\r\n this.widgetDefinitions.splice(idx, 1);\r\n }\r\n\r\n saveDashboard() {\r\n if (!this.dashboardLayout)\r\n return;\r\n const dto = new SaveJaceDashboardLayoutDTO();\r\n dto.backendid = this.Configuration.backendId;\r\n dto.widgets = [];\r\n for (let index = 0; index < this.widgetDefinitions.length; index++) {\r\n const w: IJaceWidgetModel | null = this.widgetDefinitions[index];\r\n if (w == null)\r\n continue;\r\n let v = new JaceWidgetInstanceDetail();\r\n v.id = w.id;\r\n v.name = w.name;\r\n v.x = w.x;\r\n v.y = w.y;\r\n v.cols = w.cols;\r\n v.rows = w.rows;\r\n v.compactenabled = w.compactEnabled;\r\n v.dragenabled = w.dragEnabled;\r\n v.resizeenabled = w.resizeEnabled;\r\n v.type = w.widgetType;\r\n v.title = w.title;\r\n v.options = w.options;\r\n dto.widgets.push(v);\r\n }\r\n this.dshService.SaveUserDashboard(dto).subscribe(res => {\r\n if (res.success)\r\n console.log('Dashboard saved');\r\n });\r\n }\r\n\r\n renderLayout(comps: QueryList<ViewContainerRef>) {\r\n this.clearTrackedSubscriptions();\r\n\r\n comps.map((host, index) => {\r\n const vcr = host;\r\n vcr.clear();\r\n const widgetData = this.widgetDefinitions[index];\r\n\r\n if (!widgetData || !widgetData.widgetType)\r\n return;\r\n\r\n let componentRef: ComponentRef<IWidgetComponent> | null;\r\n componentRef = this.cmpFactory.resolveComponent(widgetData?.widgetType, vcr);\r\n\r\n if (!componentRef) {\r\n console.log(`Tipo widget sconosciuto ${widgetData.widgetType}`);\r\n return;\r\n }\r\n\r\n //setta l'input della data\r\n if (this.Configuration.showDateInput)\r\n componentRef.instance.DashboardDate = this.dashboardDate;\r\n\r\n //setta il modello\r\n componentRef.instance.setWidgetModel(this.Configuration.backendId, widgetData);\r\n\r\n //setta la callback per OnRemove\r\n let s = componentRef.instance.OnRemove.pipe(\r\n takeUntil(this.destroySignal$)\r\n ).subscribe(name => this.removeItem(name));\r\n this.trackedSubscriptions.push(s);\r\n\r\n //componentRef.changeDetectorRef.markForCheck();\r\n //componentRef.changeDetectorRef.detectChanges();\r\n });\r\n this.cdr.detectChanges();\r\n }\r\n\r\n addItem() {\r\n //this.dashboard.push({});\r\n }\r\n}","<ng-container *ngIf=\"Configuration\">\r\n\r\n <form role=\"form\" class=\"jace-dsh-toolbar\" *ngIf=\"Configuration.showToolbar\">\r\n <div *ngIf=\"Configuration.dashboardTitle\" class=\"jace-dsh-toolbar-title\">\r\n {{Configuration.dashboardTitle}}\r\n </div>\r\n <div class=\"jace-dsh-toolbar-dtp\" *ngIf=\"Configuration?.showDateInput\">\r\n <form-date InOutFormat=\"date\" [FormLayout]=\"false\" id=\"txt_dashboarddate\" [Validation]=\"false\"\r\n autocomplete=\"off\" [(ngModel)]=\"dashboardDate\" name=\"dashboarddate\" [Placeholder]=\"'Dashboard Date'\">\r\n </form-date>\r\n </div>\r\n <div class=\"jace-dsh-save-button\" (click)=\"saveDashboard()\">\r\n <span class=\"transition\">\r\n <i class=\"fa fa-save\"></i>\r\n </span>\r\n </div>\r\n </form>\r\n\r\n <gridster [options]=\"Configuration.gridsterConfig\" class=\"jace-dsh-widget-area\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetDefinitions\" class=\"jace-dsh-widget {{item.name}}\">\r\n <!-- <ng-container *ngFor=\"let item of widgetDefinitions\"> -->\r\n <ng-template #grid_item></ng-template>\r\n <!-- </ng-container> -->\r\n </gridster-item>\r\n </gridster>\r\n\r\n</ng-container>","export const Repository={\r\n GET_Dashboard_GetLayout: \"/api/Dashboard/GetLayout\",\r\n POST_Dashboard_SaveLayout: \"/api/Dashboard/SaveLayout\",\r\n GET_Dashboard_GetWidgetData: \"/api/Dashboard/GetWidgetData\"\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { JaceDashboardLayoutDetail } from '../models/externals/JaceDashboardLayoutDetail';\r\nimport { Observable } from 'rxjs';\r\nimport { SaveJaceDashboardLayoutDTO } from '../models/externals/SaveJaceDashboardLayoutDTO';\r\nimport { CallResult } from '@esfaenza/extensions';\r\nimport { HTTPService } from '@esfaenza/httpservice';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { Repository } from '../models/externals/Repository';\r\nimport { IDashboardFeatureDataService } from './IDashboardFeatureDataService';\r\n\r\n@Injectable()\r\nexport class DashboardFeatureAPIDataService implements IDashboardFeatureDataService {\r\n\r\n constructor(private http: HTTPService) {}\r\n\r\n GetUserDashboard(backendid:string, idaccount: number,dashboardName: string): Observable<JaceDashboardLayoutDetail> {\r\n let params = new HttpParams();\r\n params = params.append(\"backendid\", backendid.toString());\r\n params = params.append(\"idaccount\", idaccount.toString());\r\n params = params.append(\"name\", dashboardName);\r\n return this.http.get<JaceDashboardLayoutDetail>(Repository[\"GET_Dashboard_GetLayout\"], params);\r\n }\r\n\r\n SaveUserDashboard(dto: SaveJaceDashboardLayoutDTO): Observable<CallResult> {\r\n return this.http.post<CallResult>(Repository[\"POST_Dashboard_SaveLayout\"], dto);\r\n }\r\n\r\n GetWidgetData(backendid:string,name: string, options: { [key: string]: string }): Observable<any> {\r\n let params = new HttpParams();\r\n params = params.append(\"backendid\", backendid.toString());\r\n params = params.append(\"name\", name.toString());\r\n if (options && Object.keys(options).length != 0) {\r\n for (let index = 0; index < Object.keys(options).length; index++) {\r\n const k = Object.keys(options)[index];\r\n params = params.append(k, options[k]);\r\n }\r\n }\r\n\r\n return this.http.get<any>(Repository[\"GET_Dashboard_GetWidgetData\"], params)\r\n }\r\n} \r\n\r\n","\r\nimport { Inject, ModuleWithProviders, NgModule, Optional } from '@angular/core';\r\n\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { GridsterModule } from 'angular-gridster2';\r\nimport { DSH_OPTIONS } from './private-injection-tokens';\r\nimport { DefaultDashboardModuleOptions } from './models/options/DefaultDashboardModuleOptions';\r\nimport { IDashboardModuleOptions } from './models/options/IDashboardModuleOptions';\r\nimport { DashboardWidgetFactory } from './services/DashboardWidgetFactory';\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\nimport { FormsAndValidationsModule } from '@esfaenza/forms-and-validations';\r\nimport { EsChartsModule } from '@esfaenza/es-charts';\r\nimport { JaceListWidgetComponent } from './components/widgets/list/jace-dsh-list.component';\r\nimport { JaceCounterWidgetComponent } from './components/widgets/counter/jace-dsh-counter.component';\r\nimport { JaceChartWidgetComponent } from './components/widgets/chart/jace-dsh-chart.component';\r\nimport { JaceMultiprogWidgetComponent } from './components/widgets/multiprog/jace-dsh-multiprog.component';\r\nimport { HttpserviceModule } from '@esfaenza/httpservice';\r\nimport { DashboardFeatureAPIDataService } from './services/dashboard-feature.service';\r\nimport { DSH_DATA_SERVICE } from './public-injection-tokens';\r\nimport { CircleProgressComponent } from './components/widgets/multiprog/circle-progress/circle-progress.component';\r\n\r\nconst MODULES = [\r\n // Base\r\n CommonModule,\r\n FormsModule,\r\n GridsterModule,\r\n FormsAndValidationsModule,\r\n EsChartsModule,\r\n HttpserviceModule\r\n];\r\n\r\nconst COMPONENTS = [\r\n DashboardComponent,\r\n JaceListWidgetComponent,\r\n JaceCounterWidgetComponent,\r\n JaceChartWidgetComponent,\r\n JaceMultiprogWidgetComponent,\r\n CircleProgressComponent\r\n];\r\n\r\n@NgModule({\r\n declarations: [...COMPONENTS],\r\n imports: [...MODULES],\r\n exports: [...COMPONENTS]\r\n})\r\nexport class DashboardFeatureModule {\r\n\r\n static forRoot(options?: IDashboardModuleOptions): ModuleWithProviders<DashboardFeatureModule> {\r\n return {\r\n ngModule: DashboardFeatureModule,\r\n providers: [\r\n { provide: DSH_OPTIONS, multi: true, useValue: new DefaultDashboardModuleOptions() },\r\n { provide: DSH_OPTIONS, multi: true, useValue: options },\r\n { provide: DSH_DATA_SERVICE, useClass: DashboardFeatureAPIDataService },\r\n DashboardWidgetFactory\r\n ]\r\n };\r\n }\r\n\r\n constructor(componentFactory: DashboardWidgetFactory, @Optional() @Inject(DSH_OPTIONS) options: IDashboardModuleOptions[]) {\r\n if (!options)\r\n return;\r\n \r\n options.map((o) => componentFactory.addOption(o));\r\n }\r\n}\r\n","import { GridsterConfig, GridType } from 'angular-gridster2';\r\n\r\n\r\n/**\r\n * Configurazione della dashboard\r\n */\r\nexport class JaceDashboardConfig {\r\n\r\n /**\r\n * Id del backend a cui verranno indirizzate le chiamate di questa dashboard.\r\n * Deve essere uno di quelli definiti in appsetting.json del FE nella sezione **Backends**.\r\n */\r\n backendId: string=\"default_backend\";\r\n\r\n /**\r\n * Nome della dashboard (deve essere univoco nel modulo).\r\n * Deve essere 'conosciuto' nel BE in modo da ottenere il layout delle widget da visualizzare.\r\n * Verrà usato anche per salvare le preferenze dell'account (widget ridimensionate/spostate/eliminate)\r\n */\r\n dashboardName!: string;\r\n \r\n /**\r\n * ID dell'account dell'utente che deve visualizzare la dashboard.\r\n * HINT: Leggerlo da JaceIdentity dell'account al momento loggato.\r\n */ \r\n accountId!: number;\r\n \r\n /**\r\n * Configurazioni specifiche del layout di [Gridster2](https://tiberiuzuld.github.io/angular-gridster2/)\r\n */\r\n gridsterConfig: GridsterConfig;\r\n\r\n /**\r\n * Se questa dashboard contiene widget che mostrano dati che dipendono dalla data corrente\r\n * mostra il controllo (datetimepicker) per variare la data in base a cui mostrare i dati.\r\n * \r\n * NOTA: showToolbar deve essere a true.\r\n * \r\n * Default = false\r\n */\r\n showDateInput: boolean =false;\r\n \r\n /**\r\n * Mostrare la toolbar in cima alla dashboard che contiene il titolo, il pulsante per salvare il proprio layout personalizzato\r\n * e il picker per scegliere la data nel caso che le widget nella dashboard mostrino dati dipendenti dalla data.\r\n * \r\n * Default = true\r\n */\r\n showToolbar: boolean = true;\r\n\r\n /**\r\n * Titolo della dashboard mostrato in cima al layout all'interno della toolbar.\r\n * \r\n * NOTA: showToolbar deve essere a true.\r\n * \r\n * Default = undefined\r\n */\r\n dashboardTitle: string = undefined;\r\n\r\n\r\n constructor() {\r\n //default per gridster\r\n this.gridsterConfig = {\r\n maxCols: 10,\r\n maxRows: 10,\r\n minCols: 5,\r\n minRows: 6,\r\n defaultItemCols: 1,\r\n defaultItemRows: 1,\r\n disablePushOnDrag: true,\r\n draggable: { enabled: true, ignoreContent: true },\r\n displayGrid: \"onDrag&Resize\",\r\n gridType: GridType.Fit,\r\n resizable: { enabled: true },\r\n /* fixedRowHeight: 164, */\r\n setGridSize: true,\r\n //compactType: \"compactUp&Left\"\r\n /* itemChangeCallback: AppComponent.itemChange,\r\n itemResizeCallback: AppComponent.itemResize, */\r\n }; \r\n }\r\n\r\n \r\n \r\n\r\n\r\n}","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport {JaceDashboardLayoutDetail} from \"./JaceDashboardLayoutDetail\";\r\n\r\nexport class JaceDashboardLayoutAppSearch extends AppSearch<JaceDashboardLayoutDetail> {\r\n backendid:string=\"default_backend\";\r\n filtname?: string;\r\n}\r\n","import { JaceWidgetInstanceDetail } from \"./JaceWidgetInstanceDetail\";\r\n\r\n//Definizione del layout della dashboard definito dal Backend\r\nexport class JaceDashboardLayoutDetail {\r\n\r\n\t//Account di questa dashboard\r\n\taccountid!: number;\r\n\r\n\t//Nome della dashboard (univoco)\r\n\tname!: string;\r\n\r\n\t//Definizione delle widget in questo layout\r\n\twidgets!: JaceWidgetInstanceDetail[];\r\n\r\n}","\r\nimport { EventEmitter, Inject, Injectable, SimpleChanges } from \"@angular/core\";\r\nimport { IJaceWidgetModel } from \"../../models/widgets/IJaceWidgetModel\";\r\nimport { IWidgetComponent } from \"./IWidgetComponent\";\r\nimport { IDashboardFeatureDataService } from \"../../services/IDashboardFeatureDataService\";\r\nimport { DSH_DATA_SERVICE } from \"../../public-injection-tokens\";\r\n\r\n/**\r\n * Classe di base astratta per la creazione di Widget custom.\r\n */\r\n @Injectable()\r\nexport abstract class BaseWidgetComponent<T extends IJaceWidgetModel> implements IWidgetComponent{\r\n\r\n model?: T;\r\n\r\n DashboardDate!: Date;\r\n OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) protected dshService: IDashboardFeatureDataService) { }\r\n\r\n setWidgetModel(dshBackendId:string, widgetModel: IJaceWidgetModel): void {\r\n \r\n this.model = <T>widgetModel;\r\n\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Prepara i parametri e lancia la chiamata GetWidgetData della DashboardFeatureService.\r\n * Imposta il model con i dati restituiti (setData) e imposta la variabile dataReady del campo a true\r\n */\r\n refreshData() : void {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.prepareGetDataParameters(pars);\r\n\r\n this.dshService.GetWidgetData(this.model.backendid, this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n } \r\n /**\r\n * Modifica/aggiorna i parametri della chiamata GetWidgetData prima di eseguirla. * \r\n * \r\n * @param pars parametri della chiamata. Se impostata, già contengono il parametro 'DT' con la data selezionata a livello di dashboard\r\n */\r\n abstract prepareGetDataParameters(pars: { [key: string]: string; }) :void;\r\n\r\n /**\r\n * Da chiamare quando l'utente preme il pulsante 'rimuovi' nella toolbar della widget.\r\n */\r\n removeWidget() :void{\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n /**\r\n * Da chiamare quando viene premuto il pulsante 'configure' nella toolbar della widget\r\n */\r\n configureWidget() :void{\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","export enum JaceWidgetTypes{\r\nCHART='CHART',\r\nCOUNTER='COUNTER',\r\nLIST='LIST',\r\nMULTIPROGRESS='MULTIPROGRESS'\r\n}","/*\r\n * Public API Surface of dashboard-feature\r\n */\r\n\r\n\r\nexport * from './lib/public-injection-tokens';\r\nexport * from './lib/dashboard-feature.module';\r\n\r\n\r\n\r\n//MODELS\r\n// CONFIG\r\nexport * from './lib/models/config/JaceDashboardConfig';\r\n// EXTERNALS\r\nexport * from './lib/models/externals/JaceDashboardLayoutAppSearch';\r\nexport * from './lib/models/externals/JaceDashboardLayoutDetail';\r\nexport * from './lib/models/externals/JaceWidgetInstanceDetail';\r\nexport * from './lib/models/externals/SaveJaceDashboardLayoutDTO';\r\n// OPTIONS\r\nexport * from './lib/models/options/IWidgetTypeConfig';\r\nexport * from './lib/models/options/IDashboardModuleOptions';\r\nexport * from './lib/models/options/DefaultDashboardModuleOptions';\r\n// WIDGETS\r\nexport * from './lib/models/widgets/IJaceWidgetModel';\r\nexport * from './lib/models/widgets/BaseJaceWidgetModel';\r\n\r\n\r\n//SERVICES\r\nexport * from './lib/services/IDashboardFeatureDataService';\r\nexport * from './lib/services/dashboard-feature.service';\r\nexport * from './lib/services/DashboardWidgetFactory';\r\n\r\n//COMPONENTS\r\nexport * from './lib/components/dashboard/dashboard.component';\r\nexport * from './lib/components/widgets/chart/jace-dsh-chart.component';\r\nexport * from './lib/components/widgets/counter/jace-dsh-counter.component';\r\nexport * from './lib/components/widgets/list/jace-dsh-list.component';\r\nexport * from './lib/components/widgets/multiprog/jace-dsh-multiprog.component';\r\nexport * from './lib/components/widgets/BaseWidgetComponent';\r\nexport * from './lib/components/widgets/IWidgetComponent';\r\nexport * from './lib/components/widgets/JaceWidgetTypes';\r\n\r\nexport * from './lib/components/widgets/multiprog/circle-progress/circle-progress.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.CircleProgressComponent","i3.DashboardWidgetFactory","i4"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-dashboard-feature.mjs","sources":["../../../projects/dashboard-feature/src/lib/public-injection-tokens.ts","../../../projects/dashboard-feature/src/lib/private-injection-tokens.ts","../../../projects/dashboard-feature/src/lib/components/widgets/chart/jace-dsh-chart.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/chart/jace-dsh-chart.component.html","../../../projects/dashboard-feature/src/lib/components/widgets/counter/jace-dsh-counter.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/counter/jace-dsh-counter.component.html","../../../projects/dashboard-feature/src/lib/components/widgets/list/jace-dsh-list.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/list/jace-dsh-list.component.html","../../../projects/dashboard-feature/src/lib/components/widgets/multiprog/circle-progress/circle-progress.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/multiprog/jace-dsh-multiprog.component.ts","../../../projects/dashboard-feature/src/lib/components/widgets/multiprog/jace-dsh-multiprog.component.html","../../../projects/dashboard-feature/src/lib/models/widgets/BaseJaceWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceChartWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceCounterWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceListWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/widgets/JaceMultiprogWidgetModel.ts","../../../projects/dashboard-feature/src/lib/models/options/DefaultDashboardModuleOptions.ts","../../../projects/dashboard-feature/src/lib/services/DashboardWidgetFactory.ts","../../../projects/dashboard-feature/src/lib/models/externals/SaveJaceDashboardLayoutDTO.ts","../../../projects/dashboard-feature/src/lib/models/externals/JaceWidgetInstanceDetail.ts","../../../projects/dashboard-feature/src/lib/components/dashboard/dashboard.component.ts","../../../projects/dashboard-feature/src/lib/components/dashboard/dashboard.component.html","../../../projects/dashboard-feature/src/lib/models/externals/Repository.ts","../../../projects/dashboard-feature/src/lib/services/dashboard-feature.service.ts","../../../projects/dashboard-feature/src/lib/dashboard-feature.module.ts","../../../projects/dashboard-feature/src/lib/models/config/JaceDashboardConfig.ts","../../../projects/dashboard-feature/src/lib/models/externals/JaceDashboardLayoutAppSearch.ts","../../../projects/dashboard-feature/src/lib/models/externals/JaceDashboardLayoutDetail.ts","../../../projects/dashboard-feature/src/lib/components/widgets/BaseWidgetComponent.ts","../../../projects/dashboard-feature/src/lib/components/widgets/JaceWidgetTypes.ts","../../../projects/dashboard-feature/src/public-api.ts","../../../projects/dashboard-feature/src/esfaenza-dashboard-feature.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\r\nimport { IDashboardFeatureDataService } from \"./services/IDashboardFeatureDataService\";\r\n\r\n/**\r\n * Token di registrazione della DashboardFeatureService.\r\n * Permette di fare l'override dell'implementazione di default a scopo di test delle widget\r\n */\r\nexport const DSH_DATA_SERVICE: InjectionToken<IDashboardFeatureDataService> = new InjectionToken<IDashboardFeatureDataService>('DSH_DATA_SERVICE');","import {InjectionToken} from \"@angular/core\";\r\nimport { IDashboardModuleOptions } from \"./models/options/IDashboardModuleOptions\";\r\n\r\n\r\nexport const DSH_OPTIONS: InjectionToken<IDashboardModuleOptions> = new InjectionToken<IDashboardModuleOptions>('DSH_MODULE_OPTIONS');","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\n\r\nimport { JaceChartWidgetModel } from '../../../models/widgets/JaceChartWidgetModel';\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-chart',\r\n templateUrl: './jace-dsh-chart.component.html',\r\n styleUrls: ['./jace-dsh-chart.component.css'],\r\n standalone: false\r\n})\r\n\r\nexport class JaceChartWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceChartWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n public chartName:string=\"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService) { }\r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceChartWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid,this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.chartName = this.model.name;\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n\r\n <div class=\"jace-dsh-chart-container jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <!-- [Type]=\"Widget.chartType\" -->\r\n <h6 *ngIf=\"model?.queryerror\" class=\"fg-disabled\" style=\"margin-top: 0.5rem;\"><span\r\n class=\"fa fa-times-circle-o\"></span>&nbsp;&nbsp;Error retrieving data</h6>\r\n <es-chart [Legend]=\"model.legend\" [Theme]=\"'dataviz'\" [Type]=\"model.chartType\" [Data]=\"model.chartData\"\r\n [name]=\"chartName\"></es-chart>\r\n </div>\r\n\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\nimport { JaceCounterWidgetModel } from '../../../models/widgets/JaceCounterWidgetModel';\r\n\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-counter',\r\n templateUrl: './jace-dsh-counter.component.html',\r\n styleUrls: ['./jace-dsh-counter.component.css'],\r\n standalone: false\r\n //TODO per online update: scommentare OnPush\r\n //changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class JaceCounterWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceCounterWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService) { }\r\n\r\n//TODO per online update: importare cdr: ChangeDectectorRef \r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceCounterWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid,this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n \r\n this.dataReady = true;\r\n //TODO per online update: this.cdr.markForCheck(); \r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n <div class=\"jace-dsh-counter-body jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <i class=\"jace-dsh-counter-icon fa fa-2x\" [ngClass]=\"[ model.icon ? model.icon : '']\" *ngIf=\"model.icon\"></i>\r\n <div class=\"jace-dsh-counter-super\">{{model.superText}}</div>\r\n <div class=\"jace-dsh-counter-value\"><span>{{model.value}}</span> <span\r\n class=\"jace-dsh-counter-unit\">{{model.unit}}</span> </div>\r\n\r\n <div class=\"jace-dsh-counter-sub\">{{model.subText}}</div>\r\n </div>\r\n\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\nimport { JaceListItemWidget, JaceListWidgetModel } from '../../../models/widgets/JaceListWidgetModel';\r\nimport { Router } from '@angular/router';\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-list',\r\n templateUrl: './jace-dsh-list.component.html',\r\n styleUrls: ['./jace-dsh-list.component.css'],\r\n standalone: false\r\n})\r\n\r\nexport class JaceListWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceListWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService,private router: Router) { }\r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceListWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid, this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n itemClicked(item: JaceListItemWidget){\r\n if(item.link)\r\n {\r\n //naviga al link\r\n let to = item.link;\r\n let par:{[key:string]:any} = {};\r\n if(item.id && item.idParamName){ \r\n par[item.idParamName] = item.id;\r\n }\r\n \r\n this.router.navigate([to, par]);\r\n }\r\n }\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner fa-spin\"></i>\r\n </div>\r\n <div class=\"jace-dsh-list-body jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <div class=\"jace-dsh-list-super-text\" *ngIf=\"model.superText\">{{model.superText}}</div>\r\n <div class=\"jace-dsh-list-item\" (click)=\"itemClicked(item)\" [class.jace-dsh-list-link]=\"item.link\"\r\n *ngFor=\"let item of model.items\">\r\n <div>\r\n <span class=\"jace-dsh-list-item-id\" *ngIf=\"item.id && item.showId\">{{item.id}}</span>\r\n <span>{{item.description}}</span>\r\n </div>\r\n <div *ngIf=\"item.subline\">\r\n <span class=\"jace-dsh-list-item-subline\">{{item.subline}}</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnChanges, Output, OnInit, OnDestroy, ElementRef, SimpleChanges, NgZone, Injector } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subscription, timer } from 'rxjs';\r\n\r\nexport interface CircleProgressOptionsInterface {\r\n class?: string;\r\n backgroundGradient?: boolean;\r\n backgroundColor?: string;\r\n backgroundGradientStopColor?: string;\r\n backgroundOpacity?: number;\r\n backgroundStroke?: string;\r\n backgroundStrokeWidth?: number;\r\n backgroundPadding?: number;\r\n percent?: number;\r\n radius?: number;\r\n space?: number;\r\n toFixed?: number;\r\n maxPercent?: number;\r\n renderOnClick?: boolean;\r\n units?: string;\r\n unitsFontSize?: string;\r\n unitsFontWeight?: string;\r\n unitsColor?: string;\r\n outerStrokeGradient?: boolean;\r\n outerStrokeWidth?: number;\r\n outerStrokeColor?: string;\r\n outerStrokeGradientStopColor?: string;\r\n outerStrokeLinecap?: string;\r\n innerStrokeColor?: string;\r\n innerStrokeWidth?: number;\r\n titleFormat?: Function;\r\n title?: string | Array<String>;\r\n titleColor?: string;\r\n titleFontSize?: string;\r\n titleFontWeight?: string;\r\n subtitleFormat?: Function;\r\n subtitle?: string | Array<String>;\r\n subtitleColor?: string;\r\n subtitleFontSize?: string;\r\n subtitleFontWeight?: string;\r\n imageSrc?: string;\r\n imageHeight?: number;\r\n imageWidth?: number;\r\n animation?: boolean;\r\n animateTitle?: boolean;\r\n animateSubtitle?: boolean;\r\n animationDuration?: number;\r\n showTitle?: boolean;\r\n showSubtitle?: boolean;\r\n showUnits?: boolean;\r\n showImage?: boolean;\r\n showBackground?: boolean;\r\n showInnerStroke?: boolean;\r\n clockwise?: boolean;\r\n responsive?: boolean;\r\n startFromZero?: boolean;\r\n showZeroOuterStroke?: boolean;\r\n lazy?: boolean;\r\n}\r\n\r\nexport class CircleProgressOptions implements CircleProgressOptionsInterface {\r\n class = '';\r\n backgroundGradient = false;\r\n backgroundColor = 'transparent';\r\n backgroundGradientStopColor = 'transparent';\r\n backgroundOpacity = 1;\r\n backgroundStroke = 'transparent';\r\n backgroundStrokeWidth = 0;\r\n backgroundPadding = 5;\r\n percent = 0;\r\n radius = 90;\r\n space = 4;\r\n toFixed = 0;\r\n maxPercent = 1000;\r\n renderOnClick = true;\r\n units = '%';\r\n unitsFontSize = '10';\r\n unitsFontWeight = 'normal';\r\n unitsColor = '#444444';\r\n outerStrokeGradient = false;\r\n outerStrokeWidth = 8;\r\n outerStrokeColor = '#78C000';\r\n outerStrokeGradientStopColor = 'transparent';\r\n outerStrokeLinecap = 'round';\r\n innerStrokeColor = '#C7E596';\r\n innerStrokeWidth = 4;\r\n titleFormat = undefined;\r\n title: string | Array<String> = 'auto';\r\n titleColor = '#444444';\r\n titleFontSize = '20';\r\n titleFontWeight = 'normal';\r\n subtitleFormat = undefined;\r\n subtitle: string | Array<String> = 'progress';\r\n subtitleColor = '#A9A9A9';\r\n subtitleFontSize = '10';\r\n subtitleFontWeight = 'normal';\r\n imageSrc = undefined;\r\n imageHeight = 0;\r\n imageWidth = 0;\r\n animation = true;\r\n animateTitle = true;\r\n animateSubtitle = false;\r\n animationDuration = 500;\r\n showTitle = true;\r\n showSubtitle = true;\r\n showUnits = true;\r\n showImage = false;\r\n showBackground = true;\r\n showInnerStroke = true;\r\n clockwise = true;\r\n responsive = false;\r\n startFromZero = true;\r\n showZeroOuterStroke = true;\r\n lazy = false;\r\n}\r\n\r\n@Component({\r\n selector: 'circle-progress',\r\n standalone: false,\r\n template: `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" *ngIf=\"svg\"\r\n [attr.viewBox]=\"svg.viewBox\" preserveAspectRatio=\"xMidYMid meet\"\r\n [attr.height]=\"svg.height\" [attr.width]=\"svg.width\" (click)=\"emitClickEvent($event)\" [attr.class]=\"options.class\">\r\n <defs>\r\n <linearGradient *ngIf=\"options.outerStrokeGradient\" [attr.id]=\"svg.outerLinearGradient.id\">\r\n <stop offset=\"5%\" [attr.stop-color]=\"svg.outerLinearGradient.colorStop1\" [attr.stop-opacity]=\"1\"/>\r\n <stop offset=\"95%\" [attr.stop-color]=\"svg.outerLinearGradient.colorStop2\" [attr.stop-opacity]=\"1\"/>\r\n </linearGradient>\r\n <radialGradient *ngIf=\"options.backgroundGradient\" [attr.id]=\"svg.radialGradient.id\">\r\n <stop offset=\"5%\" [attr.stop-color]=\"svg.radialGradient.colorStop1\" [attr.stop-opacity]=\"1\"/>\r\n <stop offset=\"95%\" [attr.stop-color]=\"svg.radialGradient.colorStop2\" [attr.stop-opacity]=\"1\"/>\r\n </radialGradient>\r\n </defs>\r\n <ng-container *ngIf=\"options.showBackground\">\r\n <circle *ngIf=\"!options.backgroundGradient\"\r\n [attr.cx]=\"svg.backgroundCircle.cx\"\r\n [attr.cy]=\"svg.backgroundCircle.cy\"\r\n [attr.r]=\"svg.backgroundCircle.r\"\r\n [attr.fill]=\"svg.backgroundCircle.fill\"\r\n [attr.fill-opacity]=\"svg.backgroundCircle.fillOpacity\"\r\n [attr.stroke]=\"svg.backgroundCircle.stroke\"\r\n [attr.stroke-width]=\"svg.backgroundCircle.strokeWidth\"/>\r\n <circle *ngIf=\"options.backgroundGradient\"\r\n [attr.cx]=\"svg.backgroundCircle.cx\"\r\n [attr.cy]=\"svg.backgroundCircle.cy\"\r\n [attr.r]=\"svg.backgroundCircle.r\"\r\n attr.fill=\"url({{window.location.href}}#{{svg.radialGradient.id}})\"\r\n [attr.fill-opacity]=\"svg.backgroundCircle.fillOpacity\"\r\n [attr.stroke]=\"svg.backgroundCircle.stroke\"\r\n [attr.stroke-width]=\"svg.backgroundCircle.strokeWidth\"/>\r\n </ng-container> \r\n <circle *ngIf=\"options.showInnerStroke\"\r\n [attr.cx]=\"svg.circle.cx\"\r\n [attr.cy]=\"svg.circle.cy\"\r\n [attr.r]=\"svg.circle.r\"\r\n [attr.fill]=\"svg.circle.fill\"\r\n [attr.stroke]=\"svg.circle.stroke\"\r\n [attr.stroke-width]=\"svg.circle.strokeWidth\"/>\r\n <ng-container *ngIf=\"+options.percent!==0 || options.showZeroOuterStroke\">\r\n <path *ngIf=\"!options.outerStrokeGradient\"\r\n [attr.d]=\"svg.path.d\"\r\n [attr.stroke]=\"svg.path.stroke\"\r\n [attr.stroke-width]=\"svg.path.strokeWidth\"\r\n [attr.stroke-linecap]=\"svg.path.strokeLinecap\"\r\n [attr.fill]=\"svg.path.fill\"/>\r\n <path *ngIf=\"options.outerStrokeGradient\"\r\n [attr.d]=\"svg.path.d\"\r\n attr.stroke=\"url({{window.location.href}}#{{svg.outerLinearGradient.id}})\"\r\n [attr.stroke-width]=\"svg.path.strokeWidth\"\r\n [attr.stroke-linecap]=\"svg.path.strokeLinecap\"\r\n [attr.fill]=\"svg.path.fill\"/>\r\n </ng-container>\r\n <text *ngIf=\"!options.showImage && (options.showTitle || options.showUnits || options.showSubtitle)\"\r\n alignment-baseline=\"baseline\"\r\n [attr.x]=\"svg.circle.cx\"\r\n [attr.y]=\"svg.circle.cy\"\r\n [attr.text-anchor]=\"svg.title.textAnchor\">\r\n <ng-container *ngIf=\"options.showTitle\">\r\n <tspan *ngFor=\"let tspan of svg.title.tspans\"\r\n [attr.x]=\"svg.title.x\"\r\n [attr.y]=\"svg.title.y\"\r\n [attr.dy]=\"tspan.dy\"\r\n [attr.font-size]=\"svg.title.fontSize\"\r\n [attr.font-weight]=\"svg.title.fontWeight\"\r\n [attr.fill]=\"svg.title.color\">{{tspan.span}}</tspan>\r\n </ng-container>\r\n <tspan *ngIf=\"options.showUnits\"\r\n [attr.font-size]=\"svg.units.fontSize\"\r\n [attr.font-weight]=\"svg.units.fontWeight\"\r\n [attr.fill]=\"svg.units.color\">{{svg.units.text}}</tspan>\r\n <ng-container *ngIf=\"options.showSubtitle\">\r\n <tspan *ngFor=\"let tspan of svg.subtitle.tspans\"\r\n [attr.x]=\"svg.subtitle.x\"\r\n [attr.y]=\"svg.subtitle.y\"\r\n [attr.dy]=\"tspan.dy\"\r\n [attr.font-size]=\"svg.subtitle.fontSize\"\r\n [attr.font-weight]=\"svg.subtitle.fontWeight\"\r\n [attr.fill]=\"svg.subtitle.color\">{{tspan.span}}</tspan>\r\n </ng-container>\r\n </text>\r\n <image *ngIf=\"options.showImage\" preserveAspectRatio=\"none\" \r\n [attr.height]=\"svg.image.height\"\r\n [attr.width]=\"svg.image.width\"\r\n [attr.xlink:href]=\"svg.image.src\"\r\n [attr.x]=\"svg.image.x\"\r\n [attr.y]=\"svg.image.y\"\r\n />\r\n </svg>\r\n `\r\n})\r\nexport class CircleProgressComponent implements OnChanges, OnInit, OnDestroy {\r\n\r\n @Output() onClick = new EventEmitter<MouseEvent>();\r\n\r\n @Input() name: string;\r\n @Input() class: string;\r\n @Input() backgroundGradient: boolean;\r\n @Input() backgroundColor: string;\r\n @Input() backgroundGradientStopColor: String;\r\n @Input() backgroundOpacity: number;\r\n @Input() backgroundStroke: string;\r\n @Input() backgroundStrokeWidth: number;\r\n @Input() backgroundPadding: number;\r\n\r\n @Input() radius: number;\r\n @Input() space: number;\r\n @Input() percent: number;\r\n @Input() toFixed: number;\r\n @Input() maxPercent: number;\r\n @Input() renderOnClick: boolean;\r\n\r\n @Input() units: string;\r\n @Input() unitsFontSize: string;\r\n @Input() unitsFontWeight: string;\r\n @Input() unitsColor: string;\r\n\r\n @Input() outerStrokeGradient: boolean;\r\n @Input() outerStrokeWidth: number;\r\n @Input() outerStrokeColor: string;\r\n @Input() outerStrokeGradientStopColor: String;\r\n @Input() outerStrokeLinecap: string;\r\n\r\n @Input() innerStrokeColor: string;\r\n @Input() innerStrokeWidth: string | number;\r\n\r\n @Input() titleFormat: Function;\r\n @Input() title: string | Array<String>;\r\n @Input() titleColor: string;\r\n @Input() titleFontSize: string;\r\n @Input() titleFontWeight: string;\r\n\r\n @Input() subtitleFormat: Function;\r\n @Input() subtitle: string | string[];\r\n @Input() subtitleColor: string;\r\n @Input() subtitleFontSize: string;\r\n @Input() subtitleFontWeight: string;\r\n\r\n @Input() imageSrc: string;\r\n @Input() imageHeight: number;\r\n @Input() imageWidth: number;\r\n\r\n @Input() animation: boolean;\r\n @Input() animateTitle: boolean;\r\n @Input() animateSubtitle: boolean;\r\n @Input() animationDuration: number;\r\n\r\n @Input() showTitle: boolean;\r\n @Input() showSubtitle: boolean;\r\n @Input() showUnits: boolean;\r\n @Input() showImage: boolean;\r\n @Input() showBackground: boolean;\r\n @Input() showInnerStroke: boolean;\r\n @Input() clockwise: boolean;\r\n @Input() responsive: boolean;\r\n @Input() startFromZero: boolean;\r\n @Input() showZeroOuterStroke: boolean;\r\n\r\n @Input() lazy: boolean;\r\n\r\n @Input('options') templateOptions: CircleProgressOptions;\r\n\r\n // <svg> of component\r\n svgElement: HTMLElement = null;\r\n // whether <svg> is in viewport\r\n isInViewport: Boolean = false;\r\n // event for notifying viewport change caused by scrolling or resizing\r\n onViewportChanged: EventEmitter<{ oldValue: Boolean, newValue: Boolean }> = new EventEmitter();\r\n window: Window;\r\n _viewportChangedSubscriber: Subscription = null;\r\n\r\n svg: any;\r\n\r\n options: CircleProgressOptions = new CircleProgressOptions();\r\n defaultOptions: CircleProgressOptions = new CircleProgressOptions();\r\n _lastPercent: number = 0;\r\n _gradientUUID: string = null;\r\n render = () => {\r\n\r\n this.applyOptions();\r\n\r\n if (this.options.lazy) {\r\n // Draw svg if it doesn't exist\r\n this.svgElement === null && this.draw(this._lastPercent);\r\n // Draw it only when it's in the viewport\r\n if (this.isInViewport) {\r\n // Draw it at the latest position when I am in.\r\n if (this.options.animation && this.options.animationDuration > 0) {\r\n this.animate(this._lastPercent, this.options.percent);\r\n } else {\r\n this.draw(this.options.percent);\r\n }\r\n this._lastPercent = this.options.percent;\r\n }\r\n } else {\r\n if (this.options.animation && this.options.animationDuration > 0) {\r\n this.animate(this._lastPercent, this.options.percent);\r\n } else {\r\n this.draw(this.options.percent);\r\n }\r\n this._lastPercent = this.options.percent;\r\n }\r\n };\r\n polarToCartesian = (centerX: number, centerY: number, radius: number, angleInDegrees: number) => {\r\n let angleInRadius = angleInDegrees * Math.PI / 180;\r\n let x = centerX + Math.sin(angleInRadius) * radius;\r\n let y = centerY - Math.cos(angleInRadius) * radius;\r\n return { x: x, y: y };\r\n };\r\n draw = (percent: number) => {\r\n // make percent reasonable\r\n percent = (percent === undefined) ? this.options.percent : Math.abs(percent);\r\n // circle percent shouldn't be greater than 100%.\r\n let circlePercent = (percent > 100) ? 100 : percent;\r\n // determine box size\r\n let boxSize = this.options.radius * 2 + this.options.outerStrokeWidth * 2;\r\n if (this.options.showBackground) {\r\n boxSize += (this.options.backgroundStrokeWidth * 2 + this.max(0, this.options.backgroundPadding * 2));\r\n }\r\n // the centre of the circle\r\n let centre = { x: boxSize / 2, y: boxSize / 2 };\r\n // the start point of the arc\r\n let startPoint = { x: centre.x, y: centre.y - this.options.radius };\r\n // get the end point of the arc\r\n let endPoint = this.polarToCartesian(centre.x, centre.y, this.options.radius, 360 * (this.options.clockwise ?\r\n circlePercent :\r\n (100 - circlePercent)) / 100); // ####################\r\n // We'll get an end point with the same [x, y] as the start point when percent is 100%, so move x a little bit.\r\n if (circlePercent === 100) {\r\n endPoint.x = endPoint.x + (this.options.clockwise ? -0.01 : +0.01);\r\n }\r\n // largeArcFlag and sweepFlag\r\n let largeArcFlag: any, sweepFlag: any;\r\n if (circlePercent > 50) {\r\n [largeArcFlag, sweepFlag] = this.options.clockwise ? [1, 1] : [1, 0];\r\n } else {\r\n [largeArcFlag, sweepFlag] = this.options.clockwise ? [0, 1] : [0, 0];\r\n }\r\n // percent may not equal the actual percent\r\n let titlePercent = this.options.animateTitle ? percent : this.options.percent;\r\n let titleTextPercent = titlePercent > this.options.maxPercent ?\r\n `${this.options.maxPercent.toFixed(this.options.toFixed)}+` : titlePercent.toFixed(this.options.toFixed);\r\n let subtitlePercent = this.options.animateSubtitle ? percent : this.options.percent;\r\n // get title object\r\n let title = {\r\n x: centre.x,\r\n y: centre.y,\r\n textAnchor: 'middle',\r\n color: this.options.titleColor,\r\n fontSize: this.options.titleFontSize,\r\n fontWeight: this.options.titleFontWeight,\r\n texts: [],\r\n tspans: []\r\n };\r\n // from v0.9.9, both title and titleFormat(...) may be an array of string.\r\n if (this.options.titleFormat !== undefined && this.options.titleFormat.constructor.name === 'Function') {\r\n let formatted = this.options.titleFormat(titlePercent);\r\n if (formatted instanceof Array) {\r\n title.texts = [...formatted];\r\n } else {\r\n title.texts.push(formatted.toString());\r\n }\r\n } else {\r\n if (this.options.title === 'auto') {\r\n title.texts.push(titleTextPercent);\r\n } else {\r\n if (this.options.title instanceof Array) {\r\n title.texts = [...this.options.title]\r\n } else {\r\n title.texts.push(this.options.title.toString());\r\n }\r\n }\r\n }\r\n // get subtitle object\r\n let subtitle = {\r\n x: centre.x,\r\n y: centre.y,\r\n textAnchor: 'middle',\r\n color: this.options.subtitleColor,\r\n fontSize: this.options.subtitleFontSize,\r\n fontWeight: this.options.subtitleFontWeight,\r\n texts: [],\r\n tspans: []\r\n }\r\n // from v0.9.9, both subtitle and subtitleFormat(...) may be an array of string.\r\n if (this.options.subtitleFormat !== undefined && this.options.subtitleFormat.constructor.name === 'Function') {\r\n let formatted = this.options.subtitleFormat(subtitlePercent);\r\n if (formatted instanceof Array) {\r\n subtitle.texts = [...formatted];\r\n } else {\r\n subtitle.texts.push(formatted.toString());\r\n }\r\n } else {\r\n if (this.options.subtitle instanceof Array) {\r\n subtitle.texts = [...this.options.subtitle]\r\n } else {\r\n subtitle.texts.push(this.options.subtitle.toString());\r\n }\r\n }\r\n // get units object\r\n let units = {\r\n text: `${this.options.units}`,\r\n fontSize: this.options.unitsFontSize,\r\n fontWeight: this.options.unitsFontWeight,\r\n color: this.options.unitsColor\r\n };\r\n // get total count of text lines to be shown\r\n let rowCount = 0, rowNum = 1;\r\n this.options.showTitle && (rowCount += title.texts.length);\r\n this.options.showSubtitle && (rowCount += subtitle.texts.length);\r\n // calc dy for each tspan for title\r\n if (this.options.showTitle) {\r\n for (let span of title.texts) {\r\n title.tspans.push({ span: span, dy: this.getRelativeY(rowNum, rowCount) });\r\n rowNum++;\r\n }\r\n }\r\n // calc dy for each tspan for subtitle\r\n if (this.options.showSubtitle) {\r\n for (let span of subtitle.texts) {\r\n subtitle.tspans.push({ span: span, dy: this.getRelativeY(rowNum, rowCount) })\r\n rowNum++;\r\n }\r\n }\r\n // create ID for gradient element\r\n if (null === this._gradientUUID) {\r\n this._gradientUUID = this.uuid();\r\n }\r\n // Bring it all together\r\n this.svg = {\r\n viewBox: `0 0 ${boxSize} ${boxSize}`,\r\n // Set both width and height to '100%' if it's responsive\r\n width: this.options.responsive ? '100%' : boxSize,\r\n height: this.options.responsive ? '100%' : boxSize,\r\n backgroundCircle: {\r\n cx: centre.x,\r\n cy: centre.y,\r\n r: this.options.radius + this.options.outerStrokeWidth / 2 + this.options.backgroundPadding,\r\n fill: this.options.backgroundColor,\r\n fillOpacity: this.options.backgroundOpacity,\r\n stroke: this.options.backgroundStroke,\r\n strokeWidth: this.options.backgroundStrokeWidth,\r\n },\r\n path: {\r\n // A rx ry x-axis-rotation large-arc-flag sweep-flag x y (https://developer.mozilla.org/en/docs/Web/SVG/Tutorial/Paths#Arcs)\r\n d: `M ${startPoint.x} ${startPoint.y}\r\n A ${this.options.radius} ${this.options.radius} 0 ${largeArcFlag} ${sweepFlag} ${endPoint.x} ${endPoint.y}`,\r\n stroke: this.options.outerStrokeColor,\r\n strokeWidth: this.options.outerStrokeWidth,\r\n strokeLinecap: this.options.outerStrokeLinecap,\r\n fill: 'none'\r\n },\r\n circle: {\r\n cx: centre.x,\r\n cy: centre.y,\r\n r: this.options.radius - this.options.space - this.options.outerStrokeWidth / 2 - this.options.innerStrokeWidth / 2,\r\n fill: 'none',\r\n stroke: this.options.innerStrokeColor,\r\n strokeWidth: this.options.innerStrokeWidth,\r\n },\r\n title: title,\r\n units: units,\r\n subtitle: subtitle,\r\n image: {\r\n x: centre.x - this.options.imageWidth / 2,\r\n y: centre.y - this.options.imageHeight / 2,\r\n src: this.options.imageSrc,\r\n width: this.options.imageWidth,\r\n height: this.options.imageHeight,\r\n },\r\n outerLinearGradient: {\r\n id: 'outer-linear-' + this._gradientUUID,\r\n colorStop1: this.options.outerStrokeColor,\r\n colorStop2: this.options.outerStrokeGradientStopColor === 'transparent' ? '#FFF' : this.options.outerStrokeGradientStopColor,\r\n },\r\n radialGradient: {\r\n id: 'radial-' + this._gradientUUID,\r\n colorStop1: this.options.backgroundColor,\r\n colorStop2: this.options.backgroundGradientStopColor === 'transparent' ? '#FFF' : this.options.backgroundGradientStopColor,\r\n }\r\n };\r\n };\r\n getAnimationParameters = (previousPercent: number, currentPercent: number) => {\r\n const MIN_INTERVAL = 10;\r\n let times: number, step: number, interval: number;\r\n let fromPercent = this.options.startFromZero ? 0 : (previousPercent < 0 ? 0 : previousPercent);\r\n let toPercent = currentPercent < 0 ? 0 : this.min(currentPercent, this.options.maxPercent);\r\n let delta = Math.abs(Math.round(toPercent - fromPercent));\r\n\r\n if (delta >= 100) {\r\n // we will finish animation in 100 times\r\n times = 100;\r\n if (!this.options.animateTitle && !this.options.animateSubtitle) {\r\n step = 1;\r\n } else {\r\n // show title or subtitle animation even if the arc is full, we also need to finish it in 100 times.\r\n step = Math.round(delta / times);\r\n }\r\n } else {\r\n // we will finish in as many times as the number of percent.\r\n times = delta;\r\n step = 1;\r\n }\r\n // Get the interval of timer\r\n interval = Math.round(this.options.animationDuration / times);\r\n // Readjust all values if the interval of timer is extremely small.\r\n if (interval < MIN_INTERVAL) {\r\n interval = MIN_INTERVAL;\r\n times = this.options.animationDuration / interval;\r\n if (!this.options.animateTitle && !this.options.animateSubtitle && delta > 100) {\r\n step = Math.round(100 / times);\r\n } else {\r\n step = Math.round(delta / times);\r\n }\r\n }\r\n // step must be greater than 0.\r\n if (step < 1) {\r\n step = 1;\r\n }\r\n return { times: times, step: step, interval: interval };\r\n };\r\n animate = (previousPercent: number, currentPercent: number) => {\r\n if (this._timerSubscription && !this._timerSubscription.closed) {\r\n this._timerSubscription.unsubscribe();\r\n }\r\n let fromPercent = this.options.startFromZero ? 0 : previousPercent;\r\n let toPercent = currentPercent;\r\n let { step: step, interval: interval } = this.getAnimationParameters(fromPercent, toPercent);\r\n let count = fromPercent;\r\n if (fromPercent < toPercent) {\r\n this._timerSubscription = timer(0, interval).subscribe(() => {\r\n count += step;\r\n if (count <= toPercent) {\r\n if (!this.options.animateTitle && !this.options.animateSubtitle && count >= 100) {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n } else {\r\n this.draw(count);\r\n }\r\n } else {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n }\r\n });\r\n } else {\r\n this._timerSubscription = timer(0, interval).subscribe(() => {\r\n count -= step;\r\n if (count >= toPercent) {\r\n if (!this.options.animateTitle && !this.options.animateSubtitle && toPercent >= 100) {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n } else {\r\n this.draw(count);\r\n }\r\n } else {\r\n this.draw(toPercent);\r\n this._timerSubscription.unsubscribe();\r\n }\r\n });\r\n }\r\n };\r\n emitClickEvent(event: MouseEvent): void {\r\n if (this.options.renderOnClick) {\r\n this.animate(0, this.options.percent);\r\n }\r\n if (this.onClick.observers.length > 0) {\r\n this.onClick.emit(event);\r\n }\r\n }\r\n private _timerSubscription: Subscription;\r\n private applyOptions = () => {\r\n // the options of <circle-progress> may change already\r\n for (let name of Object.keys(this.options)) {\r\n if (this.hasOwnProperty(name) && this[name] !== undefined) {\r\n this.options[name] = this[name];\r\n } else if (this.templateOptions && this.templateOptions[name] !== undefined) {\r\n this.options[name] = this.templateOptions[name];\r\n }\r\n }\r\n // make sure key options valid\r\n this.options.radius = Math.abs(+this.options.radius);\r\n this.options.space = +this.options.space;\r\n this.options.percent = +this.options.percent > 0 ? +this.options.percent : 0;\r\n this.options.maxPercent = Math.abs(+this.options.maxPercent);\r\n this.options.animationDuration = Math.abs(this.options.animationDuration);\r\n this.options.outerStrokeWidth = Math.abs(+this.options.outerStrokeWidth);\r\n this.options.innerStrokeWidth = Math.abs(+this.options.innerStrokeWidth);\r\n this.options.backgroundPadding = +this.options.backgroundPadding;\r\n };\r\n private getRelativeY = (rowNum: number, rowCount: number): string => {\r\n // why '-0.18em'? It's a magic number when property 'alignment-baseline' equals 'baseline'. :)\r\n let initialOffset = -0.18, offset = 1;\r\n return (initialOffset + offset * (rowNum - rowCount / 2)).toFixed(2) + 'em';\r\n };\r\n\r\n private min = (a: number, b: number) => {\r\n return a < b ? a : b;\r\n };\r\n\r\n private max = (a: number, b: number) => {\r\n return a > b ? a : b;\r\n };\r\n\r\n private uuid = () => {\r\n // https://www.w3resource.com/javascript-exercises/javascript-math-exercise-23.php\r\n var dt = new Date().getTime();\r\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (dt + Math.random() * 16) % 16 | 0;\r\n dt = Math.floor(dt / 16);\r\n return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n return uuid;\r\n }\r\n\r\n public isDrawing(): boolean {\r\n return (this._timerSubscription && !this._timerSubscription.closed);\r\n }\r\n\r\n public findSvgElement(): void {\r\n if (this.svgElement === null) {\r\n let tags = this.elRef.nativeElement.getElementsByTagName('svg');\r\n if (tags.length > 0) {\r\n this.svgElement = tags[0];\r\n }\r\n }\r\n }\r\n\r\n private isElementInViewport(el): Boolean {\r\n // Return false if el has not been created in page.\r\n if (el === null || el === undefined) return false;\r\n // Check if the element is out of view due to a container scrolling\r\n let rect = el.getBoundingClientRect(), parent = el.parentNode, parentRect;\r\n do {\r\n parentRect = parent.getBoundingClientRect();\r\n if (rect.top >= parentRect.bottom) return false;\r\n if (rect.bottom <= parentRect.top) return false;\r\n if (rect.left >= parentRect.right) return false;\r\n if (rect.right <= parentRect.left) return false;\r\n parent = parent.parentNode;\r\n } while (parent != this.document.body);\r\n // Check its within the document viewport\r\n if (rect.top >= (this.window.innerHeight || this.document.documentElement.clientHeight)) return false;\r\n if (rect.bottom <= 0) return false;\r\n if (rect.left >= (this.window.innerWidth || this.document.documentElement.clientWidth)) return false;\r\n if (rect.right <= 0) return false;\r\n return true;\r\n }\r\n\r\n checkViewport = () => {\r\n this.findSvgElement();\r\n let previousValue = this.isInViewport;\r\n this.isInViewport = this.isElementInViewport(this.svgElement);\r\n if (previousValue !== this.isInViewport && this.onViewportChanged.observers.length > 0) {\r\n this.ngZone.run(() => {\r\n this.onViewportChanged.emit({ oldValue: previousValue, newValue: this.isInViewport });\r\n });\r\n }\r\n }\r\n\r\n onScroll = (event: Event) => {\r\n this.checkViewport();\r\n }\r\n\r\n loadEventsForLazyMode = () => {\r\n if (this.options.lazy) {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.document.addEventListener('scroll', this.onScroll, true);\r\n this.window.addEventListener('resize', this.onScroll, true);\r\n });\r\n if (this._viewportChangedSubscriber === null) {\r\n this._viewportChangedSubscriber = this.onViewportChanged.subscribe(({ oldValue, newValue }) => {\r\n newValue ? this.render() : null;\r\n });\r\n }\r\n // svgElement must be created in DOM before being checked.\r\n // Is there a better way to check the existence of svgElemnt?\r\n let _timer = timer(0, 50).subscribe(() => {\r\n this.svgElement === null ? this.checkViewport() : _timer.unsubscribe();\r\n })\r\n }\r\n }\r\n\r\n unloadEventsForLazyMode = () => {\r\n // Remove event listeners\r\n this.document.removeEventListener('scroll', this.onScroll, true);\r\n this.window.removeEventListener('resize', this.onScroll, true);\r\n // Unsubscribe onViewportChanged\r\n if (this._viewportChangedSubscriber !== null) {\r\n this._viewportChangedSubscriber.unsubscribe();\r\n this._viewportChangedSubscriber = null;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.loadEventsForLazyMode();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unloadEventsForLazyMode();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n\r\n this.render();\r\n\r\n if ('lazy' in changes) {\r\n changes.lazy.currentValue ? this.loadEventsForLazyMode() : this.unloadEventsForLazyMode();\r\n }\r\n\r\n }\r\n\r\n private document: Document;\r\n\r\n constructor(\r\n defaultOptions: CircleProgressOptions,\r\n private ngZone: NgZone,\r\n private elRef: ElementRef,\r\n injector: Injector,\r\n ) {\r\n this.document = injector.get(DOCUMENT);\r\n this.window = this.document.defaultView;\r\n Object.assign(this.options, defaultOptions);\r\n Object.assign(this.defaultOptions, defaultOptions);\r\n }\r\n\r\n}","import { Component, EventEmitter, Inject, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { IJaceWidgetModel } from '../../../models/widgets/IJaceWidgetModel';\r\nimport { IWidgetComponent } from '../IWidgetComponent';\r\n\r\nimport { Router } from '@angular/router';\r\nimport { JaceMultiprogWidgetModel } from '../../../models/widgets/JaceMultiprogWidgetModel';\r\nimport { DSH_DATA_SERVICE } from '../../../public-injection-tokens';\r\nimport { IDashboardFeatureDataService } from '../../../services/IDashboardFeatureDataService';\r\n\r\n@Component({\r\n selector: 'jace-dsh-multiprog',\r\n templateUrl: './jace-dsh-multiprog.component.html',\r\n styleUrls: ['./jace-dsh-multiprog.component.css'],\r\n standalone: false\r\n})\r\nexport class JaceMultiprogWidgetComponent implements IWidgetComponent, OnInit {\r\n\r\n model?: JaceMultiprogWidgetModel;\r\n\r\n @Input() DashboardDate!: Date;\r\n @Output() OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService,private router: Router) { }\r\n\r\n setWidgetModel(dshBackendId:string,widgetModel: IJaceWidgetModel): void {\r\n this.model = <JaceMultiprogWidgetModel>widgetModel;\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n refreshData() {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.dshService.GetWidgetData(this.model.backendid, this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n removeWidget() {\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n\r\n configure() {\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","<div class=\"jace-dsh-widget-header {{model?.name}}-header\">\r\n <div class=\"jace-dsh-widget-title\" *ngIf=\"model.title\">\r\n {{model.title}}\r\n </div>\r\n <div class=\"jace-dsh-widget-controls\" *ngIf=\"dataReady\">\r\n <span class=\"transition drag-handler jace-dsh-widget-drag\" *ngIf=\"model.dragEnabled\">\r\n <i class=\"fa fa-arrows-alt\"></i>\r\n </span>\r\n <span class=\"transition jace-dsh-widget-opts\" (click)=\"configure()\">\r\n <i class=\"fa fa-cog\"></i>\r\n </span>\r\n <span (click)=\"removeWidget()\" class=\"transition remove-button jace-dsh-widget-close\">\r\n <i class=\"fa fa-times\"></i>\r\n </span>\r\n\r\n </div>\r\n</div>\r\n<div class=\"jace-dsh-widget-body gridster-item-content {{model?.name}}-body\">\r\n <div class=\"jace-dsh-widget-loading\" *ngIf=\"!dataReady\">\r\n <i class=\"fa fa-spinner\"></i>\r\n </div>\r\n <div class=\"jace-dsh-multiprog-container jace-dsh-widget-slide\"\r\n [ngClass]=\"{'jace-dsh-widget-content-hide':configuration,'jace-dsh-widget-content-show':!configuration}\"\r\n *ngIf=\"dataReady\">\r\n <div *ngFor=\"let item of model.progressTitles; let i = index\" class=\"jace-dsh-multiprog-progress\">\r\n <div class=\"jace-dsh-multiprog-title\">{{item}}</div>\r\n <!-- messo circle progress per tutto... prima si poteva switchare su progress bar ma pace -->\r\n <circle-progress [percent]=\"model.progressValues[i]\" [showSubtitle]=false [radius]=\"36\"\r\n [outerStrokeWidth]=\"4\" [innerStrokeWidth]=\"2\" [outerStrokeColor]=\"'#7489AA'\"\r\n [innerStrokeColor]=\"'#EFECCA'\" [animation]=\"true\" [animationDuration]=\"300\" [showTitle]=\"true\"\r\n ></circle-progress>\r\n </div>\r\n </div>\r\n <div class=\"jace-dsh-widget-settings jace-dsh-widget-slide \"\r\n [ngClass]=\"{'jace-dsh-widget-settings-hide':!configuration,'jace-dsh-widget-settings-show':configuration}\">\r\n <p>Configuration</p>\r\n </div>\r\n</div>","import { GridsterItem, GridsterItemComponentInterface } from \"angular-gridster2\";\r\nimport { JaceWidgetInstanceDetail } from \"../externals/JaceWidgetInstanceDetail\";\r\nimport { IJaceWidgetModel } from \"./IJaceWidgetModel\";\r\n\r\nexport abstract class BaseJaceWidgetModel implements IJaceWidgetModel{\r\n \r\n name!: string;\r\n title?: string| undefined;\r\n widgetType!: string;\r\n dataError: boolean;\r\n options?: { [key: string]: any; }| undefined;\r\n backendid: string = \"default_backend\";\r\n\r\n x!: number;\r\n y!: number;\r\n //grid overrides\r\n rows!: number;\r\n cols!: number;\r\n resizeEnabled?: boolean = false;\r\n layerIndex?: number | undefined;\r\n initCallback?: ((item: GridsterItem, itemComponent: GridsterItemComponentInterface) => void) | undefined;\r\n dragEnabled?: boolean | undefined;\r\n compactEnabled?: boolean | undefined;\r\n maxItemRows?: number | undefined;\r\n minItemRows?: number | undefined;\r\n maxItemCols?: number | undefined;\r\n minItemCols?: number | undefined;\r\n minItemArea?: number | undefined;\r\n maxItemArea?: number | undefined;\r\n\r\n [propName: string]: any;\r\n\r\n constructor(){\r\n this.dataError = false;\r\n this.options = {};\r\n }\r\n\r\n configureFromInstanceDetails(details: JaceWidgetInstanceDetail): void {\r\n this.name = details.name;\r\n this.widgetType = details.type;\r\n this.title = details.title;\r\n this.x = details.x;\r\n this.y = details.y;\r\n this.cols = details.cols;\r\n this.rows = details.rows;\r\n this.compactEnabled = details.compactenabled;\r\n this.dragEnabled = details.dragenabled;\r\n this.options = details.options;\r\n this.dataError = details.queryerror;\r\n this.resizeEnabled = details.resizeenabled;\r\n this.backendid = details.backendid??\"default_backend\";\r\n }\r\n abstract setData(data?: any): void ;\r\n}","import { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\nexport class JaceChartWidgetModel extends BaseJaceWidgetModel {\r\n \r\n chartType: 'pie' | 'line' | 'vertical' | 'vertical-2d' | 'vertical-stacked'='line';\r\n legend: boolean=false;\r\n\r\n //LineChartData | PieChartData | Vertical2DChartData | VerticalChartData | VerticalStackedChartData | any;\r\n chartData: any;\r\n\r\n constructor() {\r\n super();\r\n this.widgetType= \"CHART\"; \r\n }\r\n\r\n setData(data?: any): void {\r\n if (!data)\r\n return;\r\n\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n\r\n if (data['legend'])\r\n this.legend = data['legend'];\r\n else\r\n this.legend = true;\r\n if (data['charttype'])\r\n this.chartType = data['charttype'];\r\n\r\n if (data['chartdata']) {\r\n this.chartData = data['chartdata'];\r\n }\r\n if (this.options && this.options['legend'] == undefined)\r\n this.options['legend'] = true;\r\n }\r\n\r\n}","\r\nimport { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\nexport class JaceCounterWidgetModel extends BaseJaceWidgetModel {\r\n\r\n superText?: string=undefined;\r\n subText?: string = undefined;\r\n value: number = 0; \r\n icon?: string=undefined;\r\n unit?: string=undefined;\r\n \r\n\r\n constructor() {\r\n super();\r\n this.widgetType= \"COUNTER\"; \r\n }\r\n \r\n\r\n setData(data?: any): void {\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n this.superText = data['supertext'];\r\n this.subText = data['subtext'];\r\n this.value = data['value'];\r\n this.icon = data['icon'];\r\n this.options = data['options'];\r\n this.unit = data['unit'];\r\n }\r\n\r\n \r\n\r\n\r\n\r\n}","import { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\nexport class JaceListItemWidget {\r\n id?: any;\r\n showId: boolean;\r\n idParamName?: string;\r\n description!: string;\r\n subline?: string;\r\n classes?: string;\r\n link?: string;\r\n}\r\nexport class JaceListWidgetModel extends BaseJaceWidgetModel{\r\n \r\n superText?: string = undefined;\r\n items: JaceListItemWidget[] = [];\r\n\r\n constructor() {\r\n super();\r\n this.widgetType= \"LIST\"; \r\n }\r\n\r\n\r\n setData(data?: any) {\r\n if (!data)\r\n return;\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n this.superText = data['supertext'];\r\n if (data['items']) {\r\n const d = data['items'] as Array<any>;\r\n this.items = [];\r\n for (let index = 0; index < d.length; index++) {\r\n const item = new JaceListItemWidget();\r\n const element = d[index];\r\n\r\n if (element['id'])\r\n item.id = element['id'];\r\n\r\n if (element['idparamname'])\r\n item.idParamName = element['idparamname'];\r\n\r\n if (element['link'])\r\n item.link = element['link'];\r\n\r\n if (element['subline'])\r\n item.subline = element['subline'];\r\n\r\n if (element['classes'])\r\n item.classes = element['classes'];\r\n\r\n item.description = element.description;\r\n this.items.push(item);\r\n }\r\n }\r\n }\r\n\r\n}","import { BaseJaceWidgetModel } from \"./BaseJaceWidgetModel\";\r\n\r\n\r\nexport class JaceMultiprogWidgetModel extends BaseJaceWidgetModel {\r\n \r\n resizeEnabled: boolean = true;\r\n\r\n progressTitles: string[]=[];\r\n progressValues: number[]=[];\r\n\r\n circleProgress: boolean=false;\r\n \r\n constructor() {\r\n super();\r\n this.widgetType= \"MULTIPROGRESS\"; \r\n }\r\n\r\n setData(data?: any): void {\r\n\r\n if (data['queryerror'])\r\n this.dataError = data['queryerror'];\r\n\r\n this.progressTitles = data['progresstitles'] ?? [];\r\n this.progressValues = data['progressvalues'] ?? [];\r\n this.circleProgress = data['circleprogress'];\r\n this.options = data['options'] ?? {};\r\n\r\n\r\n if (this.circleProgress === undefined)\r\n this.circleProgress = true;\r\n\r\n if (this.cols === undefined && this.progressValues) {\r\n if (this.progressValues.length == 1)\r\n this.cols = 1;\r\n else\r\n this.cols = 2;\r\n }\r\n }\r\n\r\n}","import { JaceChartWidgetComponent } from \"../../components/widgets/chart/jace-dsh-chart.component\";\r\nimport { JaceCounterWidgetComponent } from \"../../components/widgets/counter/jace-dsh-counter.component\";\r\nimport { JaceListWidgetComponent } from \"../../components/widgets/list/jace-dsh-list.component\";\r\nimport { JaceMultiprogWidgetComponent } from \"../../components/widgets/multiprog/jace-dsh-multiprog.component\";\r\nimport { JaceChartWidgetModel } from \"../widgets/JaceChartWidgetModel\";\r\nimport { JaceCounterWidgetModel } from \"../widgets/JaceCounterWidgetModel\";\r\nimport { JaceListWidgetModel } from \"../widgets/JaceListWidgetModel\";\r\nimport { JaceMultiprogWidgetModel } from \"../widgets/JaceMultiprogWidgetModel\";\r\nimport { IDashboardModuleOptions } from \"./IDashboardModuleOptions\";\r\nimport { IWidgetTypeConfig } from \"./IWidgetTypeConfig\";\r\n\r\nexport class DefaultDashboardModuleOptions implements IDashboardModuleOptions{\r\n widgetTypes!: IWidgetTypeConfig[];\r\n\r\n constructor(){\r\n this.widgetTypes = [\r\n {\r\n name: \"COUNTER\",\r\n component: JaceCounterWidgetComponent,\r\n model: JaceCounterWidgetModel\r\n },\r\n {\r\n name: \"LIST\",\r\n component: JaceListWidgetComponent,\r\n model: JaceListWidgetModel\r\n },\r\n {\r\n name: \"CHART\",\r\n component: JaceChartWidgetComponent,\r\n model: JaceChartWidgetModel\r\n },\r\n {\r\n name: \"MULTIPROGRESS\",\r\n component: JaceMultiprogWidgetComponent,\r\n model: JaceMultiprogWidgetModel\r\n }\r\n ];\r\n }\r\n}","import { ComponentRef, Injectable, ViewContainerRef } from '@angular/core';\r\nimport { IWidgetComponent } from '../components/widgets/IWidgetComponent';\r\nimport { JaceWidgetInstanceDetail } from '../models/externals/JaceWidgetInstanceDetail';\r\nimport { IJaceWidgetModel } from '../models/widgets/IJaceWidgetModel';\r\nimport { IDashboardModuleOptions } from '../models/options/IDashboardModuleOptions';\r\nimport { IWidgetTypeConfig } from '../models/options/IWidgetTypeConfig';\r\n\r\nexport interface IConstructableModel<T> {\r\n new(): T;\r\n}\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class DashboardWidgetFactory {\r\n\r\n types: { [name: string]: IWidgetTypeConfig } = {};\r\n\r\n constructor() { }\r\n\r\n\r\n addOption(option: IDashboardModuleOptions) {\r\n\r\n if (option.widgetTypes) {\r\n option.widgetTypes.forEach((o) => {\r\n this.types[o.name] = o;\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Versione ng11 della creazione dei componenti dinamici delle widget\r\n * @param type \r\n * @param vcr \r\n * @returns \r\n */\r\n resolveComponent(type: string, vcr: ViewContainerRef): ComponentRef<IWidgetComponent> | null {\r\n\r\n if (!this.types)\r\n return null;\r\n\r\n let t = this.types[type];\r\n\r\n if (!t)\r\n return null;\r\n\r\n let componentRef: ComponentRef<IWidgetComponent> = vcr.createComponent(t.component);\r\n\r\n return componentRef;\r\n }\r\n\r\n resolveDefinition(type: string, details: JaceWidgetInstanceDetail): IJaceWidgetModel | null {\r\n\r\n if (!this.types)\r\n return null;\r\n\r\n let t = this.types[type];\r\n\r\n if (!t)\r\n return null;\r\n\r\n let definitionInstance = this.createInstance(t.model);\r\n definitionInstance.configureFromInstanceDetails(details);\r\n\r\n return definitionInstance;\r\n }\r\n\r\n private createInstance<T extends IJaceWidgetModel>(type: IConstructableModel<T>): T {\r\n return new type();\r\n }\r\n\r\n}","import { JaceWidgetInstanceDetail } from \"./JaceWidgetInstanceDetail\";\r\n\r\n\r\nexport class SaveJaceDashboardLayoutDTO {\r\n backendid:string=\"default_backend\";\r\n name: string;\r\n widgets!: JaceWidgetInstanceDetail[];\r\n\r\n}","//Definizione della widget restituita dal backend\r\nexport class JaceWidgetInstanceDetail {\r\n id?: number;\r\n name!: string;\r\n title?: string;\r\n type!: string;\r\n x!: number;\r\n y!: number;\r\n cols!: number;\r\n rows!: number;\r\n backendid?: string;\r\n \r\n dragenabled?: boolean;\r\n resizeenabled?: boolean;\r\n compactenabled?: boolean; \r\n options?: { [key: string]: any };\r\n queryerror: boolean = false;\r\n }","import { AfterViewInit, ChangeDetectorRef, Component, ComponentRef, Inject, Input, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges, ViewChildren, ViewContainerRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { JaceDashboardConfig } from \"../../models/config/JaceDashboardConfig\";\r\nimport { IJaceWidgetModel } from \"../../models/widgets/IJaceWidgetModel\";\r\nimport { InboundMessageTypes, InterComService } from \"@esfaenza/extensions\";\r\n\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { SaveJaceDashboardLayoutDTO } from \"../../models/externals/SaveJaceDashboardLayoutDTO\";\r\nimport { JaceWidgetInstanceDetail } from \"../../models/externals/JaceWidgetInstanceDetail\";\r\nimport { JaceDashboardLayoutDetail } from \"../../models/externals/JaceDashboardLayoutDetail\";\r\nimport { DashboardWidgetFactory } from \"../../services/DashboardWidgetFactory\";\r\nimport { Subject, Subscription, timer } from \"rxjs\";\r\nimport { map, takeUntil } from \"rxjs/operators\";\r\nimport { IWidgetComponent } from \"../widgets/IWidgetComponent\";\r\nimport { DSH_DATA_SERVICE } from \"../../public-injection-tokens\";\r\nimport { IDashboardFeatureDataService } from \"../../services/IDashboardFeatureDataService\";\r\n\r\n/**\r\n * Componente di base che rappresenta una dashboard.\r\n * Utilizza Gridster2 per il layout delle widget [Gridster2](https://tiberiuzuld.github.io/angular-gridster2/)\r\n */\r\n@Component({\r\n selector: 'es-dashboard',\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.css'],\r\n standalone: false\r\n})\r\nexport class DashboardComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\r\n /**\r\n * Configurazione di questa dashboard.\r\n * Contiene anche le configurazioni di layout di Gridster2\r\n */\r\n @Input() Configuration!: JaceDashboardConfig;\r\n\r\n public dashboardDate = new Date();\r\n public dashboardLayout?: JaceDashboardLayoutDetail;\r\n\r\n widgetDefinitions: (IJaceWidgetModel | null)[] = [];\r\n\r\n changesSub?: Subscription;\r\n\r\n trackedSubscriptions: Subscription[] = [];\r\n\r\n readonly destroySignal$: Subject<void> = new Subject<void>();\r\n\r\n @ViewChildren('grid_item', { read: ViewContainerRef }) gridItemRefs!: QueryList<ViewContainerRef>;\r\n\r\n constructor(\r\n @Inject(DSH_DATA_SERVICE) private dshService: IDashboardFeatureDataService,\r\n private intercom: InterComService,\r\n private route: ActivatedRoute,\r\n private cmpFactory: DashboardWidgetFactory,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.route.snapshot.data[\"title\"] });\r\n }\r\n\r\n public ngOnInit() { }\r\n\r\n ngAfterViewInit(): void {\r\n //qui this.gridItemRefs è 'riempito'\r\n // sottoscrivo changes che sparerà tutte le volte che ngFor si aggiorna (ovvero quando cambia dashboard)\r\n this.changesSub = this.gridItemRefs.changes.pipe(\r\n takeUntil(this.destroySignal$)\r\n ).subscribe((comps: QueryList<ViewContainerRef>) => {\r\n this.renderLayout(comps);\r\n });\r\n //prima volta\r\n\r\n //setTimeout(()=>this.reloadData(),500);\r\n this.trackedSubscriptions.push(timer(500).pipe(\r\n takeUntil(this.destroySignal$),\r\n map(() => this.reloadData())\r\n ).subscribe()\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n //unsubscribe dalle changes dei viewref\r\n if (this.changesSub)\r\n this.changesSub.unsubscribe();\r\n\r\n this.clearTrackedSubscriptions();\r\n\r\n this.destroySignal$.next();\r\n this.destroySignal$.complete();\r\n }\r\n\r\n clearTrackedSubscriptions() {\r\n if (this.trackedSubscriptions) {\r\n for (let index = 0; index < this.trackedSubscriptions.length; index++) {\r\n const element = this.trackedSubscriptions[index];\r\n element.unsubscribe();\r\n }\r\n this.trackedSubscriptions = [];\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //occhio: arriva prima di ngAfterViewInit\r\n if (changes.Configuration) {\r\n //appena ho configuration \r\n console.log(changes.Configuration);\r\n // la prima volta l'ho già fatta alla creazione del componente\r\n if(!changes.Configuration.firstChange){\r\n this.reloadData();\r\n }\r\n }\r\n }\r\n\r\n reloadData() {\r\n if (!this.Configuration)\r\n return;\r\n\r\n this.dshService.GetUserDashboard(this.Configuration.backendId, this.Configuration.accountId, this.Configuration.dashboardName).pipe(\r\n takeUntil(this.destroySignal$)\r\n ).subscribe(c => {\r\n this.dashboardLayout = c;\r\n this.widgetDefinitions = c.widgets.map(i => {\r\n return this.cmpFactory.resolveDefinition(i.type, i)\r\n });\r\n });\r\n }\r\n\r\n removeItem(widgetName: string) {\r\n if (!this.dashboardLayout)\r\n return;\r\n let idx = this.dashboardLayout.widgets.findIndex(s => s.name == widgetName);\r\n this.widgetDefinitions.splice(idx, 1);\r\n }\r\n\r\n saveDashboard() {\r\n if (!this.dashboardLayout)\r\n return;\r\n const dto = new SaveJaceDashboardLayoutDTO();\r\n dto.backendid = this.Configuration.backendId;\r\n dto.widgets = [];\r\n for (let index = 0; index < this.widgetDefinitions.length; index++) {\r\n const w: IJaceWidgetModel | null = this.widgetDefinitions[index];\r\n if (w == null)\r\n continue;\r\n let v = new JaceWidgetInstanceDetail();\r\n v.id = w.id;\r\n v.name = w.name;\r\n v.x = w.x;\r\n v.y = w.y;\r\n v.cols = w.cols;\r\n v.rows = w.rows;\r\n v.compactenabled = w.compactEnabled;\r\n v.dragenabled = w.dragEnabled;\r\n v.resizeenabled = w.resizeEnabled;\r\n v.type = w.widgetType;\r\n v.title = w.title;\r\n v.options = w.options;\r\n dto.widgets.push(v);\r\n }\r\n this.dshService.SaveUserDashboard(dto).subscribe(res => {\r\n if (res.success)\r\n console.log('Dashboard saved');\r\n });\r\n }\r\n\r\n renderLayout(comps: QueryList<ViewContainerRef>) {\r\n this.clearTrackedSubscriptions();\r\n\r\n comps.map((host, index) => {\r\n const vcr = host;\r\n vcr.clear();\r\n const widgetData = this.widgetDefinitions[index];\r\n\r\n if (!widgetData || !widgetData.widgetType)\r\n return;\r\n\r\n let componentRef: ComponentRef<IWidgetComponent> | null;\r\n componentRef = this.cmpFactory.resolveComponent(widgetData?.widgetType, vcr);\r\n\r\n if (!componentRef) {\r\n console.log(`Tipo widget sconosciuto ${widgetData.widgetType}`);\r\n return;\r\n }\r\n\r\n //setta l'input della data\r\n if (this.Configuration.showDateInput)\r\n componentRef.instance.DashboardDate = this.dashboardDate;\r\n\r\n //setta il modello\r\n componentRef.instance.setWidgetModel(this.Configuration.backendId, widgetData);\r\n\r\n //setta la callback per OnRemove\r\n let s = componentRef.instance.OnRemove.pipe(\r\n takeUntil(this.destroySignal$)\r\n ).subscribe(name => this.removeItem(name));\r\n this.trackedSubscriptions.push(s);\r\n\r\n //componentRef.changeDetectorRef.markForCheck();\r\n //componentRef.changeDetectorRef.detectChanges();\r\n });\r\n this.cdr.detectChanges();\r\n }\r\n\r\n addItem() {\r\n //this.dashboard.push({});\r\n }\r\n}","<ng-container *ngIf=\"Configuration\">\r\n\r\n <form role=\"form\" class=\"jace-dsh-toolbar\" *ngIf=\"Configuration.showToolbar\">\r\n <div *ngIf=\"Configuration.dashboardTitle\" class=\"jace-dsh-toolbar-title\">\r\n {{Configuration.dashboardTitle}}\r\n </div>\r\n <div class=\"jace-dsh-toolbar-dtp\" *ngIf=\"Configuration?.showDateInput\">\r\n <form-date InOutFormat=\"date\" [FormLayout]=\"false\" id=\"txt_dashboarddate\" [Validation]=\"false\"\r\n autocomplete=\"off\" [(ngModel)]=\"dashboardDate\" name=\"dashboarddate\" [Placeholder]=\"'Dashboard Date'\">\r\n </form-date>\r\n </div>\r\n <div class=\"jace-dsh-save-button\" (click)=\"saveDashboard()\">\r\n <span class=\"transition\">\r\n <i class=\"fa fa-save\"></i>\r\n </span>\r\n </div>\r\n </form>\r\n\r\n <gridster [options]=\"Configuration.gridsterConfig\" class=\"jace-dsh-widget-area\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetDefinitions\" class=\"jace-dsh-widget {{item.name}}\">\r\n <!-- <ng-container *ngFor=\"let item of widgetDefinitions\"> -->\r\n <ng-template #grid_item></ng-template>\r\n <!-- </ng-container> -->\r\n </gridster-item>\r\n </gridster>\r\n\r\n</ng-container>","export const Repository={\r\n GET_Dashboard_GetLayout: \"/api/Dashboard/GetLayout\",\r\n POST_Dashboard_SaveLayout: \"/api/Dashboard/SaveLayout\",\r\n GET_Dashboard_GetWidgetData: \"/api/Dashboard/GetWidgetData\"\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { JaceDashboardLayoutDetail } from '../models/externals/JaceDashboardLayoutDetail';\r\nimport { Observable } from 'rxjs';\r\nimport { SaveJaceDashboardLayoutDTO } from '../models/externals/SaveJaceDashboardLayoutDTO';\r\nimport { CallResult } from '@esfaenza/extensions';\r\nimport { HTTPService } from '@esfaenza/httpservice';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { Repository } from '../models/externals/Repository';\r\nimport { IDashboardFeatureDataService } from './IDashboardFeatureDataService';\r\n\r\n@Injectable()\r\nexport class DashboardFeatureAPIDataService implements IDashboardFeatureDataService {\r\n\r\n constructor(private http: HTTPService) {}\r\n\r\n GetUserDashboard(backendid:string, idaccount: number,dashboardName: string): Observable<JaceDashboardLayoutDetail> {\r\n let params = new HttpParams();\r\n params = params.append(\"backendid\", backendid.toString());\r\n params = params.append(\"idaccount\", idaccount.toString());\r\n params = params.append(\"name\", dashboardName);\r\n return this.http.get<JaceDashboardLayoutDetail>(Repository[\"GET_Dashboard_GetLayout\"], params);\r\n }\r\n\r\n SaveUserDashboard(dto: SaveJaceDashboardLayoutDTO): Observable<CallResult> {\r\n return this.http.post<CallResult>(Repository[\"POST_Dashboard_SaveLayout\"], dto);\r\n }\r\n\r\n GetWidgetData(backendid:string,name: string, options: { [key: string]: string }): Observable<any> {\r\n let params = new HttpParams();\r\n params = params.append(\"backendid\", backendid.toString());\r\n params = params.append(\"name\", name.toString());\r\n if (options && Object.keys(options).length != 0) {\r\n for (let index = 0; index < Object.keys(options).length; index++) {\r\n const k = Object.keys(options)[index];\r\n params = params.append(k, options[k]);\r\n }\r\n }\r\n\r\n return this.http.get<any>(Repository[\"GET_Dashboard_GetWidgetData\"], params)\r\n }\r\n} \r\n\r\n","\r\nimport { Inject, ModuleWithProviders, NgModule, Optional } from '@angular/core';\r\n\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { GridsterModule } from 'angular-gridster2';\r\nimport { DSH_OPTIONS } from './private-injection-tokens';\r\nimport { DefaultDashboardModuleOptions } from './models/options/DefaultDashboardModuleOptions';\r\nimport { IDashboardModuleOptions } from './models/options/IDashboardModuleOptions';\r\nimport { DashboardWidgetFactory } from './services/DashboardWidgetFactory';\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\nimport { FormsAndValidationsModule } from '@esfaenza/forms-and-validations';\r\nimport { EsChartsModule } from '@esfaenza/es-charts';\r\nimport { JaceListWidgetComponent } from './components/widgets/list/jace-dsh-list.component';\r\nimport { JaceCounterWidgetComponent } from './components/widgets/counter/jace-dsh-counter.component';\r\nimport { JaceChartWidgetComponent } from './components/widgets/chart/jace-dsh-chart.component';\r\nimport { JaceMultiprogWidgetComponent } from './components/widgets/multiprog/jace-dsh-multiprog.component';\r\nimport { HttpserviceModule } from '@esfaenza/httpservice';\r\nimport { DashboardFeatureAPIDataService } from './services/dashboard-feature.service';\r\nimport { DSH_DATA_SERVICE } from './public-injection-tokens';\r\nimport { CircleProgressComponent, CircleProgressOptions } from './components/widgets/multiprog/circle-progress/circle-progress.component';\r\n\r\nconst MODULES = [\r\n // Base\r\n CommonModule,\r\n FormsModule,\r\n GridsterModule,\r\n FormsAndValidationsModule,\r\n EsChartsModule,\r\n HttpserviceModule\r\n];\r\n\r\nconst COMPONENTS = [\r\n DashboardComponent,\r\n JaceListWidgetComponent,\r\n JaceCounterWidgetComponent,\r\n JaceChartWidgetComponent,\r\n JaceMultiprogWidgetComponent,\r\n CircleProgressComponent\r\n];\r\n\r\n@NgModule({\r\n declarations: [...COMPONENTS],\r\n imports: [...MODULES],\r\n exports: [...COMPONENTS]\r\n})\r\nexport class DashboardFeatureModule {\r\n\r\n static forRoot(options?: IDashboardModuleOptions): ModuleWithProviders<DashboardFeatureModule> {\r\n return {\r\n ngModule: DashboardFeatureModule,\r\n providers: [\r\n { provide: DSH_OPTIONS, multi: true, useValue: new DefaultDashboardModuleOptions() },\r\n { provide: DSH_OPTIONS, multi: true, useValue: options },\r\n { provide: DSH_DATA_SERVICE, useClass: DashboardFeatureAPIDataService },\r\n DashboardWidgetFactory,\r\n { provide: CircleProgressOptions, useValue: options }\r\n ]\r\n };\r\n }\r\n\r\n constructor(componentFactory: DashboardWidgetFactory, @Optional() @Inject(DSH_OPTIONS) options: IDashboardModuleOptions[]) {\r\n if (!options)\r\n return;\r\n \r\n options.map((o) => componentFactory.addOption(o));\r\n }\r\n}\r\n","import { GridsterConfig, GridType } from 'angular-gridster2';\r\n\r\n\r\n/**\r\n * Configurazione della dashboard\r\n */\r\nexport class JaceDashboardConfig {\r\n\r\n /**\r\n * Id del backend a cui verranno indirizzate le chiamate di questa dashboard.\r\n * Deve essere uno di quelli definiti in appsetting.json del FE nella sezione **Backends**.\r\n */\r\n backendId: string=\"default_backend\";\r\n\r\n /**\r\n * Nome della dashboard (deve essere univoco nel modulo).\r\n * Deve essere 'conosciuto' nel BE in modo da ottenere il layout delle widget da visualizzare.\r\n * Verrà usato anche per salvare le preferenze dell'account (widget ridimensionate/spostate/eliminate)\r\n */\r\n dashboardName!: string;\r\n \r\n /**\r\n * ID dell'account dell'utente che deve visualizzare la dashboard.\r\n * HINT: Leggerlo da JaceIdentity dell'account al momento loggato.\r\n */ \r\n accountId!: number;\r\n \r\n /**\r\n * Configurazioni specifiche del layout di [Gridster2](https://tiberiuzuld.github.io/angular-gridster2/)\r\n */\r\n gridsterConfig: GridsterConfig;\r\n\r\n /**\r\n * Se questa dashboard contiene widget che mostrano dati che dipendono dalla data corrente\r\n * mostra il controllo (datetimepicker) per variare la data in base a cui mostrare i dati.\r\n * \r\n * NOTA: showToolbar deve essere a true.\r\n * \r\n * Default = false\r\n */\r\n showDateInput: boolean =false;\r\n \r\n /**\r\n * Mostrare la toolbar in cima alla dashboard che contiene il titolo, il pulsante per salvare il proprio layout personalizzato\r\n * e il picker per scegliere la data nel caso che le widget nella dashboard mostrino dati dipendenti dalla data.\r\n * \r\n * Default = true\r\n */\r\n showToolbar: boolean = true;\r\n\r\n /**\r\n * Titolo della dashboard mostrato in cima al layout all'interno della toolbar.\r\n * \r\n * NOTA: showToolbar deve essere a true.\r\n * \r\n * Default = undefined\r\n */\r\n dashboardTitle: string = undefined;\r\n\r\n\r\n constructor() {\r\n //default per gridster\r\n this.gridsterConfig = {\r\n maxCols: 10,\r\n maxRows: 10,\r\n minCols: 5,\r\n minRows: 6,\r\n defaultItemCols: 1,\r\n defaultItemRows: 1,\r\n disablePushOnDrag: true,\r\n draggable: { enabled: true, ignoreContent: true },\r\n displayGrid: \"onDrag&Resize\",\r\n gridType: GridType.Fit,\r\n resizable: { enabled: true },\r\n /* fixedRowHeight: 164, */\r\n setGridSize: true,\r\n //compactType: \"compactUp&Left\"\r\n /* itemChangeCallback: AppComponent.itemChange,\r\n itemResizeCallback: AppComponent.itemResize, */\r\n }; \r\n }\r\n\r\n \r\n \r\n\r\n\r\n}","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport {JaceDashboardLayoutDetail} from \"./JaceDashboardLayoutDetail\";\r\n\r\nexport class JaceDashboardLayoutAppSearch extends AppSearch<JaceDashboardLayoutDetail> {\r\n backendid:string=\"default_backend\";\r\n filtname?: string;\r\n}\r\n","import { JaceWidgetInstanceDetail } from \"./JaceWidgetInstanceDetail\";\r\n\r\n//Definizione del layout della dashboard definito dal Backend\r\nexport class JaceDashboardLayoutDetail {\r\n\r\n\t//Account di questa dashboard\r\n\taccountid!: number;\r\n\r\n\t//Nome della dashboard (univoco)\r\n\tname!: string;\r\n\r\n\t//Definizione delle widget in questo layout\r\n\twidgets!: JaceWidgetInstanceDetail[];\r\n\r\n}","\r\nimport { EventEmitter, Inject, Injectable, SimpleChanges } from \"@angular/core\";\r\nimport { IJaceWidgetModel } from \"../../models/widgets/IJaceWidgetModel\";\r\nimport { IWidgetComponent } from \"./IWidgetComponent\";\r\nimport { IDashboardFeatureDataService } from \"../../services/IDashboardFeatureDataService\";\r\nimport { DSH_DATA_SERVICE } from \"../../public-injection-tokens\";\r\n\r\n/**\r\n * Classe di base astratta per la creazione di Widget custom.\r\n */\r\n @Injectable()\r\nexport abstract class BaseWidgetComponent<T extends IJaceWidgetModel> implements IWidgetComponent{\r\n\r\n model?: T;\r\n\r\n DashboardDate!: Date;\r\n OnRemove = new EventEmitter<string>();\r\n\r\n configuration: boolean = false;\r\n dataReady: boolean = false;\r\n lastdate: string = \"\";\r\n\r\n constructor(@Inject(DSH_DATA_SERVICE) protected dshService: IDashboardFeatureDataService) { }\r\n\r\n setWidgetModel(dshBackendId:string, widgetModel: IJaceWidgetModel): void {\r\n \r\n this.model = <T>widgetModel;\r\n\r\n if(this.model.backendid === undefined || this.model.backendid==\"default_backend\")\r\n this.model.backendid = dshBackendId;\r\n\r\n this.refreshData();\r\n }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //console.log(changes['DashboardDate'].currentValue);\r\n if (changes['DashboardDate'].previousValue)\r\n this.lastdate = changes['DashboardDate'].previousValue.toISOString();\r\n\r\n let curdate: string = \"\";\r\n\r\n if (changes['DashboardDate'].currentValue)\r\n curdate = changes['DashboardDate'].currentValue.toISOString();\r\n //fix per il datetimepicker material che cambia l'oggetto al momento del caricamento\r\n if (this.lastdate != curdate) {\r\n this.lastdate = curdate;\r\n this.refreshData();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Prepara i parametri e lancia la chiamata GetWidgetData della DashboardFeatureService.\r\n * Imposta il model con i dati restituiti (setData) e imposta la variabile dataReady del campo a true\r\n */\r\n refreshData() : void {\r\n if (!this.model)\r\n return;\r\n const pars: { [key: string]: string } = {};\r\n if(this.DashboardDate)\r\n pars[\"DT\"] = this.DashboardDate.toISOString();\r\n if (this.model.options && Object.keys(this.model.options).length != 0) {\r\n for (let index = 0; index < Object.keys(this.model.options).length; index++) {\r\n const k = Object.keys(this.model.options)[index];\r\n pars[k] = this.model.options[k];\r\n }\r\n }\r\n\r\n this.prepareGetDataParameters(pars);\r\n\r\n this.dshService.GetWidgetData(this.model.backendid, this.model.name, pars).subscribe(data => {\r\n if (this.model) {\r\n this.model.setData(data);\r\n this.dataReady = true;\r\n }\r\n }\r\n );\r\n } \r\n /**\r\n * Modifica/aggiorna i parametri della chiamata GetWidgetData prima di eseguirla. * \r\n * \r\n * @param pars parametri della chiamata. Se impostata, già contengono il parametro 'DT' con la data selezionata a livello di dashboard\r\n */\r\n abstract prepareGetDataParameters(pars: { [key: string]: string; }) :void;\r\n\r\n /**\r\n * Da chiamare quando l'utente preme il pulsante 'rimuovi' nella toolbar della widget.\r\n */\r\n removeWidget() :void{\r\n if (!this.model)\r\n return;\r\n this.OnRemove.emit(this.model.name);\r\n }\r\n\r\n /**\r\n * Da chiamare quando viene premuto il pulsante 'configure' nella toolbar della widget\r\n */\r\n configureWidget() :void{\r\n if (this.configuration) {\r\n //finito di configurare -> refreshData\r\n this.refreshData();\r\n }\r\n this.configuration = !this.configuration;\r\n }\r\n}","export enum JaceWidgetTypes{\r\nCHART='CHART',\r\nCOUNTER='COUNTER',\r\nLIST='LIST',\r\nMULTIPROGRESS='MULTIPROGRESS'\r\n}","/*\r\n * Public API Surface of dashboard-feature\r\n */\r\n\r\n\r\nexport * from './lib/public-injection-tokens';\r\nexport * from './lib/dashboard-feature.module';\r\n\r\n\r\n\r\n//MODELS\r\n// CONFIG\r\nexport * from './lib/models/config/JaceDashboardConfig';\r\n// EXTERNALS\r\nexport * from './lib/models/externals/JaceDashboardLayoutAppSearch';\r\nexport * from './lib/models/externals/JaceDashboardLayoutDetail';\r\nexport * from './lib/models/externals/JaceWidgetInstanceDetail';\r\nexport * from './lib/models/externals/SaveJaceDashboardLayoutDTO';\r\n// OPTIONS\r\nexport * from './lib/models/options/IWidgetTypeConfig';\r\nexport * from './lib/models/options/IDashboardModuleOptions';\r\nexport * from './lib/models/options/DefaultDashboardModuleOptions';\r\n// WIDGETS\r\nexport * from './lib/models/widgets/IJaceWidgetModel';\r\nexport * from './lib/models/widgets/BaseJaceWidgetModel';\r\n\r\n\r\n//SERVICES\r\nexport * from './lib/services/IDashboardFeatureDataService';\r\nexport * from './lib/services/dashboard-feature.service';\r\nexport * from './lib/services/DashboardWidgetFactory';\r\n\r\n//COMPONENTS\r\nexport * from './lib/components/dashboard/dashboard.component';\r\nexport * from './lib/components/widgets/chart/jace-dsh-chart.component';\r\nexport * from './lib/components/widgets/counter/jace-dsh-counter.component';\r\nexport * from './lib/components/widgets/list/jace-dsh-list.component';\r\nexport * from './lib/components/widgets/multiprog/jace-dsh-multiprog.component';\r\nexport * from './lib/components/widgets/BaseWidgetComponent';\r\nexport * from './lib/components/widgets/IWidgetComponent';\r\nexport * from './lib/components/widgets/JaceWidgetTypes';\r\n\r\nexport * from './lib/components/widgets/multiprog/circle-progress/circle-progress.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.CircleProgressComponent","i3.DashboardWidgetFactory","i4"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/dashboard-feature",
3
- "version": "19.2.1",
3
+ "version": "19.2.2",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "^19.2.15",
6
6
  "@angular/cdk": "^19.2.19",