From 3f3bc72f309683f73d9d184e15ff6979ca0191ca Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Sun, 12 May 2024 18:13:00 +0700 Subject: [PATCH] devices-details: added pagination component --- views/components/pagination.templ | 31 ++++++++++++++++++++++++++++++ views/context.go | 14 ++++++++++++++ views/devices/details/filter.templ | 6 ++---- views/devices/details/view.templ | 26 +++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 views/components/pagination.templ 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) {