UNPKG

ngx-beautiful-charts

Version:
223 lines 18.9 kB
/** * @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=