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

66 lines
1.7 KiB
Svelte
Raw Normal View History

2020-11-04 00:50:55 +13:00
<script>
import { getContext, onMount } from "svelte"
2020-11-04 00:50:55 +13:00
import { ApexOptionsBuilder } from "./ApexOptionsBuilder"
import ApexChart from "./ApexChart.svelte"
import { isEmpty } from "lodash/fp"
2020-11-04 00:50:55 +13:00
const { API } = getContext("sdk")
2020-11-04 00:50:55 +13:00
export let title
export let datasource
export let labelColumn
export let valueColumn
export let height
export let width
export let color
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
let options
2020-11-04 00:50:55 +13:00
// Fetch data on mount
onMount(async () => {
if (isEmpty(datasource) || !labelColumn || !valueColumn) {
options = false
return
}
2020-11-05 03:21:48 +13:00
// Fetch, filter and sort data
const schema = (await API.fetchTableDefinition(datasource.tableId)).schema
const result = await API.fetchDatasource(datasource)
2020-11-05 03:21:48 +13:00
const data = result
.filter(row => row[labelColumn] != null && row[valueColumn] != null)
.slice(0, 20)
.sort((a, b) => (a[labelColumn] > b[labelColumn] ? 1 : -1))
if (!schema || !data.length) {
options = false
return
}
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
options = builder.getOptions()
})
2020-11-04 00:50:55 +13:00
</script>
2020-11-24 00:29:34 +13:00
<ApexChart {options} />