search frontend

This commit is contained in:
bronku 2025-03-29 09:13:40 +01:00
parent 10140231a6
commit d59c119f75
6 changed files with 46 additions and 16 deletions

View file

@ -14,6 +14,12 @@ func (h *Server) orders(r *http.Request) (any, int, error) {
return data, http.StatusOK, err return data, http.StatusOK, err
} }
func (h *Server) ordersSearch(r *http.Request) (any, int, error) {
data, err := h.s.GetOrders()
data = data[:3]
return data, http.StatusOK, err
}
func (h *Server) cakes(r *http.Request) (any, int, error) { func (h *Server) cakes(r *http.Request) (any, int, error) {
data, err := h.s.GetCakes() data, err := h.s.GetCakes()
return data, http.StatusOK, err return data, http.StatusOK, err

View file

@ -18,6 +18,7 @@ type Server struct {
type route struct { type route struct {
function fetcher function fetcher
template string template string
templateEntry string
} }
func (h *Server) Close() { func (h *Server) Close() {
@ -30,7 +31,7 @@ func (h *Server) loadHandler() {
mux := http.NewServeMux() mux := http.NewServeMux()
for i, e := range h.routes { for i, e := range h.routes {
mux.HandleFunc(i, h.render(e.function, e.template)) mux.HandleFunc(i, h.render(e.function, e.template, e.templateEntry))
} }
mux.HandleFunc("GET /", h.redirect("/orders", http.StatusSeeOther)) mux.HandleFunc("GET /", h.redirect("/orders", http.StatusSeeOther))
@ -45,12 +46,13 @@ func New(store *store.Store) *Server {
var server Server var server Server
server.routes = map[string]route{ server.routes = map[string]route{
"GET /order/": {server.order, "order"}, "GET /order/": {server.order, "order", "layout"},
"GET /orders": {server.orders, "orders"}, "GET /orders": {server.orders, "orders", "layout"},
"GET /cake/": {server.cake, "cake"}, "GET /orders/search/": {server.ordersSearch, "orders", "orders-table"},
"GET /cakes": {server.cakes, "cakes"}, "GET /cake/": {server.cake, "cake", "layout"},
"POST /order/": {server.postOrder, "confirmation"}, "GET /cakes": {server.cakes, "cakes", "layout"},
"POST /cake/": {server.postCake, "confirmation"}, "POST /order/": {server.postOrder, "confirmation", "layout"},
"POST /cake/": {server.postCake, "confirmation", "layout"},
} }
server.loadTemplates() server.loadTemplates()

View file

@ -26,14 +26,14 @@ func (h *Server) loadTemplates() {
} }
} }
func (s *Server) render(fetch fetcher, templateName string) http.HandlerFunc { func (s *Server) render(fetch fetcher, templateFile string, templateEntry string) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
data, code, err := fetch(r) data, code, err := fetch(r)
if err != nil { if err != nil {
logging.ErrorPage(err, code).ServeHTTP(w, r) logging.ErrorPage(err, code).ServeHTTP(w, r)
return return
} }
err = s.tmpl[templateName].ExecuteTemplate(w, "layout", data) err = s.tmpl[templateFile].ExecuteTemplate(w, templateEntry, data)
if err != nil { if err != nil {
logging.ErrorPage(err, http.StatusInternalServerError).ServeHTTP(w, r) logging.ErrorPage(err, http.StatusInternalServerError).ServeHTTP(w, r)
return return

View file

@ -1,5 +1,5 @@
{{define "title"}} {{define "title"}}
Cake Cake {{.ID}}
{{end}} {{end}}
{{define "main"}} {{define "main"}}
<main> <main>

View file

@ -1,5 +1,5 @@
{{define "title"}} {{define "title"}}
Order Order {{.Order.ID}}
{{end}} {{end}}
{{define "main"}} {{define "main"}}
<main> <main>

View file

@ -4,7 +4,30 @@
{{end}} {{end}}
{{define "main"}} {{define "main"}}
<main> <main>
<table> <div class="search-container">
<input
type="search"
name="q"
hx-get="/orders/search"
hx-trigger="keyup changed delay:500ms"
hx-target="#results-table"
hx-push-url="true"
placeholder="Search orders..."
>
<div class="htmx-indicator">
Searching...
</div>
<div id="results-table">
{{template "orders-table" .}}
</div>
</div>
</main>
{{end}}
{{define "orders-table"}}
<table id="orders_table">
<tr> <tr>
<th></th> <th></th>
<th>Name</th> <th>Name</th>
@ -30,5 +53,4 @@
</tr> </tr>
{{end}} {{end}}
</table> </table>
</main> {{end}}
{{end}}