Browse Source

gauge resize

merge-requests/1/merge
vargburz 4 years ago
parent
commit
1ae1c178b7
  1. 56
      src/index.ts

56
src/index.ts

@ -1,4 +1,4 @@
import { GaugeTimeSerie, GaugeOptions, Stat, Stop, ValueTextFormat } from './types'; import { GaugeTimeSerie, GaugeOptions, Stat, Stop } from './types';
import { ChartwerkPod, VueChartwerkPodMixin, ZoomType } from '@chartwerk/core'; import { ChartwerkPod, VueChartwerkPodMixin, ZoomType } from '@chartwerk/core';
@ -27,7 +27,10 @@ const DEFAULT_GAUGE_OPTIONS: GaugeOptions = {
zoom: { zoom: {
type: ZoomType.NONE type: ZoomType.NONE
}, },
margin: {
top: 0, bottom: 0,
left: 0, right: 0
},
stops: [ stops: [
{ {
color: 'green', color: 'green',
@ -51,6 +54,7 @@ export class ChartwerkGaugePod extends ChartwerkPod<GaugeTimeSerie, GaugeOptions
// TODO: better name // TODO: better name
private _gaugeTransform = ''; private _gaugeTransform = '';
private _gaugeCenter = ''; private _gaugeCenter = '';
private _minWH = 0;
constructor(el: HTMLElement, _series: GaugeTimeSerie[] = [], _options: GaugeOptions = {}) { constructor(el: HTMLElement, _series: GaugeTimeSerie[] = [], _options: GaugeOptions = {}) {
super( super(
@ -64,14 +68,21 @@ export class ChartwerkGaugePod extends ChartwerkPod<GaugeTimeSerie, GaugeOptions
this.renderNoDataPointsMessage(); this.renderNoDataPointsMessage();
return; return;
} }
this._gaugeTransform = `translate(${this.width / 2},${this.height - 10})`;
this._gaugeCenter = `translate(${this.width / 2 + this.margin.left},${this.height + this.margin.top - VALUE_TEXT_MARGIN})`;
this._setBoundingBox();
this._renderValueArc(); this._renderValueArc();
this._renderThresholdArc(); this._renderThresholdArc();
this._renderValue(); this._renderValue();
} }
private _setBoundingBox(): void {
// TODO: refactor
this._gaugeTransform = `translate(${this.width / 2},${0.8 * this.height})`;
this._gaugeCenter = `translate(${this.width / 2 + this.margin.left},${0.8 * this.height})`;
this._minWH = _.min([0.6 * this.width, this.height]);
}
private _renderValue(): void { private _renderValue(): void {
this.svg this.svg
.append('text') .append('text')
@ -79,13 +90,12 @@ export class ChartwerkGaugePod extends ChartwerkPod<GaugeTimeSerie, GaugeOptions
.attr('y', 0) .attr('y', 0)
.text(this._valueText) .text(this._valueText)
.classed('value-text', true) .classed('value-text', true)
.attr('font-family', 'Poppins, sans-serif') .attr('font-family', 'Roboto, "Helvetica Neue", Arial, sans-serif')
.attr('font-size', `${this._valueTextFontSize}px`) .attr('font-size', `${this._valueTextFontSize}px`)
.attr('transform', this._gaugeCenter) .attr('transform', this._gaugeCenter)
.attr('text-anchor', 'middle') .attr('text-anchor', 'middle')
.attr('alignment-baseline', 'central') .attr('alignment-baseline', 'central')
.attr('fill', this._mainCircleColor) .attr('fill', this._mainCircleColor);
.style('font-weight', 'bold');
} }
private _renderValueArc(): void { private _renderValueArc(): void {
@ -195,15 +205,17 @@ export class ChartwerkGaugePod extends ChartwerkPod<GaugeTimeSerie, GaugeOptions
} }
private get _valueTextFontSize(): number { private get _valueTextFontSize(): number {
let font;
if(this._valueText.length <= 6) { if(this._valueText.length <= 6) {
return VALUE_TEXT_FONT_SIZE; font = VALUE_TEXT_FONT_SIZE;
} else if(this._valueText.length > 6 && this._valueText.length <= 10) { } else if(this._valueText.length > 6 && this._valueText.length <= 10) {
return VALUE_TEXT_FONT_SIZE - 2; font = VALUE_TEXT_FONT_SIZE - 2;
} else if(this._valueText.length > 10 && this._valueText.length <= 12) { } else if(this._valueText.length > 10 && this._valueText.length <= 12) {
return VALUE_TEXT_FONT_SIZE - 4; font = VALUE_TEXT_FONT_SIZE - 4;
} else { } else {
return VALUE_TEXT_FONT_SIZE - 6; font = VALUE_TEXT_FONT_SIZE - 6;
} }
return this.rescaleValueFont(font);
} }
private get _stat(): Stat { private get _stat(): Stat {
@ -211,11 +223,29 @@ export class ChartwerkGaugePod extends ChartwerkPod<GaugeTimeSerie, GaugeOptions
} }
private get _innerRadius(): number { private get _innerRadius(): number {
return this.options.innerRadius; // TODO: scale shouldn't be here
return this.rescaleArcRadius(this.options.innerRadius);
} }
private get _outerRadius(): number { private get _outerRadius(): number {
return this.options.outerRadius; // TODO: scale shouldn't be here
return this.rescaleArcRadius(this.options.outerRadius);
}
rescaleArcRadius(radius: number): number {
return radius * this._scaleFactor;
}
rescaleValueFont(fontsize: number): number {
const scale = 0.8 * this._scaleFactor;
return fontsize * scale;
}
private get _scaleFactor(): number {
const stopOuterRadius = this.options.outerRadius + SPACE_BETWEEN_CIRCLES + STOPS_CIRCLE_WIDTH;
const marginForRounded = VALUE_TEXT_MARGIN + 10;
const scale = this._minWH / (stopOuterRadius + marginForRounded);
return scale;
} }
private get _valueTextDecimals(): number { private get _valueTextDecimals(): number {

Loading…
Cancel
Save