package handler import ( "spend-sparrow/log" "spend-sparrow/template" "spend-sparrow/template/auth" "spend-sparrow/types" "net/http" "github.com/a-h/templ" ) type Render struct { } func NewRender() *Render { return &Render{} } func (render *Render) RenderWithStatus(r *http.Request, w http.ResponseWriter, comp templ.Component, status int) { w.Header().Set("Content-Type", "text/html") w.WriteHeader(status) err := comp.Render(r.Context(), w) if err != nil { log.Error("Failed to render layout: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } } func (render *Render) Render(r *http.Request, w http.ResponseWriter, comp templ.Component) { render.RenderWithStatus(r, w, comp, http.StatusOK) } func (render *Render) RenderLayout(r *http.Request, w http.ResponseWriter, slot templ.Component, user *types.User) { render.RenderLayoutWithStatus(r, w, slot, user, http.StatusOK) } func (render *Render) RenderLayoutWithStatus(r *http.Request, w http.ResponseWriter, slot templ.Component, user *types.User, status int) { userComp := render.getUserComp(user) layout := template.Layout(slot, userComp, user != nil, r.URL.Path) render.RenderWithStatus(r, w, layout, status) } func (render *Render) getUserComp(user *types.User) templ.Component { if user != nil { return auth.UserComp(user.Email) } else { return auth.UserComp("") } }