now with pagination
This commit is contained in:
@@ -1,11 +1,42 @@
|
||||
defmodule LabelmakerWeb.LabelsController do
|
||||
use LabelmakerWeb, :controller
|
||||
alias LabelmakerWeb.Constants
|
||||
|
||||
@label_dir Path.join(:code.priv_dir(:labelmaker), "static/labels")
|
||||
|
||||
def index(conn, _params) do
|
||||
labels = list_labels()
|
||||
render(conn, :index, labels: labels)
|
||||
def index(conn, params) do
|
||||
page = parse_page(params["page"])
|
||||
all_labels = list_labels()
|
||||
total_count = length(all_labels)
|
||||
total_pages = ceil(total_count / Constants.labels_per_page())
|
||||
|
||||
# Ensure page is within valid range
|
||||
page = max(1, min(page, max(total_pages, 1)))
|
||||
|
||||
labels = paginate(all_labels, page)
|
||||
|
||||
render(conn, :index,
|
||||
labels: labels,
|
||||
page: page,
|
||||
total_pages: total_pages,
|
||||
total_count: total_count,
|
||||
per_page: Constants.labels_per_page()
|
||||
)
|
||||
end
|
||||
|
||||
defp parse_page(nil), do: 1
|
||||
|
||||
defp parse_page(page_str) do
|
||||
case Integer.parse(page_str) do
|
||||
{page, _} when page > 0 -> page
|
||||
_ -> 1
|
||||
end
|
||||
end
|
||||
|
||||
defp paginate(labels, page) do
|
||||
labels
|
||||
|> Enum.drop((page - 1) * Constants.labels_per_page())
|
||||
|> Enum.take(Constants.labels_per_page())
|
||||
end
|
||||
|
||||
defp list_labels do
|
||||
|
||||
Reference in New Issue
Block a user