91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
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),
|
|
}
|
|
}),
|
|
),
|
|
)
|
|
}
|