UNPKG

angular-advance-chart

Version:

Angular Advance Chart provides chart solution for Angular.Currently supports Bar, Pie and Donut chart

116 lines 15 kB
import { __decorate } from "tslib"; import { Component, EventEmitter, Input, Output, ViewChildren } from '@angular/core'; let DonutChartComponent = class DonutChartComponent { constructor() { this.selectedItem = new EventEmitter(); this.chartOptions = { showLegend: true, legendTitle: 'Total', }; this.view = { height: 200, width: 200, radius: 80, donutSize: 20 }; this.totalSum = 0; this.processedData = []; this.legendData = []; this.chartView = []; } ngOnInit() { if (this.chartData) { this.view['donutSize'] = this.view['donutSize'] ? this.view['donutSize'] : 20; this.chartView.push(this.view.height + 'px'); this.chartView.push(this.view.width + 'px'); // Get total number of records this.totalSum = this.chartData.reduce(function (a, b) { return a + b.value; }, 0); //generate Data for list let prevAngle = 0; this.chartData.map((x, index) => { let legend = { name: x.name, value: x.value, color: x.color }; this.legendData.push(legend); let percentage = this.getPercentage(x.value, this.totalSum); if (percentage > 0) { let circlePercentage = percentage / 10 * 36; let pieData = { color: x.color, a1: prevAngle, a2: prevAngle + circlePercentage, name: x.name }; prevAngle = prevAngle + circlePercentage; this.processedData.push(pieData); } }); } } getPercentage(partialValue, totalValue) { return (100 * partialValue) / totalValue; } ngAfterViewInit() { //create svg if (this.processedData.length > 0) { this.span.map((item, index) => { item.nativeElement.setAttribute('d', this.describeArc(this.view.height / 2, this.view.width / 2, this.view.radius, this.processedData[index].a1, this.processedData[index].a2 == 360 ? 359.99 : this.processedData[index].a2)); item.nativeElement.setAttribute('stroke', this.processedData[index].color); }); } } polarToCartesian(centerX, centerY, radius, angleInDegrees) { let angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; return { x: centerX + (radius * Math.cos(angleInRadians)), y: centerY + (radius * Math.sin(angleInRadians)) }; } describeArc(x, y, radius, startAngle, endAngle) { let start = this.polarToCartesian(x, y, radius, endAngle); let end = this.polarToCartesian(x, y, radius, startAngle); let largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1"; let d = [ "M", start.x, start.y, "A", radius, radius, 0, largeArcFlag, 0, end.x, end.y ].join(" "); return d; } getItemClicked(item) { let selected = { name: item.name, value: item.value }; this.selectedItem.emit(selected); } show(status) { } }; __decorate([ Input() ], DonutChartComponent.prototype, "chartData", void 0); __decorate([ Output() ], DonutChartComponent.prototype, "selectedItem", void 0); __decorate([ ViewChildren('el') ], DonutChartComponent.prototype, "span", void 0); __decorate([ Input() ], DonutChartComponent.prototype, "chartOptions", void 0); __decorate([ Input() ], DonutChartComponent.prototype, "view", void 0); DonutChartComponent = __decorate([ Component({ selector: 'ngx-donut-chart', template: "<div class=\"chart-view ngx-donut\">\n <svg class=\"chart-wrapper\" [ngStyle]=\"{'height': chartView[0],'width': chartView[1]}\">\n <path width=\"100%\" height=\"100%\" #el fill=\"none\" [attr.stroke-width]=\"this.view.donutSize\" *ngFor=\"let item of processedData; let i=index\"\n (click)=\"getItemClicked(item)\" chartTooltip tooltip={{item.name}}/>\n\n </svg>\n <div class=\"legend\" *ngIf=\"chartOptions.showLegend\">\n <h4>{{chartOptions.legendTitle +' : '+ totalSum}}</h4>\n <div class=\"legend-item\" *ngFor=\"let item of legendData; let i=index\" >\n <div class=\"legend-item-colour\" [ngStyle]=\"{'background': item.color}\"></div><span class=\"legend-item-name\" >{{item.name}}</span><span class=\"legend-item-value\" >{{item.value}}</span>\n </div>\n </div>\n</div>", styles: ["path:hover{cursor:pointer}"] }) ], DonutChartComponent); export { DonutChartComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1hZHZhbmNlLWNoYXJ0LyIsInNvdXJjZXMiOlsibGliL19jb21wb25lbnQvZG9udXQtY2hhcnQvZG9udXQtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVVwSCxJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFtQjtJQW1COUI7UUFoQlUsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXhDLGlCQUFZLEdBQWdCO1lBQ25DLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxPQUFPO1NBQ3JCLENBQUE7UUFDUSxTQUFJLEdBQW1CO1lBQzlCLE1BQU0sRUFBRSxHQUFHO1lBQ1gsS0FBSyxFQUFFLEdBQUc7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQTtRQUNELGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxFQUFFLENBQUM7SUFDQyxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUE7WUFDNUMs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SUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNO0lBQ1gsQ0FBQztDQUNGLENBQUE7QUExR1U7SUFBUixLQUFLLEVBQUU7c0RBQXdCO0FBQ3RCO0lBQVQsTUFBTSxFQUFFO3lEQUF3QztBQUM3QjtJQUFuQixZQUFZLENBQUMsSUFBSSxDQUFDO2lEQUE2QjtBQUN2QztJQUFSLEtBQUssRUFBRTt5REFHUDtBQUNRO0lBQVIsS0FBSyxFQUFFO2lEQUtQO0FBZFUsbUJBQW1CO0lBTC9CLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsZ3pCQUEyQzs7S0FFNUMsQ0FBQztHQUNXLG1CQUFtQixDQTRHL0I7U0E1R1ksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJ0RGF0YSwgQ2hhcnRPcHRpb24gfSBmcm9tICcuLi8uLi9fbW9kZWwvY2hhcnREYXRhJztcbmltcG9ydCB7IERvbnV0Q2hhcnRWaWV3IH0gZnJvbSAnLi4vLi4vX21vZGVsL2RvbnV0Q2hhcnRPcHRpb25zJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZG9udXQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9udXQtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb251dC1jaGFydC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERvbnV0Q2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogQ2hhcnREYXRhW107XG4gIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZHJlbignZWwnKSBzcGFuOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBJbnB1dCgpIGNoYXJ0T3B0aW9uczogQ2hhcnRPcHRpb24gPSB7XG4gICAgc2hvd0xlZ2VuZDogdHJ1ZSxcbiAgICBsZWdlbmRUaXRsZTogJ1RvdGFsJyxcbiAgfVxuICBASW5wdXQoKSB2aWV3OiBEb251dENoYXJ0VmlldyA9IHtcbiAgICBoZWlnaHQ6IDIwMCxcbiAgICB3aWR0aDogMjAwLFxuICAgIHJhZGl1czogODAsXG4gICAgZG9udXRTaXplOiAyMFxuICB9XG4gIHRvdGFsU3VtID0gMDtcbiAgcHJvY2Vzc2VkRGF0YSA9IFtdO1xuICBsZWdlbmREYXRhID0gW107XG4gIGNoYXJ0VmlldyA9IFtdO1xuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXJ0RGF0YSkge1xuICAgICAgdGhpcy52aWV3Wydkb251dFNpemUnXSA9IHRoaXMudmlld1snZG9udXRTaXplJ10gPyB0aGlzLnZpZXdbJ2RvbnV0U2l6ZSddIDogMjA7XG4gICAgICB0aGlzLmNoYXJ0Vmlldy5wdXNoKHRoaXMudmlldy5oZWlnaHQgKyAncHgnKVxuICAgICAgdGhpcy5jaGFydFZpZXcucHVzaCh0aGlzLnZpZXcud2lkdGggKyAncHgnKVxuXG4gICAgICAvLyBHZXQgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcbiAgICAgIHRoaXMudG90YWxTdW0gPSB0aGlzLmNoYXJ0RGF0YS5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEgKyBiLnZhbHVlO1xuICAgICAgfSwgMCk7XG5cbiAgICAgIC8vZ2VuZXJhdGUgRGF0YSBmb3IgbGlzdFxuICAgICAgbGV0IHByZXZBbmdsZSA9IDBcbiAgICAgIHRoaXMuY2hhcnREYXRhLm1hcCgoeCwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGxlZ2VuZCA9IHtcbiAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHgudmFsdWUsXG4gICAgICAgICAgY29sb3I6IHguY29sb3JcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGVnZW5kRGF0YS5wdXNoKGxlZ2VuZClcbiAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSB0aGlzLmdldFBlcmNlbnRhZ2UoeC52YWx1ZSwgdGhpcy50b3RhbFN1bSk7XG4gICAgICAgIGlmIChwZXJjZW50YWdlID4gMCkge1xuICAgICAgICAgIGxldCBjaXJjbGVQZXJjZW50YWdlID0gcGVyY2VudGFnZSAvIDEwICogMzY7XG4gICAgICAgICAgbGV0IHBpZURhdGEgPSB7XG4gICAgICAgICAgICBjb2xvcjogeC5jb2xvcixcbiAgICAgICAgICAgIGExOiBwcmV2QW5nbGUsXG4gICAgICAgICAgICBhMjogcHJldkFuZ2xlICsgY2lyY2xlUGVyY2VudGFnZSxcbiAgICAgICAgICAgIG5hbWU6IHgubmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcmV2QW5nbGUgPSBwcmV2QW5nbGUgKyBjaXJjbGVQZXJjZW50YWdlXG4gICAgICAgICAgdGhpcy5wcm9jZXNzZWREYXRhLnB1c2gocGllRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0UGVyY2VudGFnZShwYXJ0aWFsVmFsdWUsIHRvdGFsVmFsdWUpOiBudW1iZXIge1xuICAgIHJldHVybiAoMTAwICogcGFydGlhbFZhbHVlKSAvIHRvdGFsVmFsdWU7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgICAvL2NyZWF0ZSBzdmdcbiAgICBpZiAodGhpcy5wcm9jZXNzZWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3Bhbi5tYXAoKGl0ZW06IEVsZW1lbnRSZWYsIGluZGV4KSA9PiB7XG4gICAgICAgIGl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2QnLCB0aGlzLmRlc2NyaWJlQXJjKHRoaXMudmlldy5oZWlnaHQgLyAyLCB0aGlzLnZpZXcud2lkdGggLyAyLCB0aGlzLnZpZXcucmFkaXVzLCB0aGlzLnByb2Nlc3NlZERhdGFbaW5kZXhdLmExLCB0aGlzLnByb2Nlc3NlZERhdGFbaW5kZXhdLmEyID09IDM2MCA/IDM1OS45OSA6IHRoaXMucHJvY2Vzc2VkRGF0YVtpbmRleF0uYTIpKTtcbiAgICAgICAgaXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgdGhpcy5wcm9jZXNzZWREYXRhW2luZGV4XS5jb2xvcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgcG9sYXJUb0NhcnRlc2lhbihjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGFuZ2xlSW5EZWdyZWVzKSB7XG4gICAgbGV0IGFuZ2xlSW5SYWRpYW5zID0gKGFuZ2xlSW5EZWdyZWVzIC0gOTApICogTWF0aC5QSSAvIDE4MC4wO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGNlbnRlclggKyAocmFkaXVzICogTWF0aC5jb3MoYW5nbGVJblJhZGlhbnMpKSxcbiAgICAgIHk6IGNlbnRlclkgKyAocmFkaXVzICogTWF0aC5zaW4oYW5nbGVJblJhZGlhbnMpKVxuICAgIH07XG4gIH1cblxuICBkZXNjcmliZUFyYyh4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKSB7XG4gICAgbGV0IHN0YXJ0ID0gdGhpcy5wb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgZW5kQW5nbGUpO1xuICAgIGxldCBlbmQgPSB0aGlzLnBvbGFyVG9DYXJ0ZXNpYW4oeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlKTtcbiAgICBsZXQgbGFyZ2VBcmNGbGFnID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlIDw9IDE4MCA/IFwiMFwiIDogXCIxXCI7XG5cbiAgICBsZXQgZCA9IFtcbiAgICAgIFwiTVwiLCBzdGFydC54LCBzdGFydC55LFxuICAgICAgXCJBXCIsIHJhZGl1cywgcmFkaXVzLCAwLCBsYXJnZUFyY0ZsYWcsIDAsIGVuZC54LCBlbmQueVxuICAgIF0uam9pbihcIiBcIik7XG5cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIGdldEl0ZW1DbGlja2VkKGl0ZW0pIHtcbiAgICBsZXQgc2VsZWN0ZWQgPSB7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICB2YWx1ZTogaXRlbS52YWx1ZVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHNlbGVjdGVkKTtcbiAgfVxuXG4gIHNob3coc3RhdHVzKSB7XG4gIH1cbn1cbiJdfQ==