ngx-beautiful-charts
Version:
A library to create charts in Angular
199 lines • 17.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, ElementRef } from '@angular/core';
import { colorSchemes } from '../../constants/color-schemes';
import { BarChartService } from './bar-chart.service';
import { GlobalParametersService } from '../../global/global-parameters.service';
export class BarChartComponent {
/**
* @param {?} barChartService
* @param {?} globalParametersService
* @param {?} currentElement
*/
constructor(barChartService, globalParametersService, currentElement) {
this.barChartService = barChartService;
this.globalParametersService = globalParametersService;
this.currentElement = currentElement;
this.showGridLines = false;
this.colorScheme = 'colorful';
this.customColorScheme = [];
this.xPadding = 60;
this.yPadding = this.xPadding / 2;
}
/**
* @return {?}
*/
computeBarPaths() {
this.barPaths = [];
/** @type {?} */
const noOfXAxisValues = this.data.length;
/** @type {?} */
const eachWidth = this.barChartService.rectWidth / noOfXAxisValues;
/** @type {?} */
const barWidth = eachWidth * .25;
/** @type {?} */
let cnt = -1;
/** @type {?} */
let barPath = '';
for (const bcD of this.data) {
cnt++;
/** @type {?} */
const xPos = cnt * eachWidth + eachWidth / 2 + this.xPadding;
/** @type {?} */
const yPos = this.barChartService.transformY(this.barChartService.maxY - bcD.value) + this.yPadding;
/** @type {?} */
const xStart = xPos - barWidth / 2;
/** @type {?} */
const xEnd = xPos + barWidth / 2;
/** @type {?} */
const yStart = this.barChartService.rectHeight + this.yPadding;
barPath = 'M ';
barPath = barPath + ' ' + xStart + ' ' + yStart + ' L ' + xStart
+ ' ' + yPos + ' ' + xEnd + ' ' + yPos + ' ' + xEnd + ' ' + yStart + ' Z';
this.barPaths.push(barPath);
}
}
/**
* @return {?}
*/
setColor() {
if (!this.color) {
if (this.customColorScheme.length > 0) {
this.color = this.customColorScheme[0];
}
else {
this.color = colorSchemes[this.colorScheme][0];
}
}
}
/**
* @return {?}
*/
setDimensions() {
if (this.width && !this.height)
this.height = this.width / 3;
else if (!this.width && this.height)
this.width = this.height * 3;
else if (!this.width && !this.height) {
/** @type {?} */
const host = this.currentElement.nativeElement;
if (host.parentNode != null) {
/** @type {?} */
const dims = host.parentNode.getBoundingClientRect();
this.width = dims.width;
this.height = dims.width / 3;
}
}
// console.log('---set dimensions---');
// console.log('width: ' + this.width);
// console.log('height: ' + this.height);
// console.log('--------------------');
}
/**
* @return {?}
*/
ngOnInit() {
this.componentID = this.globalParametersService.addNewComponent();
// console.log('init..');
this.setDimensions();
this.dataCopy = JSON.parse(JSON.stringify(this.data));
this.barChartService.setValues({
componentID: this.componentID,
width: this.width,
height: this.height,
xPadding: this.xPadding,
yPadding: this.yPadding,
data: this.data
});
this.setColor();
// console.log(this.color);
this.computeBarPaths();
}
/**
* @return {?}
*/
ngOnChanges() {
this.dataCopy = JSON.parse(JSON.stringify(this.data));
this.barChartService.setValues({
componentID: this.componentID,
width: this.width,
height: this.height,
xPadding: this.xPadding,
yPadding: this.yPadding,
data: this.data
});
this.setColor();
// console.log(this.color);
this.computeBarPaths();
}
}
BarChartComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-bar-chart',
template: "<svg [attr.width]=\"width\" [attr.height]=\"height\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n\n <g ngx-bc-chart-base\n [showGridLines]=\"showGridLines\"\n [xAxisTitle]=\"xAxisTitle\" [yAxisTitle]=\"yAxisTitle\"\n />\n\n <g *ngFor=\"let barPath of barPaths\">\n <path class=\"chart-bar\"\n [attr.d]=\"barPath\" [attr.fill]=\"color\" />\n </g>\n\n</svg>",
providers: [BarChartService],
styles: [".chart-bar:hover{stroke-width:1;stroke:#444}"]
}] }
];
/** @nocollapse */
BarChartComponent.ctorParameters = () => [
{ type: BarChartService },
{ type: GlobalParametersService },
{ type: ElementRef }
];
BarChartComponent.propDecorators = {
data: [{ type: Input }],
width: [{ type: Input }],
height: [{ type: Input }],
xAxisTitle: [{ type: Input }],
yAxisTitle: [{ type: Input }],
showGridLines: [{ type: Input }],
color: [{ type: Input }],
colorScheme: [{ type: Input }],
customColorScheme: [{ type: Input }]
};
if (false) {
/** @type {?} */
BarChartComponent.prototype.data;
/** @type {?} */
BarChartComponent.prototype.width;
/** @type {?} */
BarChartComponent.prototype.height;
/** @type {?} */
BarChartComponent.prototype.xAxisTitle;
/** @type {?} */
BarChartComponent.prototype.yAxisTitle;
/** @type {?} */
BarChartComponent.prototype.showGridLines;
/** @type {?} */
BarChartComponent.prototype.color;
/** @type {?} */
BarChartComponent.prototype.colorScheme;
/** @type {?} */
BarChartComponent.prototype.customColorScheme;
/** @type {?} */
BarChartComponent.prototype.componentID;
/** @type {?} */
BarChartComponent.prototype.xPadding;
/** @type {?} */
BarChartComponent.prototype.yPadding;
/** @type {?} */
BarChartComponent.prototype.barPaths;
/** @type {?} */
BarChartComponent.prototype.dataCopy;
/** @type {?} */
BarChartComponent.prototype.barChartService;
/**
* @type {?}
* @private
*/
BarChartComponent.prototype.globalParametersService;
/**
* @type {?}
* @private
*/
BarChartComponent.prototype.currentElement;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1iZWF1dGlmdWwtY2hhcnRzLyIsInNvdXJjZXMiOlsibGliL2Jhci1jaGFydC9iYXItY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQVFqRixNQUFNLE9BQU8saUJBQWlCOzs7Ozs7SUFtRDVCLFlBQW1CLGVBQWdDLEVBQy9CLHVCQUFnRCxFQUNoRCxjQUEwQjtRQUYzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDL0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBWTtRQXJDckMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxVQUFVLENBQUM7UUFDekIsc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBRzFDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUE4QnFCLENBQUM7Ozs7SUExQm5ELGVBQWU7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7Y0FDYixlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNOztjQUNsQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsZUFBZTs7Y0FDNUQsUUFBUSxHQUFHLFNBQVMsR0FBRyxHQUFHOztZQUM1QixHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUNSLE9BQU8sR0FBRyxF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Szt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7NEJBQ0wsS0FBSztvQkFDTCxLQUFLOzBCQUNMLEtBQUs7Z0NBQ0wsS0FBSzs7OztJQVJOLGlDQUFnRDs7SUFDaEQsa0NBQXVCOztJQUN2QixtQ0FBd0I7O0lBQ3hCLHVDQUE0Qjs7SUFDNUIsdUNBQTRCOztJQUM1QiwwQ0FBK0I7O0lBQy9CLGtDQUF1Qjs7SUFDdkIsd0NBQWtDOztJQUNsQyw4Q0FBMEM7O0lBRTFDLHdDQUFvQjs7SUFDcEIscUNBQWM7O0lBQ2QscUNBQTZCOztJQUM3QixxQ0FBbUI7O0lBQ25CLHFDQUFTOztJQTBCRyw0Q0FBdUM7Ozs7O0lBQ3ZDLG9EQUF3RDs7Ozs7SUFDeEQsMkNBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkNoYW5nZXMsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbG9yU2NoZW1lcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb2xvci1zY2hlbWVzJztcbmltcG9ydCB7IEJhckNoYXJ0U2VydmljZSB9IGZyb20gJy4vYmFyLWNoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsUGFyYW1ldGVyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9nbG9iYWwvZ2xvYmFsLXBhcmFtZXRlcnMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1iYXItY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFyLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFyLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0JhckNoYXJ0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQmFyQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgLy8gPGg0PkJhciBDaGFydDwvaDQ+XG4gIC8vIDxuZ3gtYmVhdXRpZnVsLWNoYXJ0cyBbd2lkdGhdPVwiMTEwMFwiIFtoZWlnaHRdPVwiNDAwXCJcbiAgLy8gW2Rpc3BsYXlYQXhpc109XCJ0cnVlXCJcbiAgLy8gW2Rpc3BsYXlZQXhpc109XCJ0cnVlXCJcbiAgLy8geEF4aXNUaXRsZT1cIkNpdHlcIlxuICAvLyB5QXhpc1RpdGxlPVwiVmFsdWVcIlxuICAvLyBbZGF0YV09XCJiYXJDaGFydERhdGFcIlxuICAvLyBjaGFydFR5cGU9XCJiYXItY2hhcnRcIiBbc2hvd0dyaWRMaW5lc109XCJ0cnVlXCI+PC9uZ3gtYmVhdXRpZnVsLWNoYXJ0cz5cblxuICBASW5wdXQoKSBkYXRhOiBbe25hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlciB9XTtcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIHhBeGlzVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgeUF4aXNUaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93R3JpZExpbmVzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbG9yOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbG9yU2NoZW1lID0gJ2NvbG9yZnVsJztcbiAgQElucHV0KCkgY3VzdG9tQ29sb3JTY2hlbWU6IHN0cmluZ1tdID0gW107XG5cbiAgY29tcG9uZW50SUQ6IG51bWJlcjtcbiAgeFBhZGRpbmcgPSA2MDtcbiAgeVBhZGRpbmcgPSB0aGlzLnhQYWRkaW5nIC8gMjtcbiAgYmFyUGF0aHM6IHN0cmluZ1tdO1xuICBkYXRhQ29weTtcblxuICBjb21wdXRlQmFyUGF0aHMoKSB7XG4gICAgdGhpcy5iYXJQYXRocyA9IFtdO1xuICAgIGNvbnN0IG5vT2ZYQXhpc1ZhbHVlcyA9IHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgZWFjaFdpZHRoID0gdGhpcy5iYXJDaGFydFNlcnZpY2UucmVjdFdpZHRoIC8gbm9PZlhBeGlzVmFsdWVzO1xuICAgIGNvbnN0IGJhcldpZHRoID0gZWFjaFdpZHRoICogLjI1O1xuICAgIGxldCBjbnQgPSAtMTtcbiAgICBsZXQgYmFyUGF0aCA9ICcnO1xuICAgIGZvciAoY29uc3QgYmNEIG9mIHRoaXMuZGF0YSkge1xuICAgICAgY250ICsrO1xuICAgICAgY29uc3QgeFBvcyA9IGNudCAqIGVhY2hXaWR0aCArIGVhY2hXaWR0aCAvIDIgKyB0aGlzLnhQYWRkaW5nO1xuICAgICAgY29uc3QgeVBvcyA9IHRoaXMuYmFyQ2hhcnRTZXJ2aWNlLnRyYW5zZm9ybVkodGhpcy5iYXJDaGFydFNlcnZpY2UubWF4WSAtIGJjRC52YWx1ZSkgKyB0aGlzLnlQYWRkaW5nO1xuXG4gICAgICBjb25zdCB4U3RhcnQgPSB4UG9zIC0gYmFyV2lkdGggLyAyO1xuICAgICAgY29uc3QgeEVuZCA9IHhQb3MgKyBiYXJXaWR0aCAvIDI7XG4gICAgICBjb25zdCB5U3RhcnQgPSB0aGlzLmJhckNoYXJ0U2VydmljZS5yZWN0SGVpZ2h0ICsgdGhpcy55UGFkZGluZztcbiAgICAgIGJhclBhdGggPSAnTSAnO1xuICAgICAgYmFyUGF0aCA9IGJhclBhdGggKyAnICcgKyB4U3RhcnQgKyAnICcgKyB5U3RhcnQgKyAnIEwgJyArIHhTdGFydFxuICAgICAgKyAnICcgKyB5UG9zICsgJyAnICsgeEVuZCArICcgJyArIHlQb3MgKyAnICcgKyB4RW5kICsgJyAnICsgeVN0YXJ0ICsgJyBaJztcblxuICAgICAgdGhpcy5iYXJQYXRocy5wdXNoKGJhclBhdGgpO1xuICAgIH1cblxuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGJhckNoYXJ0U2VydmljZTogQmFyQ2hhcnRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGdsb2JhbFBhcmFtZXRlcnNTZXJ2aWNlOiBHbG9iYWxQYXJhbWV0ZXJzU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjdXJyZW50RWxlbWVudDogRWxlbWVudFJlZikgeyB9XG5cbiAgc2V0Q29sb3IoKSB7XG4gICAgaWYgKCF0aGlzLmNvbG9yKSB7XG4gICAgICBpZiAodGhpcy5jdXN0b21Db2xvclNjaGVtZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29sb3IgPSB0aGlzLmN1c3RvbUNvbG9yU2NoZW1lWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yU2NoZW1lc1t0aGlzLmNvbG9yU2NoZW1lXVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXREaW1lbnNpb25zKCkge1xuICAgIGlmICh0aGlzLndpZHRoICYmICF0aGlzLmhlaWdodCkgdGhpcy5oZWlnaHQgPSB0aGlzLndpZHRoIC8gMztcbiAgICBlbHNlIGlmICghdGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCkgdGhpcy53aWR0aCA9IHRoaXMuaGVpZ2h0ICogMztcbiAgICBlbHNlIGlmICghdGhpcy53aWR0aCAmJiAhdGhpcy5oZWlnaHQpIHtcbiAgICAgIGNvbnN0IGhvc3QgPSB0aGlzLmN1cnJlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoaG9zdC5wYXJlbnROb2RlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGltcyA9IGhvc3QucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IGRpbXMud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gZGltcy53aWR0aCAvIDM7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCctLS1zZXQgZGltZW5zaW9ucy0tLScpO1xuICAgIC8vIGNvbnNvbGUubG9nKCd3aWR0aDogJyArIHRoaXMud2lkdGgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdoZWlnaHQ6ICcgKyB0aGlzLmhlaWdodCk7XG4gICAgLy8gY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbXBvbmVudElEID0gdGhpcy5nbG9iYWxQYXJhbWV0ZXJzU2VydmljZS5hZGROZXdDb21wb25lbnQoKTtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5pdC4uJyk7XG4gICAgdGhpcy5zZXREaW1lbnNpb25zKCk7XG4gICAgdGhpcy5kYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XG4gICAgdGhpcy5iYXJDaGFydFNlcnZpY2Uuc2V0VmFsdWVzKHtcbiAgICAgIGNvbXBvbmVudElEOiB0aGlzLmNvbXBvbmVudElELFxuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgeFBhZGRpbmc6IHRoaXMueFBhZGRpbmcsXG4gICAgICB5UGFkZGluZzogdGhpcy55UGFkZGluZyxcbiAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgIH0pO1xuICAgIHRoaXMuc2V0Q29sb3IoKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmNvbXB1dGVCYXJQYXRocygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5kYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XG4gICAgdGhpcy5iYXJDaGFydFNlcnZpY2Uuc2V0VmFsdWVzKHtcbiAgICAgIGNvbXBvbmVudElEOiB0aGlzLmNvbXBvbmVudElELFxuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgeFBhZGRpbmc6IHRoaXMueFBhZGRpbmcsXG4gICAgICB5UGFkZGluZzogdGhpcy55UGFkZGluZyxcbiAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgIH0pO1xuICAgIHRoaXMuc2V0Q29sb3IoKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmNvbXB1dGVCYXJQYXRocygpO1xuICB9XG5cbn1cbiJdfQ==