package components import ( "fmt" "github.com/camzawacki/personal-site/internal/pager" "github.com/camzawacki/personal-site/internal/ui" . "maragu.dev/gomponents" . "maragu.dev/gomponents/components" . "maragu.dev/gomponents/html" ) func NavLink(r *ui.Request, title, routeName string, disabled bool, routeParams ...any) Node { href := r.Path(routeName, routeParams...) var link Node if disabled { link = Span( Class("text-xl text-base-content/40"), Text(title), ) } else { link = A( Class("text-xl hover:underline cursor-pointer"), Href(href), Text(title), ) } return link } func MenuLink(r *ui.Request, icon Node, title, routeName string, routeParams ...any) Node { href := r.Path(routeName, routeParams...) return Li( Class("ml-2"), A( Href(href), icon, Text(title), Classes{ "menu-active": href == r.CurrentPath, "p-2": true, }, ), ) } func Pager(page int, path string, hasNext bool, hxTarget string) Node { href := func(page int) string { return fmt.Sprintf("%s?%s=%d", path, pager.QueryKey, page, ) } return Div( Class("join"), A( Class("join-item btn"), Text("«"), If(page <= 1, Disabled()), Href(href(page-1)), Iff(len(hxTarget) > 0, func() Node { return Group{ Attr("hx-get", href(page-1)), Attr("hx-swap", "outerHTML"), Attr("hx-target", hxTarget), } }), ), Button( Class("join-item btn"), Textf("Page %d", page), ), A( Class("join-item btn"), Text("»"), If(!hasNext, Disabled()), Href(href(page+1)), Iff(len(hxTarget) > 0, func() Node { return Group{ Attr("hx-get", href(page+1)), Attr("hx-swap", "outerHTML"), Attr("hx-target", hxTarget), } }), ), ) }