diff --git a/views/components/pagination.templ b/views/components/pagination.templ new file mode 100644 index 0000000..5ca2a37 --- /dev/null +++ b/views/components/pagination.templ @@ -0,0 +1,31 @@ +package components + +import "github.com/tigorlazuardi/redmage/views" +import "strconv" +import "github.com/tigorlazuardi/redmage/views/utils" +import "strings" + +type PaginationData struct { + Offset int64 + Limit int64 + BaseURL string + Total int64 + Classes []string +} + +templ Pagination(c *views.Context, data PaginationData) { + if data.Total > data.Limit { +
+ for i, count := 1, int64(0); count < data.Total; i, count = i+1, count+data.Limit { + count - data.Limit , + strings.Join(data.Classes, " "), len(data.Classes) > 0, + ) } + >{ strconv.Itoa(i) } + } +
+ } +} diff --git a/views/context.go b/views/context.go index 1dc8ff7..d8f4dda 100644 --- a/views/context.go +++ b/views/context.go @@ -1,9 +1,11 @@ package views import ( + "fmt" "net/http" "net/url" + "github.com/a-h/templ" "github.com/tigorlazuardi/redmage/config" ) @@ -21,6 +23,18 @@ func (c *Context) AppendQuery(keyValue ...string) string { return query.Encode() } +// URLWithExtraQuery creates a query based from baseUrl with queries joined between +// current context and extraQueries. +// +// extraKeyValues is an alternating key-value pair. +func (c *Context) URLWithExtraQuery(baseUrl string, extraKeyValues ...string) templ.SafeURL { + query := c.Request.URL.Query() + for i := 0; i < len(extraKeyValues); i += 2 { + query.Set(extraKeyValues[i], extraKeyValues[i+1]) + } + return templ.SafeURL(fmt.Sprintf("%s?%s", baseUrl, query.Encode())) +} + func NewContext(config *config.Config, request *http.Request) *Context { return &Context{ Config: config, diff --git a/views/devices/details/filter.templ b/views/devices/details/filter.templ index 40c3123..b855881 100644 --- a/views/devices/details/filter.templ +++ b/views/devices/details/filter.templ @@ -42,13 +42,11 @@ templ filter(c *views.Context, data Data) {