Wire buttons with view

This commit is contained in:
Claudio Ortolina
2024-12-29 15:31:26 +00:00
parent 48e2f4e2e3
commit 1534d28c9e
3 changed files with 30 additions and 11 deletions
@@ -63,11 +63,13 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
defp apply_action(socket, :index, params) do defp apply_action(socket, :index, params) do
query = params["query"] || "" query = params["query"] || ""
order = params["order"] || "alphabetical"
total_records = Collection.search_records_count(query) total_records = Collection.search_records_count(query)
record_list_params = record_list_params =
@default_records_list_params @default_records_list_params
|> merge_query(query) |> merge_query(query)
|> merge_order(order)
|> merge_pagination(params, total_records) |> merge_pagination(params, total_records)
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)
@@ -138,6 +140,10 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
Map.put(record_list_params, :query, query) Map.put(record_list_params, :query, query)
end end
defp merge_order(record_list_params, order) do
Map.put(record_list_params, :order, parse_order(order))
end
defp merge_pagination(record_list_params, params, total_records) do defp merge_pagination(record_list_params, params, total_records) do
record_list_params record_list_params
|> Map.put(:page, parse_int_or_default(params["page"], record_list_params.page)) |> Map.put(:page, parse_int_or_default(params["page"], record_list_params.page))
@@ -154,10 +160,23 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
String.to_integer(value) String.to_integer(value)
end end
defp back_path(record_list_params) do defp parse_order("alphabetical"), do: :alphabetical
defp parse_order("purchase"), do: :purchase
defp order_path(record_list_params, order) do
qs = qs =
record_list_params record_list_params
|> Map.take([:query, :page, :page_size]) |> Map.take([:query, :page, :page_size])
|> Map.put(:order, order)
|> Enum.filter(fn {_, v} -> v not in ["", nil] end)
~p"/collection?#{qs}"
end
defp back_path(record_list_params) do
qs =
record_list_params
|> Map.take([:query, :page, :page_size, :order])
|> Enum.filter(fn {_, v} -> v not in ["", nil] end) |> Enum.filter(fn {_, v} -> v not in ["", nil] end)
~p"/collection?#{qs}" ~p"/collection?#{qs}"
@@ -10,8 +10,8 @@
<div class="flex items-center justify-between gap-6 mt-8"> <div class="flex items-center justify-between gap-6 mt-8">
<span class="isolate inline-flex rounded-md shadow-sm"> <span class="isolate inline-flex rounded-md shadow-sm">
<button <.link
type="button" patch={order_path(@record_list_params, :alphabetical)}
class={[ class={[
"relative inline-flex items-center rounded-l-md bg-white px-3 py-2 text-xs sm:text-sm text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10", "relative inline-flex items-center rounded-l-md bg-white px-3 py-2 text-xs sm:text-sm text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10",
@record_list_params.order == :alphabetical && "font-bold" @record_list_params.order == :alphabetical && "font-bold"
@@ -19,9 +19,9 @@
> >
<.icon name="hero-user-solid" class="mr-1 h-4 w-4" aria-hidden="true" data-slot="icon" /> <.icon name="hero-user-solid" class="mr-1 h-4 w-4" aria-hidden="true" data-slot="icon" />
{gettext("A->Z")} {gettext("A->Z")}
</button> </.link>
<button <.link
type="button" patch={order_path(@record_list_params, :purchase)}
class={[ class={[
"relative -ml-px inline-flex items-center rounded-r-md bg-white px-3 py-2 text-xs sm:text-sm text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10", "relative -ml-px inline-flex items-center rounded-r-md bg-white px-3 py-2 text-xs sm:text-sm text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10",
@record_list_params.order == :purchase && "font-bold" @record_list_params.order == :purchase && "font-bold"
@@ -34,7 +34,7 @@
data-slot="icon" data-slot="icon"
/> />
{gettext("Purchase")} {gettext("Purchase")}
</button> </.link>
</span> </span>
<p class="text-right text-sm max-sm:text-xs text-zinc-900 dark:text-zinc-400"> <p class="text-right text-sm max-sm:text-xs text-zinc-900 dark:text-zinc-400">
+4 -4
View File
@@ -31,7 +31,7 @@ msgstr ""
#: lib/music_library_web/components/layouts/app.html.heex:14 #: lib/music_library_web/components/layouts/app.html.heex:14
#: lib/music_library_web/live/artist_live/show.html.heex:73 #: lib/music_library_web/live/artist_live/show.html.heex:73
#: lib/music_library_web/live/collection_live/index.ex:79 #: lib/music_library_web/live/collection_live/index.ex:81
#: lib/music_library_web/live/collection_live/show.ex:115 #: lib/music_library_web/live/collection_live/show.ex:115
#: lib/music_library_web/live/collection_live/show.ex:132 #: lib/music_library_web/live/collection_live/show.ex:132
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@@ -59,8 +59,8 @@ msgstr ""
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:125 #: lib/music_library_web/live/collection_live/index.ex:127
#: lib/music_library_web/live/collection_live/index.ex:132 #: lib/music_library_web/live/collection_live/index.ex:134
#: lib/music_library_web/live/stats_live/index.ex:53 #: lib/music_library_web/live/stats_live/index.ex:53
#: lib/music_library_web/live/stats_live/index.ex:59 #: lib/music_library_web/live/stats_live/index.ex:59
#: lib/music_library_web/live/wishlist_live/index.ex:121 #: lib/music_library_web/live/wishlist_live/index.ex:121
@@ -186,7 +186,7 @@ msgstr ""
msgid "Purchased on" msgid "Purchased on"
msgstr "" msgstr ""
#: lib/music_library_web/live/collection_live/index.ex:117 #: lib/music_library_web/live/collection_live/index.ex:119
#: lib/music_library_web/live/stats_live/index.ex:45 #: lib/music_library_web/live/stats_live/index.ex:45
#: lib/music_library_web/live/wishlist_live/index.ex:113 #: lib/music_library_web/live/wishlist_live/index.ex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format