Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // MaxSize defines the max size of items to display. MaxSize = 100000 // DefaultSize defines the default size when ListOptions.Size is zero. DefaultSize = MaxSize )
Functions ¶
This section is empty.
Types ¶
type List ¶
type List[T any] struct { CurrentPage int `json:"current_page"` // the current page. PageSize int `json:"page_size"` // the total amount of the entities return. TotalPages int `json:"total_pages"` // the total number of pages based on page, size and total count. TotalItems int64 `json:"total_items"` // the total number of rows. HasNextPage bool `json:"has_next_page"` // true if more data can be fetched, depending on the current page * page size and total pages. Filter any `json:"filter"` // if any filter data. Items []T `json:"items"` // Items is empty array if no objects returned. Do NOT modify from outside. }
List is the http response of a server handler which should render items with pagination support.
func NewList ¶
func NewList[T any](items []T, totalCount int64, filter any, opts ListOptions) *List[T]
NewList returns a new List response which holds the current page, page size, total pages, total items count, any custom filter and the items array.
Example Code:
import "github.com/kataras/iris/v12/x/pagination"
...more code
type User struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
}
type ExtraUser struct {
User
ExtraData string
}
func main() {
users := []User{
{"Gerasimos", "Maropoulos"},
{"Efi", "Kwfidou"},
}
t := pagination.NewList(users, 100, nil, pagination.ListOptions{
Page: 1,
Size: 50,
})
// Optionally, transform a T list of objects to a V list of objects.
v, err := pagination.TransformList(t, func(u User) (ExtraUser, error) {
return ExtraUser{
User: u,
ExtraData: "test extra data",
}, nil
})
if err != nil { panic(err) }
paginationJSON, err := json.MarshalIndent(v, "", " ")
if err!=nil { panic(err) }
fmt.Println(paginationJSON)
}
func TransformList ¶
TransformList accepts a List response and converts to a list of V items. T => from V => to
Example Code:
listOfUsers := pagination.NewList(...)
newListOfExtraUsers, err := pagination.TransformList(listOfUsers, func(u User) (ExtraUser, error) {
return ExtraUser{
User: u,
ExtraData: "test extra data",
}, nil
})
type ListOptions ¶
type ListOptions struct {
// Current page number.
// If Page > 0 then:
// Limit = DefaultLimit
// Offset = DefaultLimit * Page
// If Page == 0 then no actual data is return,
// internally we must check for this value
// because in postgres LIMIT 0 returns the columns but with an empty set.
Page int `json:"page" url:"page"`
// The elements to get, this modifies the LIMIT clause,
// this Size can't be higher than the MaxSize.
// If Size is zero then size is set to DefaultSize.
Size int `json:"size" url:"size"`
}
ListOptions is the list request object which should be provided by the client through URL Query. Then the server passes that options to a database query, including any custom filters may be given from the request body and, then the server responds back with a `Context.JSON(NewList(...))` response based on the database query's results.
func (ListOptions) Bind ¶
func (opts ListOptions) Bind(r *http.Request) error
Bind binds the ListOptions values to a request value. It should be used as an x/client.RequestOption to fire requests on a server that supports pagination.
func (ListOptions) GetCurrentPage ¶
func (opts ListOptions) GetCurrentPage() int
GetCurrentPage returns the Page or 1.
func (ListOptions) GetLimit ¶
func (opts ListOptions) GetLimit() int
GetLimit returns the LIMIT value of a query.
func (ListOptions) GetNextPage ¶
func (opts ListOptions) GetNextPage() int
GetNextPage returns the next page, current page + 1.
func (ListOptions) GetOffset ¶
func (opts ListOptions) GetOffset() int
GetLimit returns the OFFSET value of a query.