apexcharts
Version:
A JavaScript Chart Library
132 lines (109 loc) • 3.65 kB
JavaScript
import DateTime from '../utils/DateTime'
import Utils from '../utils/Utils'
/**
* ApexCharts Formatter Class for setting value formatters for axes as well as tooltips.
*
* @module Formatters
**/
class Formatters {
constructor (ctx) {
this.ctx = ctx
this.w = ctx.w
this.tooltipKeyFormat = 'dd MMM'
}
xLabelFormat (fn, val) {
let w = this.w
if (w.config.xaxis.type === 'datetime') {
// if user has not specified a custom formatter, use the default tooltip.x.format
if (w.config.tooltip.x.formatter === undefined) {
let datetimeObj = new DateTime(this.ctx)
return datetimeObj.formatDate(new Date(val), w.config.tooltip.x.format, true, true)
}
}
return fn(val)
}
setLabelFormatters () {
let w = this.w
w.globals.xLabelFormatter = function (val) {
return val
}
w.globals.xaxisTooltipFormatter = function (val) {
return val
}
w.globals.ttKeyFormatter = function (val) {
return val
}
w.globals.ttZFormatter = function (val) {
return val
}
w.globals.legendFormatter = function (val) {
return val
}
if (typeof w.config.tooltip.x.formatter === 'function') {
w.globals.ttKeyFormatter = w.config.tooltip.x.formatter
}
if (typeof w.config.xaxis.tooltip.formatter === 'function') {
w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter
}
if (Array.isArray(w.config.tooltip.y)) {
w.globals.ttVal = w.config.tooltip.y
} else {
if (w.config.tooltip.y.formatter !== undefined) {
w.globals.ttVal = w.config.tooltip.y
}
}
if (w.config.tooltip.z.formatter !== undefined) {
w.globals.ttZFormatter = w.config.tooltip.z.formatter
}
// legend formatter - if user wants to append any global values of series to legend text
if (w.config.legend.formatter !== undefined) {
w.globals.legendFormatter = w.config.legend.formatter
}
// formatter function will always overwrite format property
if (w.config.xaxis.labels.formatter !== undefined) {
w.globals.xLabelFormatter = w.config.xaxis.labels.formatter
} else {
w.globals.xLabelFormatter = function (val) {
if (Utils.isNumber(val)) {
// numeric xaxis may have smaller range, so defaulting to 1 decimal
if (w.config.xaxis.type === 'numeric' && w.globals.dataPoints < 50) {
return val.toFixed(1)
}
return val.toFixed(0)
}
return val
}
}
// formatter function will always overwrite format property
w.config.yaxis.forEach((yaxe, i) => {
if (yaxe.labels.formatter !== undefined) {
w.globals.yLabelFormatters[i] = yaxe.labels.formatter
} else {
w.globals.yLabelFormatters[i] = function (val) {
if (Utils.isNumber(val)) {
if (w.globals.yValueDecimal !== 0) {
return val.toFixed(yaxe.decimalsInFloat)
} else {
return val.toFixed(0)
}
}
return val
}
}
})
return w.globals
}
heatmapLabelFormatters () {
const w = this.w
if (w.config.chart.type === 'heatmap') {
w.globals.yAxisScale[0].result = w.globals.seriesNames.slice()
// get the longest string from the labels array and also apply label formatter to it
let longest = w.globals.seriesNames.reduce(function (a, b) {
return a.length > b.length ? a : b
}, 0)
w.globals.yAxisScale[0].niceMax = longest
w.globals.yAxisScale[0].niceMin = longest
}
}
}
export default Formatters