defmodule MoonWeb.Examples.Design.TableExample.WithPaging do
@moduledoc false
use Moon.StatefulComponent
use MoonWeb, :example
alias Moon.Design.Table
alias Moon.Design.Table.Column
alias Moon.Design.Pagination
alias Moon.Components.Renderers.Datetime
alias Moon.Icons.ControlsChevronRight
alias Moon.Icons.ControlsChevronLeft
prop(current_page, :integer, default: 1)
prop(limit, :integer, default: 10)
def render(assigns) do
~F"""
"""
end
def get_all_models() do
Enum.map(1..102, fn x ->
%{id: x, name: "Name #{x}", created_at: DateTime.utc_now()}
end)
end
defp page_count(total_count, limit) do
ceil(total_count / limit)
end
def get_models_10(assigns) do
all_models = get_all_models()
current_page = assigns.current_page
limit = assigns.limit
offset = (current_page - 1) * limit
all_models
|> Enum.slice(offset..(offset + limit - 1))
end
def handle_event("handle_paging_click", %{"value" => current_page}, socket) do
current_page = String.to_integer(current_page)
{:noreply,
socket
|> assign(current_page: current_page, models_10: get_models_10(socket.assigns))}
end
def code() do
"""
alias Moon.Design.Table
alias Moon.Design.Table.Column
alias Moon.Design.Pagination
alias Moon.Components.Renderers.Datetime
alias Moon.Icons.ControlsChevronRight
alias Moon.Icons.ControlsChevronLeft
prop(current_page, :integer, default: 1)
prop(limit, :integer, default: 10)
def render(assigns) do
~F\"""
\"""
end
def get_all_models() do
Enum.map(1..102, fn x ->
%{id: x, name: "Name #\{x}", created_at: DateTime.utc_now()}
end)
end
defp page_count(total_count, limit) do
ceil(total_count / limit)
end
def get_models_10(assigns) do
all_models = get_all_models()
current_page = assigns.current_page
limit = assigns.limit
offset = (current_page - 1) * limit
all_models
|> Enum.slice(offset..(offset + limit - 1))
end
def handle_event("handle_paging_click", %{"value" => current_page}, socket) do
current_page = String.to_integer(current_page)
{:noreply,
socket
|> assign(current_page: current_page, models_10: get_models_10(socket.assigns))}
end
"""
end
end