mirror of https://github.com/Budibase/budibase.git
5 changed files with 201 additions and 10 deletions
@ -0,0 +1,70 @@ |
|||
<script> |
|||
import { onMount } from "svelte" |
|||
import fetchData, { fetchSchema } from "../fetchData" |
|||
import { ApexOptionsBuilder } from "./ApexOptionsBuilder" |
|||
import ApexChart from "./ApexChart.svelte" |
|||
|
|||
export let _bb |
|||
export let title |
|||
export let datasource |
|||
export let dateColumn |
|||
export let openColumn |
|||
export let highColumn |
|||
export let lowColumn |
|||
export let closeColumn |
|||
export let xAxisLabel |
|||
export let yAxisLabel |
|||
export let height |
|||
export let width |
|||
export let animate |
|||
export let yAxisUnits |
|||
|
|||
const store = _bb.store |
|||
let options |
|||
|
|||
// Fetch data on mount |
|||
onMount(async () => { |
|||
const allCols = [dateColumn, openColumn, highColumn, lowColumn, closeColumn] |
|||
if (!datasource || allCols.find(x => x == null)) { |
|||
return |
|||
} |
|||
|
|||
// Fetch, filter and sort data |
|||
const schema = await fetchSchema(datasource.tableId) |
|||
const result = await fetchData(datasource, $store) |
|||
const reducer = row => (valid, column) => valid && row[column] != null |
|||
const hasAllColumns = row => allCols.reduce(reducer(row), true) |
|||
const data = result |
|||
.filter(row => hasAllColumns(row)) |
|||
.slice(0, 100) |
|||
.sort((a, b) => (a[dateColumn] > b[dateColumn] ? 1 : -1)) |
|||
if (!schema || !data.length) { |
|||
return |
|||
} |
|||
|
|||
// Initialise default chart |
|||
let builder = new ApexOptionsBuilder() |
|||
.type("candlestick") |
|||
.title(title) |
|||
.width(width) |
|||
.height(height) |
|||
.xLabel(xAxisLabel) |
|||
.yLabel(yAxisLabel) |
|||
.animate(animate) |
|||
.yUnits(yAxisUnits) |
|||
.yTooltip(true) |
|||
.xType("datetime") |
|||
|
|||
// Add data |
|||
const chartData = data.map(row => ({ |
|||
x: row[dateColumn], |
|||
y: [row[openColumn], row[highColumn], row[lowColumn], row[closeColumn]], |
|||
})) |
|||
builder = builder.series([{ data: chartData }]) |
|||
|
|||
// Build chart options |
|||
options = builder.getOptions() |
|||
}) |
|||
</script> |
|||
|
|||
<ApexChart {options} /> |
|||
Loading…
Reference in new issue