UNPKG

ngx-chart

Version:

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

119 lines 15.5 kB
import { __decorate } from "tslib"; import { Component, EventEmitter, Input, Output, ViewChildren } from '@angular/core'; var DonutChartComponent = /** @class */ (function () { function DonutChartComponent() { 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 = []; } DonutChartComponent.prototype.ngOnInit = function () { var _this = this; 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 var prevAngle_1 = 0; this.chartData.map(function (x, index) { var legend = { name: x.name, value: x.value, color: x.color }; _this.legendData.push(legend); var percentage = _this.getPercentage(x.value, _this.totalSum); if (percentage > 0) { var circlePercentage = percentage / 10 * 36; var pieData = { color: x.color, a1: prevAngle_1, a2: prevAngle_1 + circlePercentage, name: x.name }; prevAngle_1 = prevAngle_1 + circlePercentage; _this.processedData.push(pieData); } }); } }; DonutChartComponent.prototype.getPercentage = function (partialValue, totalValue) { return (100 * partialValue) / totalValue; }; DonutChartComponent.prototype.ngAfterViewInit = function () { var _this = this; //create svg if (this.processedData.length > 0) { this.span.map(function (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); }); } }; DonutChartComponent.prototype.polarToCartesian = function (centerX, centerY, radius, angleInDegrees) { var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; return { x: centerX + (radius * Math.cos(angleInRadians)), y: centerY + (radius * Math.sin(angleInRadians)) }; }; DonutChartComponent.prototype.describeArc = function (x, y, radius, startAngle, endAngle) { var start = this.polarToCartesian(x, y, radius, endAngle); var end = this.polarToCartesian(x, y, radius, startAngle); var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1"; var d = [ "M", start.x, start.y, "A", radius, radius, 0, largeArcFlag, 0, end.x, end.y ].join(" "); return d; }; DonutChartComponent.prototype.getItemClicked = function (item) { var selected = { name: item.name, value: item.value }; this.selectedItem.emit(selected); }; DonutChartComponent.prototype.show = function (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); return DonutChartComponent; }()); export { DonutChartComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNoYXJ0LyIsInNvdXJjZXMiOlsibGliL19jb21wb25lbnQvZG9udXQtY2hhcnQvZG9udXQtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVVwSDtJQW1CRTtRQWhCVSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFeEMsaUJBQVksR0FBZ0I7WUFDbkMsVUFBVSxFQUFFLElBQUk7WUFDaEIsV0FBVyxFQUFFLE9BQU87U0FDckIsQ0FBQTtRQUNRLFNBQUksR0FBbUI7WUFDOUIsTUFBTSxFQUFFLEdBQUc7WUFDWCxLQUFLLEVBQUUsR0FBRztZQUNWLE1BQU0sRUFBRSxFQUFFO1lBQ1YsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFBO1FBQ0QsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNDLENBQUM7SUFFakIsc0NBQVEsR0FBUjtRQUFBLGlCQW1DQztRQWxDQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUE7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJ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QUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxrQ0FBSSxHQUFKLFVBQUssTUFBTTtJQUNYLENBQUM7SUF6R1E7UUFBUixLQUFLLEVBQUU7MERBQXdCO0lBQ3RCO1FBQVQsTUFBTSxFQUFFOzZEQUF3QztJQUM3QjtRQUFuQixZQUFZLENBQUMsSUFBSSxDQUFDO3FEQUE2QjtJQUN2QztRQUFSLEtBQUssRUFBRTs2REFHUDtJQUNRO1FBQVIsS0FBSyxFQUFFO3FEQUtQO0lBZFUsbUJBQW1CO1FBTC9CLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsZ3pCQUEyQzs7U0FFNUMsQ0FBQztPQUNXLG1CQUFtQixDQTRHL0I7SUFBRCwwQkFBQztDQUFBLEFBNUdELElBNEdDO1NBNUdZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFydERhdGEsIENoYXJ0T3B0aW9uIH0gZnJvbSAnLi4vLi4vX21vZGVsL2NoYXJ0RGF0YSc7XG5pbXBvcnQgeyBEb251dENoYXJ0VmlldyB9IGZyb20gJy4uLy4uL19tb2RlbC9kb251dENoYXJ0T3B0aW9ucyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRvbnV0LWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvbnV0LWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9udXQtY2hhcnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEb251dENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBjaGFydERhdGE6IENoYXJ0RGF0YVtdO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBWaWV3Q2hpbGRyZW4oJ2VsJykgc3BhbjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBASW5wdXQoKSBjaGFydE9wdGlvbnM6IENoYXJ0T3B0aW9uID0ge1xuICAgIHNob3dMZWdlbmQ6IHRydWUsXG4gICAgbGVnZW5kVGl0bGU6ICdUb3RhbCcsXG4gIH1cbiAgQElucHV0KCkgdmlldzogRG9udXRDaGFydFZpZXcgPSB7XG4gICAgaGVpZ2h0OiAyMDAsXG4gICAgd2lkdGg6IDIwMCxcbiAgICByYWRpdXM6IDgwLFxuICAgIGRvbnV0U2l6ZTogMjBcbiAgfVxuICB0b3RhbFN1bSA9IDA7XG4gIHByb2Nlc3NlZERhdGEgPSBbXTtcbiAgbGVnZW5kRGF0YSA9IFtdO1xuICBjaGFydFZpZXcgPSBbXTtcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGFydERhdGEpIHtcbiAgICAgIHRoaXMudmlld1snZG9udXRTaXplJ10gPSB0aGlzLnZpZXdbJ2RvbnV0U2l6ZSddID8gdGhpcy52aWV3Wydkb251dFNpemUnXSA6IDIwO1xuICAgICAgdGhpcy5jaGFydFZpZXcucHVzaCh0aGlzLnZpZXcuaGVpZ2h0ICsgJ3B4JylcbiAgICAgIHRoaXMuY2hhcnRWaWV3LnB1c2godGhpcy52aWV3LndpZHRoICsgJ3B4JylcblxuICAgICAgLy8gR2V0IHRvdGFsIG51bWJlciBvZiByZWNvcmRzXG4gICAgICB0aGlzLnRvdGFsU3VtID0gdGhpcy5jaGFydERhdGEucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhICsgYi52YWx1ZTtcbiAgICAgIH0sIDApO1xuXG4gICAgICAvL2dlbmVyYXRlIERhdGEgZm9yIGxpc3RcbiAgICAgIGxldCBwcmV2QW5nbGUgPSAwXG4gICAgICB0aGlzLmNoYXJ0RGF0YS5tYXAoKHgsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBsZWdlbmQgPSB7XG4gICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB4LnZhbHVlLFxuICAgICAgICAgIGNvbG9yOiB4LmNvbG9yXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxlZ2VuZERhdGEucHVzaChsZWdlbmQpXG4gICAgICAgIGxldCBwZXJjZW50YWdlID0gdGhpcy5nZXRQZXJjZW50YWdlKHgudmFsdWUsIHRoaXMudG90YWxTdW0pO1xuICAgICAgICBpZiAocGVyY2VudGFnZSA+IDApIHtcbiAgICAgICAgICBsZXQgY2lyY2xlUGVyY2VudGFnZSA9IHBlcmNlbnRhZ2UgLyAxMCAqIDM2O1xuICAgICAgICAgIGxldCBwaWVEYXRhID0ge1xuICAgICAgICAgICAgY29sb3I6IHguY29sb3IsXG4gICAgICAgICAgICBhMTogcHJldkFuZ2xlLFxuICAgICAgICAgICAgYTI6IHByZXZBbmdsZSArIGNpcmNsZVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBuYW1lOiB4Lm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJldkFuZ2xlID0gcHJldkFuZ2xlICsgY2lyY2xlUGVyY2VudGFnZVxuICAgICAgICAgIHRoaXMucHJvY2Vzc2VkRGF0YS5wdXNoKHBpZURhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIGdldFBlcmNlbnRhZ2UocGFydGlhbFZhbHVlLCB0b3RhbFZhbHVlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKDEwMCAqIHBhcnRpYWxWYWx1ZSkgLyB0b3RhbFZhbHVlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gICAgLy9jcmVhdGUgc3ZnXG4gICAgaWYgKHRoaXMucHJvY2Vzc2VkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNwYW4ubWFwKChpdGVtOiBFbGVtZW50UmVmLCBpbmRleCkgPT4ge1xuICAgICAgICBpdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdkJywgdGhpcy5kZXNjcmliZUFyYyh0aGlzLnZpZXcuaGVpZ2h0IC8gMiwgdGhpcy52aWV3LndpZHRoIC8gMiwgdGhpcy52aWV3LnJhZGl1cywgdGhpcy5wcm9jZXNzZWREYXRhW2luZGV4XS5hMSwgdGhpcy5wcm9jZXNzZWREYXRhW2luZGV4XS5hMiA9PSAzNjAgPyAzNTkuOTkgOiB0aGlzLnByb2Nlc3NlZERhdGFbaW5kZXhdLmEyKSk7XG4gICAgICAgIGl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHRoaXMucHJvY2Vzc2VkRGF0YVtpbmRleF0uY29sb3IpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuXG4gIHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdsZUluRGVncmVlcykge1xuICAgIGxldCBhbmdsZUluUmFkaWFucyA9IChhbmdsZUluRGVncmVlcyAtIDkwKSAqIE1hdGguUEkgLyAxODAuMDtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBjZW50ZXJYICsgKHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlSW5SYWRpYW5zKSksXG4gICAgICB5OiBjZW50ZXJZICsgKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlSW5SYWRpYW5zKSlcbiAgICB9O1xuICB9XG5cbiAgZGVzY3JpYmVBcmMoeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSkge1xuICAgIGxldCBzdGFydCA9IHRoaXMucG9sYXJUb0NhcnRlc2lhbih4LCB5LCByYWRpdXMsIGVuZEFuZ2xlKTtcbiAgICBsZXQgZW5kID0gdGhpcy5wb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSk7XG4gICAgbGV0IGxhcmdlQXJjRmxhZyA9IGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSA8PSAxODAgPyBcIjBcIiA6IFwiMVwiO1xuXG4gICAgbGV0IGQgPSBbXG4gICAgICBcIk1cIiwgc3RhcnQueCwgc3RhcnQueSxcbiAgICAgIFwiQVwiLCByYWRpdXMsIHJhZGl1cywgMCwgbGFyZ2VBcmNGbGFnLCAwLCBlbmQueCwgZW5kLnlcbiAgICBdLmpvaW4oXCIgXCIpO1xuXG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBnZXRJdGVtQ2xpY2tlZChpdGVtKSB7XG4gICAgbGV0IHNlbGVjdGVkID0ge1xuICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChzZWxlY3RlZCk7XG4gIH1cblxuICBzaG93KHN0YXR1cykge1xuICB9XG59XG4iXX0=