refactor and order template
This commit is contained in:
parent
922478bdeb
commit
2465956fc2
5 changed files with 126 additions and 99 deletions
|
|
@ -4,12 +4,43 @@ import (
|
|||
"embed"
|
||||
"net/http"
|
||||
|
||||
"github.com/a-h/templ"
|
||||
|
||||
"git.bronku.xyz/bronku/cake-order-tracker/logging"
|
||||
"git.bronku.xyz/bronku/cake-order-tracker/server/templates"
|
||||
"git.bronku.xyz/bronku/cake-order-tracker/store"
|
||||
"github.com/a-h/templ"
|
||||
)
|
||||
|
||||
type fetcher func(r *http.Request) (templ.Component, int, error)
|
||||
type httpError struct {
|
||||
code int
|
||||
error
|
||||
}
|
||||
|
||||
type fetcher[T any] func(r *http.Request) (T, *httpError)
|
||||
type templateBuilder[T any] func(data T) templ.Component
|
||||
|
||||
func render[T any](title string, fetch fetcher[T], builder templateBuilder[T]) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
data, fetchErr := fetch(r)
|
||||
if fetchErr != nil {
|
||||
logging.ErrorPage(fetchErr, fetchErr.code).ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
w.Header().Set("content-type", "text/html")
|
||||
|
||||
var component templ.Component
|
||||
if r.Header.Get("HX-Request") == "true" {
|
||||
component = templates.MainContent(title, builder(data))
|
||||
} else {
|
||||
component = templates.Layout(title, builder(data))
|
||||
}
|
||||
|
||||
err := component.Render(r.Context(), w)
|
||||
if err != nil {
|
||||
logging.ErrorPage(err, http.StatusInternalServerError).ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type Server struct {
|
||||
s *store.Store
|
||||
|
|
@ -31,16 +62,17 @@ func New(store *store.Store) *Server {
|
|||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("GET /", redirect("/orders", http.StatusSeeOther))
|
||||
mux.HandleFunc("GET /order", server.render(server.order))
|
||||
mux.HandleFunc("GET /orders", server.render(server.orders))
|
||||
mux.HandleFunc("GET /cake", server.render(server.cake))
|
||||
mux.HandleFunc("GET /cakes", server.render(server.cakes))
|
||||
mux.HandleFunc("POST /order", server.render(server.postOrder))
|
||||
mux.HandleFunc("POST /order/{id}/status", server.render(server.updateStatus))
|
||||
mux.HandleFunc("POST /cake", server.render(server.postCake))
|
||||
mux.HandleFunc("GET /blocked", server.render(server.blocked))
|
||||
mux.HandleFunc("POST /blocked", server.render(server.postBlocked))
|
||||
mux.HandleFunc("POST /blocked/{id}/delete", server.render(server.deleteBlocked))
|
||||
mux.HandleFunc("GET /order", render("Nowe zamówienie", server.newOrder, templates.OrderForm))
|
||||
mux.HandleFunc("GET /order/{id}", render("Zamówienie", server.order, templates.OrderForm))
|
||||
// mux.HandleFunc("GET /orders", render(server.orders))
|
||||
// mux.HandleFunc("GET /cake", render(server.cake))
|
||||
// mux.HandleFunc("GET /cakes", render(server.cakes))
|
||||
// mux.HandleFunc("POST /order", render(server.postOrder))
|
||||
// mux.HandleFunc("POST /order/{id}/status", render(server.updateStatus))
|
||||
// mux.HandleFunc("POST /cake", render(server.postCake))
|
||||
// mux.HandleFunc("GET /blocked", render(server.blocked))
|
||||
// mux.HandleFunc("POST /blocked", render(server.postBlocked))
|
||||
// mux.HandleFunc("POST /blocked/{id}/delete", render(server.deleteBlocked))
|
||||
|
||||
fs := http.FileServerFS(static)
|
||||
mux.Handle("GET /static/", fs)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue