defmodule Pagination.PaginatorState do
@moduledoc """
The Paginator State structure
it defines properties that changes with user input
- `page` - current page displayed
- `page_max` - current last page index based on query results and `per_page_nb`
- `per_page_nb` - current selected number of records per page to display
(0 is used to display all records)
- `per_page_items` - list of possible selections
- `filters` an array of tuples {field_name, "label to show"}
as well as prooerties that
are required to setup default values
"""
defstruct order_by: {:asc, :id},
filters: [],
page: 1,
page_max: 1,
per_page_nb: nil,
per_page_items: [5, 10, 20, 0],
data: []
@type t :: %__MODULE__{
# a tuple to provide a direction and a field
order_by: nil | {:asc | :desc, any()},
# a keyword list of filters defined by field: [title: "World", description: "ello"]
filters: [],
# the current page displayed
page: non_neg_integer(),
# the max number of pages to display
page_max: non_neg_integer(),
# the current items displayed per page,
# if nil -> set to the head of `per_page_items` or 10 (default)
per_page_nb: nil | non_neg_integer(),
# the list of possible selections for number of items to display per page
per_page_items: [non_neg_integer()],
# the results
data: []
}
end