defmodule <%= @module_name %>.Components.UI.Pagination do
@moduledoc """
Pagination navigation component.
Ejected from PhiaUI — you own this copy. Customise freely.
## Example
<.pagination>
<.pagination_content>
<.pagination_item>
<.pagination_previous current_page={@page} total_pages={@total} on_change="go" />
<%= for p <- 1..@total do %>
<.pagination_item>
<.pagination_link page={p} current_page={@page} on_change="go">
<%= p %>
<% end %>
<.pagination_item>
<.pagination_next current_page={@page} total_pages={@total} on_change="go" />
In your LiveView:
def handle_event("go", %{"page" => page}, socket) do
{:noreply, assign(socket, page: String.to_integer(page))}
end
"""
use Phoenix.Component
import <%= @module_name %>.ClassMerger, only: [cn: 1]
import <%= @module_name %>.Components.UI.Icon, only: [icon: 1]
attr :class, :string, default: nil, doc: "Additional CSS classes"
attr :rest, :global
slot :inner_block, required: true
def pagination(assigns) do
~H"""
"""
end
attr :class, :string, default: nil
attr :rest, :global
slot :inner_block, required: true
def pagination_content(assigns) do
~H"""
<%%= render_slot(@inner_block) %>
"""
end
attr :class, :string, default: nil
attr :rest, :global
slot :inner_block, required: true
def pagination_item(assigns) do
~H"""
<%%= render_slot(@inner_block) %>
"""
end
attr :page, :integer, required: true, doc: "The page number this link represents"
attr :current_page, :integer, required: true, doc: "The currently active page"
attr :on_change, :string, default: "page-changed", doc: "phx-click event name"
attr :class, :string, default: nil
attr :rest, :global
slot :inner_block, required: true
def pagination_link(assigns) do
~H"""
"""
end
attr :current_page, :integer, required: true
attr :total_pages, :integer, required: true
attr :on_change, :string, default: "page-changed"
attr :class, :string, default: nil
attr :rest, :global
def pagination_previous(assigns) do
~H"""
"""
end
attr :current_page, :integer, required: true
attr :total_pages, :integer, required: true
attr :on_change, :string, default: "page-changed"
attr :class, :string, default: nil
attr :rest, :global
def pagination_next(assigns) do
~H"""
"""
end
attr :class, :string, default: nil
attr :rest, :global
def pagination_ellipsis(assigns) do
~H"""
…
"""
end
end