rozetko
3 years ago
6 changed files with 226 additions and 110 deletions
@ -0,0 +1,170 @@ |
|||||||
|
import { GaugeConfig, IconConfig, Stat, Stop } from '../types'; |
||||||
|
|
||||||
|
import { AxisFormat, CoreOptions } from '@chartwerk/core'; |
||||||
|
|
||||||
|
import lodashIsNil from 'lodash/isNil'; |
||||||
|
|
||||||
|
|
||||||
|
const BACKGROUND_COLOR = 'rgba(38, 38, 38, 0.1)'; |
||||||
|
const DEFAULT_INNER_RADIUS = 52; |
||||||
|
const DEFAULT_OUTER_RADIUS = 72; |
||||||
|
|
||||||
|
export const CORE_OPTIONS_DEFAULTS = { |
||||||
|
renderLegend: false, |
||||||
|
// TODO: find a method in lodash (defaultsDeep?)
|
||||||
|
grid: { |
||||||
|
x: { |
||||||
|
enabled: false |
||||||
|
}, |
||||||
|
y: { |
||||||
|
enabled: false |
||||||
|
} |
||||||
|
}, |
||||||
|
zoomEvents: { |
||||||
|
mouse: { |
||||||
|
zoom: { |
||||||
|
isActive: false, |
||||||
|
}, |
||||||
|
pan: { |
||||||
|
isActive: false |
||||||
|
}, |
||||||
|
}, |
||||||
|
scroll: { |
||||||
|
zoom: { |
||||||
|
isActive: false |
||||||
|
}, |
||||||
|
pan: { |
||||||
|
isActive: false, |
||||||
|
} |
||||||
|
}, |
||||||
|
}, |
||||||
|
axis: { |
||||||
|
x: { isActive: false, format: AxisFormat.NUMERIC }, |
||||||
|
y: { isActive: false, format: AxisFormat.NUMERIC }, |
||||||
|
y1: { isActive: false, format: AxisFormat.NUMERIC }, |
||||||
|
}, |
||||||
|
margin: { |
||||||
|
top: 0, bottom: 0, |
||||||
|
left: 0, right: 0 |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
const GAUGE_OPTIONS_DEFAULTS: GaugeConfig = { |
||||||
|
innerRadius: DEFAULT_INNER_RADIUS, |
||||||
|
outerRadius: DEFAULT_OUTER_RADIUS, |
||||||
|
stops: [ |
||||||
|
{ |
||||||
|
color: 'green', |
||||||
|
value: 10 |
||||||
|
}, |
||||||
|
{ |
||||||
|
color: 'yellow', |
||||||
|
value: 20 |
||||||
|
} |
||||||
|
], |
||||||
|
defaultColor: 'red', |
||||||
|
stat: Stat.CURRENT, |
||||||
|
icons: [], |
||||||
|
valueArcBackgroundColor: BACKGROUND_COLOR, |
||||||
|
reversed: false, |
||||||
|
enableExtremumLabels: false, |
||||||
|
enableThresholdLabels: false, |
||||||
|
enableThresholdDrag: false, |
||||||
|
|
||||||
|
minValue: undefined, |
||||||
|
maxValue: undefined, |
||||||
|
valueFontSize: undefined, // undefined === auto
|
||||||
|
valueFormatter: undefined, |
||||||
|
dragCallback: undefined, |
||||||
|
dragEndCallback: undefined, |
||||||
|
}; |
||||||
|
|
||||||
|
export class GaugeOptions extends CoreOptions<GaugeConfig> { |
||||||
|
|
||||||
|
constructor(options: GaugeConfig) { |
||||||
|
super(options); |
||||||
|
} |
||||||
|
|
||||||
|
protected get defaults(): GaugeConfig { |
||||||
|
console.log({ ...this._coreDefaults, ...GAUGE_OPTIONS_DEFAULTS }) |
||||||
|
return { ...this._coreDefaults, ...GAUGE_OPTIONS_DEFAULTS }; |
||||||
|
} |
||||||
|
|
||||||
|
get icons(): IconConfig[] { |
||||||
|
return this._options.icons; |
||||||
|
} |
||||||
|
|
||||||
|
get minValue(): number | undefined { |
||||||
|
return this._options.minValue; |
||||||
|
} |
||||||
|
|
||||||
|
get maxValue(): number | undefined { |
||||||
|
return this._options.maxValue; |
||||||
|
} |
||||||
|
|
||||||
|
get enableThresholdDrag(): boolean { |
||||||
|
return this._options.enableThresholdDrag; |
||||||
|
} |
||||||
|
|
||||||
|
get enableThresholdLabels(): boolean { |
||||||
|
return this._options.enableThresholdLabels; |
||||||
|
} |
||||||
|
|
||||||
|
get enableExtremumLabels(): boolean { |
||||||
|
return this._options.enableExtremumLabels; |
||||||
|
} |
||||||
|
|
||||||
|
get reversed(): boolean { |
||||||
|
return this._options.reversed; |
||||||
|
} |
||||||
|
|
||||||
|
get defaultColor(): string { |
||||||
|
return this._options.defaultColor; |
||||||
|
} |
||||||
|
|
||||||
|
get stops(): Stop[] { |
||||||
|
return this._options.stops; |
||||||
|
} |
||||||
|
|
||||||
|
get valueFontSize(): number | undefined { |
||||||
|
return this._options.valueFontSize; |
||||||
|
} |
||||||
|
|
||||||
|
get stat(): Stat { |
||||||
|
return this._options.stat; |
||||||
|
} |
||||||
|
|
||||||
|
get valueArcBackgroundColor(): string { |
||||||
|
return this._options.valueArcBackgroundColor; |
||||||
|
} |
||||||
|
|
||||||
|
get innerRadius(): number { |
||||||
|
return this._options.innerRadius; |
||||||
|
} |
||||||
|
|
||||||
|
get outerRadius(): number { |
||||||
|
return this._options.outerRadius; |
||||||
|
} |
||||||
|
|
||||||
|
valueFormatter(value: number): string { |
||||||
|
if(this._options.valueFormatter) { |
||||||
|
return this._options.valueFormatter(value); |
||||||
|
} |
||||||
|
if(lodashIsNil(value)) { |
||||||
|
return 'not defined'; |
||||||
|
} |
||||||
|
return value.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
callbackDrag(event: any): void { |
||||||
|
if(this._options.dragCallback) { |
||||||
|
this._options.dragCallback(event); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
callbackDragEnd(event: any): void { |
||||||
|
if(this._options.dragEndCallback) { |
||||||
|
this._options.dragEndCallback(event); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
import { GaugeData } from '../types'; |
||||||
|
|
||||||
|
import { CoreSeries } from '@chartwerk/core'; |
||||||
|
|
||||||
|
|
||||||
|
const GAUGE_DATA_DEFAULTS = { }; |
||||||
|
|
||||||
|
export class GaugeSeries extends CoreSeries<GaugeData> { |
||||||
|
|
||||||
|
constructor(series: GaugeData[]) { |
||||||
|
super(series); |
||||||
|
} |
||||||
|
|
||||||
|
protected get defaults(): GaugeData { |
||||||
|
return { ...this._coreDefaults, ...GAUGE_DATA_DEFAULTS }; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue