learnlytics-go/templ/examples/integration-go-echarts/main.go

55 lines
1.3 KiB
Go
Raw Normal View History

2025-03-20 12:35:13 +01:00
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)
}