Add horizontal bar chart setting
This commit is contained in:
parent
937f5ece53
commit
b7ef51e6f5
|
@ -1230,6 +1230,12 @@
|
||||||
"key": "stacked",
|
"key": "stacked",
|
||||||
"defaultValue": false
|
"defaultValue": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"label": "Horizontal",
|
||||||
|
"key": "horizontal",
|
||||||
|
"defaultValue": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"label": "Data Labels",
|
"label": "Data Labels",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
export class ApexOptionsBuilder {
|
export class ApexOptionsBuilder {
|
||||||
formatters = {
|
formatters = {
|
||||||
["Default"]: val => Math.round(val * 100) / 100,
|
["Default"]: val => (isNaN(val) ? val : Math.round(val * 100) / 100),
|
||||||
["Thousands"]: val => `${Math.round(val / 1000)}K`,
|
["Thousands"]: val => `${Math.round(val / 1000)}K`,
|
||||||
["Millions"]: val => `${Math.round(val / 1000000)}M`,
|
["Millions"]: val => `${Math.round(val / 1000000)}M`,
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,11 @@ export class ApexOptionsBuilder {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
xaxis: {
|
||||||
|
labels: {
|
||||||
|
formatter: this.formatters.Default,
|
||||||
|
},
|
||||||
|
},
|
||||||
yaxis: {
|
yaxis: {
|
||||||
labels: {
|
labels: {
|
||||||
formatter: this.formatters.Default,
|
formatter: this.formatters.Default,
|
||||||
|
@ -77,10 +82,14 @@ export class ApexOptionsBuilder {
|
||||||
return this.setOption(["yaxis", "title", "text"], label)
|
return this.setOption(["yaxis", "title", "text"], label)
|
||||||
}
|
}
|
||||||
|
|
||||||
categories(categories) {
|
xCategories(categories) {
|
||||||
return this.setOption(["xaxis", "categories"], categories)
|
return this.setOption(["xaxis", "categories"], categories)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
yCategories(categories) {
|
||||||
|
return this.setOption(["yaxis", "categories"], categories)
|
||||||
|
}
|
||||||
|
|
||||||
series(series) {
|
series(series) {
|
||||||
return this.setOption(["series"], series)
|
return this.setOption(["series"], series)
|
||||||
}
|
}
|
||||||
|
@ -130,6 +139,13 @@ export class ApexOptionsBuilder {
|
||||||
return this.setOption(["labels"], labels)
|
return this.setOption(["labels"], labels)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xUnits(units) {
|
||||||
|
return this.setOption(
|
||||||
|
["xaxis", "labels", "formatter"],
|
||||||
|
this.formatters[units || "Default"]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
yUnits(units) {
|
yUnits(units) {
|
||||||
return this.setOption(
|
return this.setOption(
|
||||||
["yaxis", "labels", "formatter"],
|
["yaxis", "labels", "formatter"],
|
||||||
|
@ -137,10 +153,24 @@ export class ApexOptionsBuilder {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearXFormatter() {
|
||||||
|
delete this.options.xaxis.labels
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
clearYFormatter() {
|
||||||
|
delete this.options.yaxis.labels
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
xType(type) {
|
xType(type) {
|
||||||
return this.setOption(["xaxis", "type"], type)
|
return this.setOption(["xaxis", "type"], type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
yType(type) {
|
||||||
|
return this.setOption(["yaxis", "type"], type)
|
||||||
|
}
|
||||||
|
|
||||||
yTooltip(yTooltip) {
|
yTooltip(yTooltip) {
|
||||||
return this.setOption(["yaxis", "tooltip", "enabled"], yTooltip)
|
return this.setOption(["yaxis", "tooltip", "enabled"], yTooltip)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
export let stacked
|
export let stacked
|
||||||
export let yAxisUnits
|
export let yAxisUnits
|
||||||
export let palette
|
export let palette
|
||||||
|
export let horizontal
|
||||||
|
|
||||||
$: options = setUpChart(dataProvider)
|
$: options = setUpChart(dataProvider)
|
||||||
|
|
||||||
|
@ -25,7 +26,7 @@
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fatch data
|
// Fetch data
|
||||||
const { schema, rows } = provider
|
const { schema, rows } = provider
|
||||||
const reducer = row => (valid, column) => valid && row[column] != null
|
const reducer = row => (valid, column) => valid && row[column] != null
|
||||||
const hasAllColumns = row => allCols.reduce(reducer(row), true)
|
const hasAllColumns = row => allCols.reduce(reducer(row), true)
|
||||||
|
@ -46,14 +47,18 @@
|
||||||
.animate(animate)
|
.animate(animate)
|
||||||
.legend(legend)
|
.legend(legend)
|
||||||
.stacked(stacked)
|
.stacked(stacked)
|
||||||
.yUnits(yAxisUnits)
|
|
||||||
.palette(palette)
|
.palette(palette)
|
||||||
|
.horizontal(horizontal)
|
||||||
|
|
||||||
// Add data
|
// Add data
|
||||||
let useDates = false
|
let useDates = false
|
||||||
if (schema[labelColumn]) {
|
if (schema[labelColumn]) {
|
||||||
const labelFieldType = schema[labelColumn].type
|
const labelFieldType = schema[labelColumn].type
|
||||||
builder = builder.xType(labelFieldType)
|
if (horizontal) {
|
||||||
|
builder = builder.yType(labelFieldType).xUnits(yAxisUnits)
|
||||||
|
} else {
|
||||||
|
builder = builder.xType(labelFieldType).yUnits(yAxisUnits)
|
||||||
|
}
|
||||||
useDates = labelFieldType === "datetime"
|
useDates = labelFieldType === "datetime"
|
||||||
}
|
}
|
||||||
const series = valueColumns.map(column => ({
|
const series = valueColumns.map(column => ({
|
||||||
|
@ -68,7 +73,14 @@
|
||||||
}))
|
}))
|
||||||
builder = builder.series(series)
|
builder = builder.series(series)
|
||||||
if (!useDates) {
|
if (!useDates) {
|
||||||
builder = builder.categories(data.map(row => row[labelColumn]))
|
builder = builder.xCategories(data.map(row => row[labelColumn]))
|
||||||
|
} else {
|
||||||
|
// Horizontal dates don't work anyway, but this is the correct logic
|
||||||
|
if (horizontal) {
|
||||||
|
builder = builder.clearYFormatter()
|
||||||
|
} else {
|
||||||
|
builder = builder.clearXFormatter()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build chart options
|
// Build chart options
|
||||||
|
|
|
@ -77,7 +77,9 @@
|
||||||
}))
|
}))
|
||||||
builder = builder.series(series)
|
builder = builder.series(series)
|
||||||
if (!useDates) {
|
if (!useDates) {
|
||||||
builder = builder.categories(data.map(row => row[labelColumn]))
|
builder = builder.xCategories(data.map(row => row[labelColumn]))
|
||||||
|
} else {
|
||||||
|
builder = builder.clearXFormatter()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build chart options
|
// Build chart options
|
||||||
|
|
Loading…
Reference in New Issue