Recount-Server/web/router.go

102 lines
2.7 KiB
Go
Raw Normal View History

2024-01-11 20:07:47 -08:00
package web
import (
"html/template"
2024-01-11 20:07:47 -08:00
"net/http"
"bytes"
"context"
2024-01-12 15:48:31 -08:00
"github.com/a-h/templ"
2024-01-11 20:07:47 -08:00
"github.com/go-chi/chi/v5"
2024-01-12 15:48:31 -08:00
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
2024-01-11 20:07:47 -08:00
)
type TemplateState struct {
InnerHtml template.HTML
ActivePage string
}
const TemplateDir = "./web/templates/"
2024-01-12 15:48:31 -08:00
func SetLogLevel(level zerolog.Level) {
zerolog.SetGlobalLevel(level)
}
2024-01-11 20:07:47 -08:00
func WebRouter() http.Handler {
r := chi.NewRouter()
r.Get("/", getIndex)
2024-01-15 19:26:51 -08:00
r.Get("/web/transaction_table_rows", getTransactions)
2024-01-19 21:05:08 -08:00
r.Get("/web/account_summaries", getAccountSummaries)
2024-01-17 19:58:31 -08:00
r.Get("/web/dashboard/expenditure_chart", getExpenditureChart)
2024-01-19 21:05:08 -08:00
r.Get("/web/dashboard/account_summary/{accountID}", getAccountSummaryChart)
r.Get("/hello", getHello)
2024-01-17 20:46:13 -08:00
r.Handle("/chart.js/*", http.StripPrefix("/chart.js/", http.FileServer(http.Dir("web/node_modules/chart.js/"))))
2024-01-12 20:50:41 -08:00
r.Handle("/static/*", http.StripPrefix("/static/", http.FileServer(http.Dir("web/static/"))))
2024-01-11 20:07:47 -08:00
return r
}
//for name, values := range req.Header {
// Loop over all values for the name.
// for _, value := range values {
// log.Debug().Msg(name + " " + value);
// }
// }
func renderFullPage(w http.ResponseWriter, c templ.Component, pageName string) {
var buf bytes.Buffer
// Render the provided templ component
err := c.Render(context.Background(), &buf)
if err != nil {
log.Fatal().Err(err).Msg("Fatal error reading hello template");
}
// get the index template
index, err := template.ParseFiles(TemplateDir + "index.html")
if err != nil {
log.Fatal().
Err(err).
Msg("Fatal error reading index template")
}
// Inject the templ component html into the index template
err = index.Execute(w,
TemplateState{
InnerHtml: template.HTML(buf.String()),
ActivePage: pageName,
});
if err != nil {
log.Fatal().Err(err).Msg("Fatal error reading hello template");
}
}
func getIndex(w http.ResponseWriter, req *http.Request) {
component := dashboard();
_, ok := req.Header["Hx-Request"]
if ok {
err := component.Render(context.Background(), w);
if err != nil {
log.Fatal().Err(err).Msg("Couldn't render dashboard templ template");
}
} else {
renderFullPage(w, component, "index");
}
}
func getHello(w http.ResponseWriter, req *http.Request) {
2024-01-12 15:48:31 -08:00
component := hello("Nick")
_, ok := req.Header["Hx-Request"]
if ok {
err := component.Render(context.Background(), w);
if err != nil {
log.Fatal().Err(err).Msg("Couldn't render dashboard templ template");
}
}else {
renderFullPage(w, component, "hello");
}
2024-01-11 20:07:47 -08:00
}
2024-01-15 19:26:51 -08:00