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) }