Adds record pagination

This commit is contained in:
Claudio Ortolina
2024-09-17 10:16:24 +01:00
parent 5623a5239f
commit 99960832c8
4 changed files with 226 additions and 88 deletions
@@ -6,8 +6,17 @@ defmodule MusicLibraryWeb.RecordLive.Index do
alias MusicLibrary.Records.Record
@impl true
def mount(_params, _session, socket) do
{:ok, stream(socket, :records, Records.list_records())}
def mount(params, _session, socket) do
total_records = Records.count_records()
pagination_params = get_pagination_params(params, total_records)
offset = page_to_offset(pagination_params.page, pagination_params.page_size)
records = Records.list_records(limit: pagination_params.page_size, offset: offset)
{:ok,
socket
|> assign(:pagination_params, pagination_params)
|> stream(:records, records)}
end
@impl true
@@ -27,10 +36,25 @@ defmodule MusicLibraryWeb.RecordLive.Index do
|> assign(:record, %Record{})
end
defp apply_action(socket, :index, _params) do
socket
|> assign(:page_title, "Listing Records")
|> assign(:record, nil)
defp apply_action(socket, :index, params) do
new_socket =
socket
|> assign(:page_title, "Listing Records")
|> assign(:record, nil)
total_records = Records.count_records()
pagination_params = get_pagination_params(params, total_records)
if pagination_params != socket.assigns.pagination_params do
offset = page_to_offset(pagination_params.page, pagination_params.page_size)
records = Records.list_records(limit: pagination_params.page_size, offset: offset)
new_socket
|> assign(:pagination_params, pagination_params)
|> stream(:records, records, reset: true)
else
new_socket
end
end
@impl true
@@ -55,4 +55,4 @@
/>
</.modal>
<.card_footer entries={@streams.records} />
<.pagination pagination_params={@pagination_params} />