From cee01c9a298db3ecbf2733ccbeb6adad683f5759 Mon Sep 17 00:00:00 2001 From: Tim Wundenberg Date: Sat, 3 Jan 2026 16:33:56 +0100 Subject: [PATCH] feat(budget): further implementation with modal for editing --- internal/budget/handler.go | 43 ++++++++++++++++++---- internal/budget/template.templ | 66 ++++++++++++++++++++++++++-------- internal/core/layout.templ | 1 + static/js/layout.js | 20 +++++++++-- static/js/time.js | 2 +- 5 files changed, 106 insertions(+), 26 deletions(-) diff --git a/internal/budget/handler.go b/internal/budget/handler.go index c5efedd..d81ac9e 100644 --- a/internal/budget/handler.go +++ b/internal/budget/handler.go @@ -33,7 +33,7 @@ func NewHandler(s Service, r *core.Render) Handler { func (h HandlerImpl) Handle(r *http.ServeMux) { r.Handle("GET /budget", h.handlePage()) - // r.Handle("GET /budget/{id}", h.handleTransactionItemComp()) + r.Handle("GET /budget/{id}", h.handleEdit()) r.Handle("POST /budget/{id}", h.handlePost()) // r.Handle("DELETE /budget/{id}", h.handleDelete()) } @@ -48,17 +48,46 @@ func (h HandlerImpl) handlePage() http.HandlerFunc { return } - // transactions, err := h.s.GetAll(r.Context(), user) - // if err != nil { - // core.HandleError(w, r, err) - // return - // } + budgets, err := h.s.GetAll(r.Context(), user) + if err != nil { + core.HandleError(w, r, err) + return + } - comp := page() + comp := page(budgets) h.r.RenderLayout(r, w, comp, user) } } +func (h HandlerImpl) handleEdit() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + core.UpdateSpan(r) + + user := core.GetUser(r) + if user == nil { + core.DoRedirect(w, r, "/auth/signin") + return + } + + var ( + // id uuid.UUID + // err error + ) + + idStr := r.PathValue("id") + if idStr != "new" { + // id, err = uuid.Parse(idStr) + // if err != nil { + // core.HandleError(w, r, fmt.Errorf("could not parse Id: %w", core.ErrBadRequest)) + // return + // } + } + + comp := editNew() + h.r.Render(r, w, comp) + } +} + func (h HandlerImpl) handlePost() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { core.UpdateSpan(r) diff --git a/internal/budget/template.templ b/internal/budget/template.templ index c58ed21..89cb5d4 100644 --- a/internal/budget/template.templ +++ b/internal/budget/template.templ @@ -2,39 +2,75 @@ package budget import "spend-sparrow/internal/template/svg" -templ page() { +templ page(budgets []Budget) { +
@newItem() - for i:=range(10) { - @item(i) + for _,budget:=range(budgets ) { + @item(budget) }
} -templ Items() { -
-} - -templ Edit() { -
+templ editNew() { + +
+
+ + + + +
+ + +
+
} templ newItem() { -
+
+ } -templ item(i int) { -
+templ item(budget Budget) { +
- Budget { i } + { budget.Description } - { 200 + i }€ + { 200 }€
} diff --git a/internal/core/layout.templ b/internal/core/layout.templ index 68085db..348274f 100644 --- a/internal/core/layout.templ +++ b/internal/core/layout.templ @@ -37,6 +37,7 @@ templ Layout(slot templ.Component, user templ.Component, loggedIn bool, path str +