55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"io"
|
||
|
"math/rand"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/a-h/templ"
|
||
|
"github.com/go-echarts/go-echarts/v2/charts"
|
||
|
"github.com/go-echarts/go-echarts/v2/opts"
|
||
|
)
|
||
|
|
||
|
func generateBarItems() []opts.BarData {
|
||
|
items := make([]opts.BarData, 0)
|
||
|
for i := 0; i < 7; i++ {
|
||
|
items = append(items, opts.BarData{Value: rand.Intn(300)})
|
||
|
}
|
||
|
return items
|
||
|
}
|
||
|
|
||
|
func createBarChart() *charts.Bar {
|
||
|
bar := charts.NewBar()
|
||
|
bar.SetGlobalOptions(charts.WithTitleOpts(opts.Title{
|
||
|
Title: "Bar chart",
|
||
|
Subtitle: "That works well with templ",
|
||
|
}))
|
||
|
bar.SetXAxis([]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}).
|
||
|
AddSeries("Category A", generateBarItems()).
|
||
|
AddSeries("Category B", generateBarItems())
|
||
|
return bar
|
||
|
}
|
||
|
|
||
|
// The charts all have a `Render(w io.Writer) error` method on them.
|
||
|
// That method is very similar to templ's Render method.
|
||
|
type Renderable interface {
|
||
|
Render(w io.Writer) error
|
||
|
}
|
||
|
|
||
|
// So lets adapt it.
|
||
|
func ConvertChartToTemplComponent(chart Renderable) templ.Component {
|
||
|
return templ.ComponentFunc(func(ctx context.Context, w io.Writer) error {
|
||
|
return chart.Render(w)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||
|
chart := createBarChart()
|
||
|
h := templ.Handler(Home(chart))
|
||
|
h.ServeHTTP(w, r)
|
||
|
})
|
||
|
http.ListenAndServe("localhost:3000", nil)
|
||
|
}
|