Move record leading into handle_params

Loading records in mount/3 proved to be useless, and only caused more
load for nothing. Moving it in handle_params made the app faster, at the
expense of complicating a couple of other actions (edit and import)
which needed to be extended to concern themselves about records.
This commit is contained in:
Claudio Ortolina
2024-10-16 12:49:14 +01:00
parent 22cadea5f7
commit b042c54d6b
+29 -35
View File
@@ -11,18 +11,7 @@ defmodule MusicLibraryWeb.RecordLive.Index do
} }
@impl true @impl true
def mount(params, _session, socket) do def mount(_params, _session, socket) do
query = params["query"] || ""
total_records = Records.search_records_count(query)
record_list_params =
@default_records_list_params
|> merge_query(params["query"])
|> merge_pagination(params, total_records)
offset = page_to_offset(record_list_params.page, record_list_params.page_size)
records = Records.search_records(query, limit: record_list_params.page_size, offset: offset)
socket = socket =
if static_changed?(socket) do if static_changed?(socket) do
put_flash(socket, :warning, "The application has been updated, please reload.") put_flash(socket, :warning, "The application has been updated, please reload.")
@@ -30,11 +19,7 @@ defmodule MusicLibraryWeb.RecordLive.Index do
socket socket
end end
{:ok, {:ok, assign(socket, :nav_section, :records)}
socket
|> assign(:nav_section, :records)
|> assign(:record_list_params, record_list_params)
|> stream(:records, records)}
end end
@impl true @impl true
@@ -42,42 +27,51 @@ defmodule MusicLibraryWeb.RecordLive.Index do
{:noreply, apply_action(socket, socket.assigns.live_action, params)} {:noreply, apply_action(socket, socket.assigns.live_action, params)}
end end
defp apply_action(socket, :import, _params) do defp apply_action(socket, :import, params) do
socket =
if get_in(socket.assigns, [:streams, :records]) == nil do
socket
|> apply_action(:index, params)
else
socket
end
socket socket
|> assign(:page_title, "Import from MusicBrainz") |> assign(:page_title, "Import from MusicBrainz")
|> assign(:record, nil) |> assign(:record, nil)
end end
defp apply_action(socket, :edit, %{"id" => id}) do defp apply_action(socket, :edit, params = %{"id" => id}) do
socket =
if get_in(socket.assigns, [:streams, :records]) == nil do
socket
|> apply_action(:index, params)
else
socket
end
socket socket
|> assign(:page_title, "Edit Metadata") |> assign(:page_title, "Edit Metadata")
|> assign(:record, Records.get_record!(id)) |> assign(:record, Records.get_record!(id))
end end
defp apply_action(socket, :index, params) do defp apply_action(socket, :index, params) do
new_socket = query = params["query"] || ""
socket
|> assign(:page_title, "Collection")
|> assign(:record, nil)
query = params["query"] || socket.assigns.record_list_params.query
total_records = Records.search_records_count(query) total_records = Records.search_records_count(query)
record_list_params = record_list_params =
@default_records_list_params @default_records_list_params
|> merge_query(params["query"]) |> merge_query(query)
|> merge_pagination(params, total_records) |> merge_pagination(params, total_records)
if record_list_params != socket.assigns.record_list_params do offset = page_to_offset(record_list_params.page, record_list_params.page_size)
offset = page_to_offset(record_list_params.page, record_list_params.page_size) records = Records.search_records(query, limit: record_list_params.page_size, offset: offset)
records = Records.search_records(query, limit: record_list_params.page_size, offset: offset)
new_socket socket
|> assign(:record_list_params, record_list_params) |> assign(:page_title, "Collection")
|> stream(:records, records, reset: true) |> assign(:record, nil)
else |> assign(:record_list_params, record_list_params)
new_socket |> stream(:records, records, reset: true)
end
end end
@impl true @impl true