Some checks failed
Build Docker Image / Build-Docker-Image (push) Failing after 46s
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package handler
|
|
|
|
import (
|
|
"me-fit/log"
|
|
"me-fit/template"
|
|
"me-fit/template/auth"
|
|
"me-fit/types"
|
|
|
|
"net/http"
|
|
|
|
"github.com/a-h/templ"
|
|
)
|
|
|
|
type Render struct {
|
|
settings *types.Settings
|
|
}
|
|
|
|
func NewRender(settings *types.Settings) *Render {
|
|
return &Render{
|
|
settings: settings,
|
|
}
|
|
}
|
|
|
|
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, render.settings.Environment)
|
|
|
|
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("")
|
|
}
|
|
}
|