package components import "github.com/tigorlazuardi/redmage/views" import "strconv" import "github.com/tigorlazuardi/redmage/views/utils" import "strings" import "fmt" type PaginationData struct { Offset int64 Limit int64 BaseURL string Total int64 Classes []string UnhideRange int } type pageStatus int const ( pageStatusShow = iota pageStatusHidden pageStatusDot ) func (pgdata PaginationData) GetUnhideRange() int { if pgdata.UnhideRange < 1 { return 1 } return pgdata.UnhideRange } func (pgdata PaginationData) getPageStatus(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.GetUnhideRange() 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 } func (pgdata PaginationData) GetTotalPage() int { return int(pgdata.Total/max(pgdata.Limit, 1)) + 1 } 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 { if data.GetTotalPage() <= 5 || data.getPageStatus(i) == pageStatusShow { count - data.Limit , strings.Join(data.Classes, " "), len(data.Classes) > 0, ) } >{ strconv.Itoa(i) } } else if data.getPageStatus(i) == pageStatusDot { ... } }
} }