Torch.Pagination (Torch v6.0.0)
View SourceHandles Torch pagination queries and filtering.
Usage
When using the torch.gen.html generators, Torch.Pagination will
automatically be added to your generated context module in the following
way (using a module called Comment as an example):
defmodule MyApp.MyModule do
  use Torch.Pagination,
    repo: MyApp.Repo,
    model: MyApp.MyContext.Comment,
    name: :comments
endThe following Torch context methods will be created by using Torch.Pagination:
- public paginate_*/1
- public filter_config/1
- private do_paginate_*/2
Customization of filter_config/1 is available as this function is defined as defoverridable for
when you prefer to customize the Filtrex filtering configuration.
Required configuration options
- :repo- the application's Ecto.Repo module (required)
- :model- the application's schema module (required)
- :name- the plural name of the collection that needs pagination (required)
Optional configuration options
Additionaly, the following parameters are also supported and can be manually
configured and supplied to the use Torch.Pagination call:
- :page_size- (default: 15) controls how many items are returned per page
- :pagination_size- (default: 5) controls how many pagination links are displayed in the UI
You may also configure page_size and pagination_distance on app level for app-wide
defaults when configuring Torch in the application config/config.exs file:
config :torch,
otp_app: :my_app,
page_size: 20,
pagination_distance: 3Manual Pagination
If, for some reason, the default Torch.Pagination method results do not support your application's
needs, you may manually implement paginate_*/1 yourself in your context module. Your customized
paginate_* must return one of the following tuples (typespec Torch.Pagination.t()):
- {:ok, Torch.Pagination.page()}
- {:error, any}
Summary
Types
@type filter_config() :: [Filtrex.Type.Config.t()]
@type page() :: %{ required(atom()) => [any()], page_number: non_neg_integer(), page_size: non_neg_integer(), total_pages: non_neg_integer(), total_entries: non_neg_integer(), distance: non_neg_integer(), sort_field: String.t(), sort_direction: String.t() }