1
0
Fork 0
mirror of synced 2024-09-19 02:39:37 +12:00
budibase/packages/standard-components/src/charts/PieChart.svelte

57 lines
1.4 KiB
Svelte
Raw Normal View History

2020-11-04 00:50:55 +13:00
<script>
import { ApexOptionsBuilder } from "./ApexOptionsBuilder"
import ApexChart from "./ApexChart.svelte"
2020-11-04 00:50:55 +13:00
export let title
export let dataProvider
2020-11-04 00:50:55 +13:00
export let labelColumn
export let valueColumn
export let height
export let width
export let dataLabels
export let animate
export let legend
export let donut
2020-11-06 02:37:28 +13:00
export let palette
2020-11-04 00:50:55 +13:00
$: options = setUpChart(dataProvider)
2020-11-04 00:50:55 +13:00
// Fetch data on mount
const setUpChart = provider => {
if (!provider || !provider.rows?.length || !labelColumn || !valueColumn) {
return null
}
2020-11-05 03:21:48 +13:00
// Fetch, filter and sort data
const { schema, rows } = provider
const data = rows
2020-11-05 03:21:48 +13:00
.filter(row => row[labelColumn] != null && row[valueColumn] != null)
.slice(0, 100)
2020-11-05 03:21:48 +13:00
if (!schema || !data.length) {
return null
}
2020-11-04 00:50:55 +13:00
// Initialise default chart
let builder = new ApexOptionsBuilder()
.title(title)
.type(donut ? "donut" : "pie")
.width(width)
.height(height)
.dataLabels(dataLabels)
.animate(animate)
.legend(legend)
.legendPosition("right")
2020-11-06 02:37:28 +13:00
.palette(palette)
2020-11-04 00:50:55 +13:00
// Add data if valid datasource
const series = data.map(row => parseFloat(row[valueColumn]))
2020-11-05 03:21:48 +13:00
const labels = data.map(row => row[labelColumn])
builder = builder.series(series).labels(labels)
2020-11-04 00:50:55 +13:00
// Build chart options
return builder.getOptions()
}
2020-11-04 00:50:55 +13:00
</script>
2020-11-24 00:29:34 +13:00
<ApexChart {options} />