From ef617efe86dbc911adefddb01e9e7611f7cef806 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Sun, 22 Mar 2026 07:47:45 +0000 Subject: [PATCH] Refactor params parsing out of live views Closes #125 --- lib/music_library_web/live/collection_live/index.ex | 9 +-------- lib/music_library_web/live/wishlist_live/index.ex | 9 +-------- lib/music_library_web/live_helpers/params.ex | 11 +++++++++++ 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/music_library_web/live/collection_live/index.ex b/lib/music_library_web/live/collection_live/index.ex index 46830af6..326e83a1 100644 --- a/lib/music_library_web/live/collection_live/index.ex +++ b/lib/music_library_web/live/collection_live/index.ex @@ -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 diff --git a/lib/music_library_web/live/wishlist_live/index.ex b/lib/music_library_web/live/wishlist_live/index.ex index eefecdc1..20d180b4 100644 --- a/lib/music_library_web/live/wishlist_live/index.ex +++ b/lib/music_library_web/live/wishlist_live/index.ex @@ -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 diff --git a/lib/music_library_web/live_helpers/params.ex b/lib/music_library_web/live_helpers/params.ex index e78be2c7..e5ae922a 100644 --- a/lib/music_library_web/live_helpers/params.ex +++ b/lib/music_library_web/live_helpers/params.ex @@ -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