package main import ( "bytes" "encoding/json" "fmt" "net/http" "dutchellie.nl/DutchEllie/proper-website-2/entity" "github.com/maxence-charriere/go-app/v9/pkg/app" ) var ( ApiURL string ) type Homepage struct { app.Compo } func NewHomepage() *Homepage { return &Homepage{} } func (p *Homepage) Render() app.UI { return newPage(). Title("Homepage"). LeftBar( newHTMLBlock(). Class("left"). Class("leftbarblock"). Src("/web/blocks/snippets/bannerpanel.html"), ). Main( newHTMLBlock(). Class("right"). Class("contentblock"). Src("/web/blocks/pages/intro.html"), newUIBlock(). Class("right"). Class("contentblock"). UI( &guestbook{ OnSubmit: func(ctx app.Context, name, email, website, message, uuid string) { var comment entity.Comment comment.Name = name comment.Email = email comment.Website = website comment.Message = message comment.UUID = uuid jsondata, err := json.Marshal(comment) if err != nil { fmt.Printf("err: %v\n", err) return } url := ApiURL + "/comment" // This is not Async'ed, because otherwise you run into a race // condition where you reload the comments before the server had time // to process the request! { req, err := http.Post(url, "application/json", bytes.NewBuffer(jsondata)) if err != nil { fmt.Printf("err: %v\n", err) return } if req.StatusCode == 200 { p.Update() } defer req.Body.Close() } }, }, ), ) }