now with pagination

This commit is contained in:
Gavin McDonald
2025-12-16 18:27:39 -05:00
parent 4a7e966744
commit e78ec9fee4
5 changed files with 122 additions and 8 deletions

View File

@@ -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