From b36a2f828a9f023712de4f80605814b5e4a1309f Mon Sep 17 00:00:00 2001 From: Tigor Hutasuhut Date: Mon, 13 May 2024 10:37:55 +0700 Subject: [PATCH] pagination: support mobile view --- views/components/pagination.templ | 63 +++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/views/components/pagination.templ b/views/components/pagination.templ index 2c472ae..bcaa95d 100644 --- a/views/components/pagination.templ +++ b/views/components/pagination.templ @@ -7,12 +7,13 @@ import "strings" import "fmt" type PaginationData struct { - Offset int64 - Limit int64 - BaseURL string - Total int64 - Classes []string - UnhideRange int + Offset int64 + Limit int64 + BaseURL string + Total int64 + Classes []string + UnhideRange int + MobileUnhideRange int } type pageStatus int @@ -25,11 +26,18 @@ const ( func (pgdata PaginationData) GetUnhideRange() int { if pgdata.UnhideRange < 1 { - return 1 + return 2 } return pgdata.UnhideRange } +func (pgdata PaginationData) GetMobileUnhideRange() int { + if pgdata.MobileUnhideRange < 1 { + return 1 + } + return pgdata.MobileUnhideRange +} + func (pgdata PaginationData) getPageStatus(page int) pageStatus { if page < 2 { return pageStatusShow @@ -53,6 +61,29 @@ func (pgdata PaginationData) getPageStatus(page int) pageStatus { return pageStatusHidden } +func (pgdata PaginationData) getMobilePageStatus(page int) pageStatus { + if page < 2 { + return pageStatusShow + } + lastPage := (pgdata.Total / max(pgdata.Limit, 1)) + 1 + if page == int(lastPage) { + return pageStatusShow + } + current := pgdata.GetCurrentPage() + unhideRange := pgdata.GetMobileUnhideRange() + if page == current-unhideRange-1 { + return pageStatusDot + } + if page == current+unhideRange+1 { + return pageStatusDot + } + if page >= current-unhideRange && page <= current+unhideRange { + return pageStatusShow + } + + return pageStatusHidden +} + func (pgdata PaginationData) GetCurrentPage() int { return int(pgdata.Offset/pgdata.Limit) + 1 } @@ -71,7 +102,7 @@ templ Pagination(c *views.Context, data PaginationData) { get vals() { return JSON.stringify({...this.qs, offset: (Math.max(1, Math.min(this.page, this.max))-1) * (this.qs.limit || 25)}) } }`, data.GetCurrentPage(), c.JSONQuery(), data.GetTotalPage()) } > -
+