Refactor params parsing out of live views

Closes #125
This commit is contained in:
Claudio Ortolina
2026-03-22 07:47:45 +00:00
parent af151c955e
commit ef617efe86
3 changed files with 13 additions and 16 deletions
@@ -226,7 +226,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
defp apply_action(socket, :index, params) do
query = params["query"] || ""
order = parse_order(params["order"] || "purchase")
order = parse_order(params["order"] || "purchase", [:purchase, :alphabetical, :release])
total_records = Collection.search_records_count(query)
record_list_params =
@@ -293,9 +293,6 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|> load_and_assign_records(socket.assigns.record_list_params)}
end
defp parse_mode("grid"), do: :grid
defp parse_mode("list"), do: :list
defp load_and_assign_records(socket, record_list_params) do
offset = page_to_offset(record_list_params.page, record_list_params.page_size)
@@ -315,10 +312,6 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|> stream(:records, records, reset: true)
end
defp parse_order("alphabetical"), do: :alphabetical
defp parse_order("purchase"), do: :purchase
defp parse_order("release"), do: :release
defp order_path(record_list_params, order) do
qs =
record_list_params
@@ -196,7 +196,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
defp apply_action(socket, :index, params) do
query = params["query"] || ""
order = parse_order(params["order"] || "insertion")
order = parse_order(params["order"] || "insertion", [:insertion, :alphabetical, :release])
total_records = Wishlist.search_records_count(query)
record_list_params =
@@ -278,9 +278,6 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|> load_and_assign_records(socket.assigns.record_list_params)}
end
defp parse_mode("grid"), do: :grid
defp parse_mode("list"), do: :list
defp load_and_assign_records(socket, record_list_params) do
offset = page_to_offset(record_list_params.page, record_list_params.page_size)
@@ -298,10 +295,6 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|> stream(:records, records, reset: true)
end
defp parse_order("alphabetical"), do: :alphabetical
defp parse_order("insertion"), do: :insertion
defp parse_order("release"), do: :release
defp order_path(record_list_params, order) do
qs =
record_list_params
@@ -55,6 +55,17 @@ defmodule MusicLibraryWeb.LiveHelpers.Params do
Map.put(params, :order, order)
end
@spec parse_mode(String.t()) :: :grid | :list
def parse_mode("grid"), do: :grid
def parse_mode("list"), do: :list
@spec parse_order(String.t(), [atom(), ...]) :: atom()
def parse_order(order, [_ | _] = allowed) when is_binary(order) do
Enum.find(allowed, hd(allowed), fn a -> Atom.to_string(a) == order end)
end
def parse_order(_, []), do: raise(ArgumentError, "allowed orders must not be empty")
@spec apply_fallback_index(Phoenix.LiveView.Socket.t(), map(), atom(), function()) ::
Phoenix.LiveView.Socket.t()
def apply_fallback_index(socket, params, stream_key, apply_action_fn) do