diff --git a/server/routes/subreddit_list.go b/server/routes/api_subreddit_list.go
similarity index 92%
rename from server/routes/subreddit_list.go
rename to server/routes/api_subreddit_list.go
index b8337fb..5ff7352 100644
--- a/server/routes/subreddit_list.go
+++ b/server/routes/api_subreddit_list.go
@@ -25,9 +25,6 @@ func (r *Routes) SubredditsListAPI(rw http.ResponseWriter, req *http.Request) {
}
}
-func (r *Routes) SubredditsListPage(rw http.ResponseWriter, req *http.Request) {
-}
-
func parseSubredditListQuery(req *http.Request) (params api.ListSubredditsParams) {
params.Name = req.FormValue("name")
params.Limit, _ = strconv.ParseInt(req.FormValue("limit"), 10, 64)
diff --git a/server/routes/page_home.go b/server/routes/page_home.go
index ba6fe7b..5aa8dce 100644
--- a/server/routes/page_home.go
+++ b/server/routes/page_home.go
@@ -11,7 +11,20 @@ import (
func (routes *Routes) PageHome(rw http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vc := views.NewContext(routes.Config, r)
- if err := homeview.Home(vc).Render(ctx, rw); err != nil {
+
+ params := parseSubredditListQuery(r)
+
+ list, err := routes.API.ListSubreddits(ctx, params)
+ if err != nil {
+ rw.WriteHeader(http.StatusInternalServerError)
+ }
+
+ data := homeview.Data{
+ SubredditsList: list,
+ Error: err,
+ }
+
+ if err := homeview.Home(vc, data).Render(ctx, rw); err != nil {
log.New(ctx).Err(err).Error("failed to render home view")
}
}
diff --git a/server/routes/routes.go b/server/routes/routes.go
index c2822b5..8f8b4e4 100644
--- a/server/routes/routes.go
+++ b/server/routes/routes.go
@@ -39,7 +39,9 @@ func (routes *Routes) registerWWWRoutes(router chi.Router) {
router.Mount("/public", http.StripPrefix("/public", http.FileServer(http.FS(routes.PublicDir))))
router.Group(func(r chi.Router) {
+ r.Use(chimiddleware.RequestID)
r.Use(chimiddleware.RequestLogger(middleware.ChiLogger{}))
+ r.Use(chimiddleware.SetHeader("Content-Type", "text/html; charset=utf-8"))
r.Get("/", routes.PageHome)
})
}
diff --git a/views/components/body.templ b/views/components/body.templ
new file mode 100644
index 0000000..c80bdaa
--- /dev/null
+++ b/views/components/body.templ
@@ -0,0 +1,16 @@
+package components
+
+import "github.com/tigorlazuardi/redmage/views"
+
+templ Body(c *views.Context) {
+
+ @Navigation(c) {
+
+ @Navbar(c)
+
+ { children... }
+
+
+ }
+
+}
diff --git a/views/components/container.templ b/views/components/container.templ
new file mode 100644
index 0000000..dfc2ff0
--- /dev/null
+++ b/views/components/container.templ
@@ -0,0 +1,7 @@
+package components
+
+templ Container() {
+
+ { children... }
+
+}
diff --git a/views/components/navigation.templ b/views/components/navigation.templ
new file mode 100644
index 0000000..332fb8e
--- /dev/null
+++ b/views/components/navigation.templ
@@ -0,0 +1,106 @@
+package components
+
+import "github.com/tigorlazuardi/redmage/views"
+import "strings"
+
+templ Navigation(c *views.Context) {
+
+
+
+
+
+
+
+
+
+
+ { children... }
+
+
+
+}
+
+func cx(m map[string]bool) string {
+ var res string
+ for k, v := range m {
+ if v {
+ res += k + " "
+ }
+ }
+ return res
+}
+
+func classForNavItem(c *views.Context, prefix string) string {
+ classNames := map[string]bool{}
+ if prefix == "/" && c.Request.URL.Path == "/" {
+ classNames["font-bold"] = true
+ return cx(classNames)
+ } else if strings.HasPrefix(c.Request.URL.Path, prefix) && prefix != "/" {
+ classNames["font-bold"] = true
+ }
+ return cx(classNames)
+}
+
+templ navLogo() {
+
+}
+
+templ Navbar(c *views.Context) {
+
+
+ @navLogo()
+ Redmage
+
+
+
+
+}
diff --git a/views/components/toasts.templ b/views/components/toasts.templ
new file mode 100644
index 0000000..9d58f03
--- /dev/null
+++ b/views/components/toasts.templ
@@ -0,0 +1,33 @@
+package components
+
+import "fmt"
+import "strings"
+
+templ SuccessToast(message string, args ...any) {
+
+
+
+ for _, line := range strings.Split(fmt.Sprintf(message, args...), "\n") {
+
{ line }
+ }
+
+
+}
+
+templ ErrorToast(message string, args ...any) {
+
+
+
+ for _, line := range strings.Split(fmt.Sprintf(message, args...), "\n") {
+
{ line }
+ }
+
+
+}
\ No newline at end of file
diff --git a/views/homeview/homeview.templ b/views/homeview/homeview.templ
index 9eb4455..a7f5a3f 100644
--- a/views/homeview/homeview.templ
+++ b/views/homeview/homeview.templ
@@ -2,10 +2,30 @@ package homeview
import "github.com/tigorlazuardi/redmage/views/components"
import "github.com/tigorlazuardi/redmage/views"
+import "github.com/tigorlazuardi/redmage/api"
-templ Home(vc *views.Context) {
+type Data struct {
+ SubredditsList api.ListSubredditsResult
+ Error error
+}
+
+templ Home(c *views.Context, data Data) {
@components.Doctype() {
- @components.Head(vc)
- Hello World
+ @components.Head(c)
+ @components.Body(c) {
+ @components.Container() {
+ if data.Error != nil {
+ @components.ErrorToast(data.Error.Error())
+ } else {
+ @home(c, data)
+ }
+ }
+ }
}
}
+
+templ home(c *views.Context, data Data) {
+
+
Recently Added
+
+}