diff --git a/server/get.go b/server/get.go index fb7dd7e..34fed4b 100644 --- a/server/get.go +++ b/server/get.go @@ -13,34 +13,33 @@ import ( "git.bronku.xyz/bronku/cake-order-tracker/server/templates" ) -func monthInterval(y int, m time.Month) (firstDay, lastDay time.Time) { - firstDay = time.Date(y, m, 1, 0, 0, 0, 0, time.UTC) - lastDay = time.Date(y, m+1, 1, 0, 0, 0, -1, time.UTC) - return firstDay, lastDay +func weekInterval(t time.Time) (firstDay, lastDay time.Time) { + monday := t.AddDate(0, 0, -((int(t.Weekday()) + 6) % 7)) + sunday := monday.AddDate(0, 0, 6) + return monday, sunday } -func (h *Server) orders(_ *http.Request) (templ.Component, int, error) { - var ( - y int - m time.Month - ) - y, m, _ = time.Now().Date() - first, last := monthInterval(y, m) +func (h *Server) orders(r *http.Request) (templ.Component, int, error) { + now := time.Now() + weekFirst, weekLast := weekInterval(now) + + first, last := weekFirst, weekLast + if from := r.URL.Query().Get("from"); from != "" { + if t, err := time.Parse(config.DateFormat, from); err == nil { + first = t + } + } + if to := r.URL.Query().Get("to"); to != "" { + if t, err := time.Parse(config.DateFormat, to); err == nil { + last = t + } + } + + today := now.Format(config.DateFormat) + tomorrow := now.AddDate(0, 0, 1).Format(config.DateFormat) + orders, err := h.s.GetOrders(first, last) - return templates.OrdersPage(first.Format(config.DateFormat), last.Format(config.DateFormat), orders), http.StatusOK, err -} - -func (h *Server) ordersSearch(r *http.Request) (templ.Component, int, error) { - from, err := time.Parse(config.DateFormat, r.URL.Query().Get("from")) - if err != nil { - from = time.Time{} - } - to, err := time.Parse(config.DateFormat, r.URL.Query().Get("to")) - if err != nil { - to = time.Time{} - } - data, err := h.s.GetOrders(from, to) - return templates.OrdersTable(data), http.StatusOK, err + return templates.OrdersPage(first.Format(config.DateFormat), last.Format(config.DateFormat), today, tomorrow, orders), http.StatusOK, err } func (h *Server) cakes(_ *http.Request) (templ.Component, int, error) { diff --git a/server/server.go b/server/server.go index b88790c..babbe4a 100644 --- a/server/server.go +++ b/server/server.go @@ -33,7 +33,6 @@ func New(store *store.Store) *Server { 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 /orders/search/", server.render(server.ordersSearch)) mux.HandleFunc("GET /cake/", server.render(server.cake)) mux.HandleFunc("GET /cakes", server.render(server.cakes)) mux.HandleFunc("POST /order/", server.render(server.postOrder)) diff --git a/server/static/component.css b/server/static/component.css index e21d2db..9255f4b 100644 --- a/server/static/component.css +++ b/server/static/component.css @@ -118,6 +118,26 @@ } } +/* ========== PRESET BUTTONS ========== */ +.preset-group { + display: flex; +} + +.preset-btn { + padding: 0.375rem 0.625rem; + font-size: 0.8125rem; + font-weight: 600; + color: var(--on-surface-variant); + text-decoration: none; + display: inline-flex; + align-items: center; + + &:hover, + &.active { + color: var(--primary); + } +} + /* ========== PAGINATION ========== */ .pagination { display: flex; diff --git a/server/static/form.css b/server/static/form.css index 2455355..007a65a 100644 --- a/server/static/form.css +++ b/server/static/form.css @@ -17,49 +17,58 @@ } } -.form-group { +.form-group, +.horizontal-group { display: flex; - flex-direction: column; gap: 0.25rem; + &.form-group { + flex-direction: column; + } + &.horizontal-group { + align-items: center; + } +} - label { +form { + & label { font-size: 0.75rem; font-weight: 600; color: var(--on-surface-variant); letter-spacing: 0.02em; } -} + & input, + & select, + & textarea { + height: 2rem; + padding: 0 0.5rem; + border: 1px solid var(--outline-variant); + border-radius: var(--border-radius-sm); + background: var(--surface-container-lowest); + font-size: 0.75rem; + color: var(--on-surface); + outline: none; + transition: border-color var(--transition); + width: 100%; -.form-input { - height: 2rem; - padding: 0 0.5rem; - border: 1px solid var(--outline-variant); - border-radius: var(--border-radius-sm); - background: var(--surface-container-lowest); - font-size: 0.75rem; - color: var(--on-surface); - outline: none; - transition: border-color var(--transition); - width: 100%; + &:focus { + border-color: var(--primary); + } - &:focus { - border-color: var(--primary); + &::placeholder { + color: var(--on-surface-variant); + opacity: 0.6; + } + + &:is(textarea) { + height: auto; + padding: 0.5rem; + resize: vertical; + } + + &:is(select) { + appearance: auto; + } } - - &::placeholder { - color: var(--on-surface-variant); - opacity: 0.6; - } -} - -textarea.form-input { - height: auto; - padding: 0.5rem; - resize: vertical; -} - -select.form-input { - appearance: auto; } .form-card { @@ -80,3 +89,4 @@ select.form-input { border-top: 1px solid var(--outline-variant); margin-top: 0.5rem; } + diff --git a/server/templates/orders.templ b/server/templates/orders.templ index fede480..f03a4aa 100644 --- a/server/templates/orders.templ +++ b/server/templates/orders.templ @@ -6,21 +6,23 @@ import ( "git.bronku.xyz/bronku/cake-order-tracker/models" ) -templ OrdersPage(first, last string, orders []models.Order) { - @Layout("Panel główny", DateForm(first, last), OrdersMain(orders)) +templ OrdersPage(first, last, today, tomorrow string, orders []models.Order) { + @Layout("Panel główny", DateForm(first, last, today, tomorrow), OrdersMain(orders)) } -templ DateForm(first, last string) { -
-
-
- - -
-
- - -
+templ DateForm(first, last, today, tomorrow string) { +
+ + + + + + +
}