ngx-beautiful-charts
Version:
A library to create charts in Angular
223 lines • 18.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
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';
var BarChartComponent = /** @class */ (function () {
function BarChartComponent(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 {?}
*/
BarChartComponent.prototype.computeBarPaths = /**
* @return {?}
*/
function () {
var e_1, _a;
this.barPaths = [];
/** @type {?} */
var noOfXAxisValues = this.data.length;
/** @type {?} */
var eachWidth = this.barChartService.rectWidth / noOfXAxisValues;
/** @type {?} */
var barWidth = eachWidth * .25;
/** @type {?} */
var cnt = -1;
/** @type {?} */
var barPath = '';
try {
for (var _b = tslib_1.__values(this.data), _c = _b.next(); !_c.done; _c = _b.next()) {
var bcD = _c.value;
cnt++;
/** @type {?} */
var xPos = cnt * eachWidth + eachWidth / 2 + this.xPadding;
/** @type {?} */
var yPos = this.barChartService.transformY(this.barChartService.maxY - bcD.value) + this.yPadding;
/** @type {?} */
var xStart = xPos - barWidth / 2;
/** @type {?} */
var xEnd = xPos + barWidth / 2;
/** @type {?} */
var yStart = this.barChartService.rectHeight + this.yPadding;
barPath = 'M ';
barPath = barPath + ' ' + xStart + ' ' + yStart + ' L ' + xStart
+ ' ' + yPos + ' ' + xEnd + ' ' + yPos + ' ' + xEnd + ' ' + yStart + ' Z';
this.barPaths.push(barPath);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
};
/**
* @return {?}
*/
BarChartComponent.prototype.setColor = /**
* @return {?}
*/
function () {
if (!this.color) {
if (this.customColorScheme.length > 0) {
this.color = this.customColorScheme[0];
}
else {
this.color = colorSchemes[this.colorScheme][0];
}
}
};
/**
* @return {?}
*/
BarChartComponent.prototype.setDimensions = /**
* @return {?}
*/
function () {
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 {?} */
var host = this.currentElement.nativeElement;
if (host.parentNode != null) {
/** @type {?} */
var 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 {?}
*/
BarChartComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
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 {?}
*/
BarChartComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
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 = function () { return [
{ 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 }]
};
return BarChartComponent;
}());
export { BarChartComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1iZWF1dGlmdWwtY2hhcnRzLyIsInNvdXJjZXMiOlsibGliL2Jhci1jaGFydC9iYXItY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFakY7SUF5REUsMkJBQW1CLGVBQWdDLEVBQy9CLHVCQUFnRCxFQUNoRCxjQUEwQjtRQUYzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDL0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBWTtRQXJDckMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxVQUFVLENBQUM7UUFDekIsc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBRzFDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUE4QnFCLENBQUM7Ozs7SUExQm5ELDJDQUFlOzs7SUFBZjs7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7WUFDYixlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNOztZQUNsQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsZUFBZTs7WUFDNUQsUUFBUSxHQUFHLFNBQVMsR0FBRyxHQUFHOztZQUM1QixHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUNSLE9BQU8sR0FBRyxFQUFFOztZQUNoQixL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OztnQkFSUSxlQUFlO2dCQUNmLHVCQUF1QjtnQkFIYyxVQUFVOzs7dUJBc0JyRCxLQUFLO3dCQUNMLEtBQUs7eUJBQ0wsS0FBSzs2QkFDTCxLQUFLOzZCQUNMLEtBQUs7Z0NBQ0wsS0FBSzt3QkFDTCxLQUFLOzhCQUNMLEtBQUs7b0NBQ0wsS0FBSzs7SUFnR1Isd0JBQUM7Q0FBQSxBQXpIRCxJQXlIQztTQW5IWSxpQkFBaUI7OztJQVc1QixpQ0FBZ0Q7O0lBQ2hELGtDQUF1Qjs7SUFDdkIsbUNBQXdCOztJQUN4Qix1Q0FBNEI7O0lBQzVCLHVDQUE0Qjs7SUFDNUIsMENBQStCOztJQUMvQixrQ0FBdUI7O0lBQ3ZCLHdDQUFrQzs7SUFDbEMsOENBQTBDOztJQUUxQyx3Q0FBb0I7O0lBQ3BCLHFDQUFjOztJQUNkLHFDQUE2Qjs7SUFDN0IscUNBQW1COztJQUNuQixxQ0FBUzs7SUEwQkcsNENBQXVDOzs7OztJQUN2QyxvREFBd0Q7Ozs7O0lBQ3hELDJDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2xvclNjaGVtZXMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29sb3Itc2NoZW1lcyc7XG5pbXBvcnQgeyBCYXJDaGFydFNlcnZpY2UgfSBmcm9tICcuL2Jhci1jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbFBhcmFtZXRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsL2dsb2JhbC1wYXJhbWV0ZXJzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtYmFyLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhci1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Jhci1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtCYXJDaGFydFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEJhckNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIC8vIDxoND5CYXIgQ2hhcnQ8L2g0PlxuICAvLyA8bmd4LWJlYXV0aWZ1bC1jaGFydHMgW3dpZHRoXT1cIjExMDBcIiBbaGVpZ2h0XT1cIjQwMFwiXG4gIC8vIFtkaXNwbGF5WEF4aXNdPVwidHJ1ZVwiXG4gIC8vIFtkaXNwbGF5WUF4aXNdPVwidHJ1ZVwiXG4gIC8vIHhBeGlzVGl0bGU9XCJDaXR5XCJcbiAgLy8geUF4aXNUaXRsZT1cIlZhbHVlXCJcbiAgLy8gW2RhdGFdPVwiYmFyQ2hhcnREYXRhXCJcbiAgLy8gY2hhcnRUeXBlPVwiYmFyLWNoYXJ0XCIgW3Nob3dHcmlkTGluZXNdPVwidHJ1ZVwiPjwvbmd4LWJlYXV0aWZ1bC1jaGFydHM+XG5cbiAgQElucHV0KCkgZGF0YTogW3tuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfV07XG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXI7XG4gIEBJbnB1dCgpIGhlaWdodDogbnVtYmVyO1xuICBASW5wdXQoKSB4QXhpc1RpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHlBeGlzVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0dyaWRMaW5lcyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBjb2xvclNjaGVtZSA9ICdjb2xvcmZ1bCc7XG4gIEBJbnB1dCgpIGN1c3RvbUNvbG9yU2NoZW1lOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbXBvbmVudElEOiBudW1iZXI7XG4gIHhQYWRkaW5nID0gNjA7XG4gIHlQYWRkaW5nID0gdGhpcy54UGFkZGluZyAvIDI7XG4gIGJhclBhdGhzOiBzdHJpbmdbXTtcbiAgZGF0YUNvcHk7XG5cbiAgY29tcHV0ZUJhclBhdGhzKCkge1xuICAgIHRoaXMuYmFyUGF0aHMgPSBbXTtcbiAgICBjb25zdCBub09mWEF4aXNWYWx1ZXMgPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IGVhY2hXaWR0aCA9IHRoaXMuYmFyQ2hhcnRTZXJ2aWNlLnJlY3RXaWR0aCAvIG5vT2ZYQXhpc1ZhbHVlcztcbiAgICBjb25zdCBiYXJXaWR0aCA9IGVhY2hXaWR0aCAqIC4yNTtcbiAgICBsZXQgY250ID0gLTE7XG4gICAgbGV0IGJhclBhdGggPSAnJztcbiAgICBmb3IgKGNvbnN0IGJjRCBvZiB0aGlzLmRhdGEpIHtcbiAgICAgIGNudCArKztcbiAgICAgIGNvbnN0IHhQb3MgPSBjbnQgKiBlYWNoV2lkdGggKyBlYWNoV2lkdGggLyAyICsgdGhpcy54UGFkZGluZztcbiAgICAgIGNvbnN0IHlQb3MgPSB0aGlzLmJhckNoYXJ0U2VydmljZS50cmFuc2Zvcm1ZKHRoaXMuYmFyQ2hhcnRTZXJ2aWNlLm1heFkgLSBiY0QudmFsdWUpICsgdGhpcy55UGFkZGluZztcblxuICAgICAgY29uc3QgeFN0YXJ0ID0geFBvcyAtIGJhcldpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHhFbmQgPSB4UG9zICsgYmFyV2lkdGggLyAyO1xuICAgICAgY29uc3QgeVN0YXJ0ID0gdGhpcy5iYXJDaGFydFNlcnZpY2UucmVjdEhlaWdodCArIHRoaXMueVBhZGRpbmc7XG4gICAgICBiYXJQYXRoID0gJ00gJztcbiAgICAgIGJhclBhdGggPSBiYXJQYXRoICsgJyAnICsgeFN0YXJ0ICsgJyAnICsgeVN0YXJ0ICsgJyBMICcgKyB4U3RhcnRcbiAgICAgICsgJyAnICsgeVBvcyArICcgJyArIHhFbmQgKyAnICcgKyB5UG9zICsgJyAnICsgeEVuZCArICcgJyArIHlTdGFydCArICcgWic7XG5cbiAgICAgIHRoaXMuYmFyUGF0aHMucHVzaChiYXJQYXRoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBiYXJDaGFydFNlcnZpY2U6IEJhckNoYXJ0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBnbG9iYWxQYXJhbWV0ZXJzU2VydmljZTogR2xvYmFsUGFyYW1ldGVyc1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgY3VycmVudEVsZW1lbnQ6IEVsZW1lbnRSZWYpIHsgfVxuXG4gIHNldENvbG9yKCkge1xuICAgIGlmICghdGhpcy5jb2xvcikge1xuICAgICAgaWYgKHRoaXMuY3VzdG9tQ29sb3JTY2hlbWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbG9yID0gdGhpcy5jdXN0b21Db2xvclNjaGVtZVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sb3IgPSBjb2xvclNjaGVtZXNbdGhpcy5jb2xvclNjaGVtZV1bMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0RGltZW5zaW9ucygpIHtcbiAgICBpZiAodGhpcy53aWR0aCAmJiAhdGhpcy5oZWlnaHQpIHRoaXMuaGVpZ2h0ID0gdGhpcy53aWR0aCAvIDM7XG4gICAgZWxzZSBpZiAoIXRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpIHRoaXMud2lkdGggPSB0aGlzLmhlaWdodCAqIDM7XG4gICAgZWxzZSBpZiAoIXRoaXMud2lkdGggJiYgIXRoaXMuaGVpZ2h0KSB7XG4gICAgICBjb25zdCBob3N0ID0gdGhpcy5jdXJyZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGhvc3QucGFyZW50Tm9kZSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRpbXMgPSBob3N0LnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHRoaXMud2lkdGggPSBkaW1zLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGRpbXMud2lkdGggLyAzO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnLS0tc2V0IGRpbWVuc2lvbnMtLS0nKTtcbiAgICAvLyBjb25zb2xlLmxvZygnd2lkdGg6ICcgKyB0aGlzLndpZHRoKTtcbiAgICAvLyBjb25zb2xlLmxvZygnaGVpZ2h0OiAnICsgdGhpcy5oZWlnaHQpO1xuICAgIC8vIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLScpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb21wb25lbnRJRCA9IHRoaXMuZ2xvYmFsUGFyYW1ldGVyc1NlcnZpY2UuYWRkTmV3Q29tcG9uZW50KCk7XG4gICAgLy8gY29uc29sZS5sb2coJ2luaXQuLicpO1xuICAgIHRoaXMuc2V0RGltZW5zaW9ucygpO1xuICAgIHRoaXMuZGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO1xuICAgIHRoaXMuYmFyQ2hhcnRTZXJ2aWNlLnNldFZhbHVlcyh7XG4gICAgICBjb21wb25lbnRJRDogdGhpcy5jb21wb25lbnRJRCxcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgIHhQYWRkaW5nOiB0aGlzLnhQYWRkaW5nLFxuICAgICAgeVBhZGRpbmc6IHRoaXMueVBhZGRpbmcsXG4gICAgICBkYXRhOiB0aGlzLmRhdGFcbiAgICB9KTtcbiAgICB0aGlzLnNldENvbG9yKCk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jb2xvcik7XG4gICAgdGhpcy5jb21wdXRlQmFyUGF0aHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuZGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO1xuICAgIHRoaXMuYmFyQ2hhcnRTZXJ2aWNlLnNldFZhbHVlcyh7XG4gICAgICBjb21wb25lbnRJRDogdGhpcy5jb21wb25lbnRJRCxcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgIHhQYWRkaW5nOiB0aGlzLnhQYWRkaW5nLFxuICAgICAgeVBhZGRpbmc6IHRoaXMueVBhZGRpbmcsXG4gICAgICBkYXRhOiB0aGlzLmRhdGFcbiAgICB9KTtcbiAgICB0aGlzLnNldENvbG9yKCk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jb2xvcik7XG4gICAgdGhpcy5jb21wdXRlQmFyUGF0aHMoKTtcbiAgfVxuXG59XG4iXX0=