Show total results inside add record modal

This commit is contained in:
Claudio Ortolina
2025-08-27 09:49:18 +03:00
parent 476273091b
commit c20e901d21
3 changed files with 26 additions and 14 deletions
+6 -3
View File
@@ -534,10 +534,13 @@ defmodule MusicBrainz.API do
end end
defp parse_release_group_search_results({request, response}) do defp parse_release_group_search_results({request, response}) do
releases = body = %{
Enum.map(response.body["release-groups"], &ReleaseGroupSearchResult.from_api_response/1) total_count: response.body["count"],
release_groups:
Enum.map(response.body["release-groups"], &ReleaseGroupSearchResult.from_api_response/1)
}
{request, Map.put(response, :body, releases)} {request, Map.put(response, :body, body)}
end end
defp parse_artist({request, response}) do defp parse_artist({request, response}) do
@@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.AddRecordComponent do
use MusicLibraryWeb, :live_component use MusicLibraryWeb, :live_component
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1] import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
import MusicLibraryWeb.SearchComponents, only: [keyboard_shortcuts: 1]
alias MusicBrainz.ReleaseGroupSearchResult alias MusicBrainz.ReleaseGroupSearchResult
alias MusicLibrary.Records alias MusicLibrary.Records
@@ -56,6 +57,7 @@ defmodule MusicLibraryWeb.AddRecordComponent do
> >
{gettext("No results")} {gettext("No results")}
</div> </div>
<.keyboard_shortcuts total_results={@release_groups_total_count} />
</div> </div>
""" """
end end
@@ -133,6 +135,7 @@ defmodule MusicLibraryWeb.AddRecordComponent do
dom_id: fn rg -> "musicbrainz_#{rg.id}" end dom_id: fn rg -> "musicbrainz_#{rg.id}" end
) )
|> assign(:release_groups_count, 0) |> assign(:release_groups_count, 0)
|> assign(:release_groups_total_count, 0)
|> stream(:release_groups, []) |> stream(:release_groups, [])
|> assign(:loaded_all_results?, false)} |> assign(:loaded_all_results?, false)}
end end
@@ -145,12 +148,13 @@ defmodule MusicLibraryWeb.AddRecordComponent do
if mb_query == "" do if mb_query == "" do
socket socket
else else
{:ok, release_groups} = {:ok, result} =
MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: 0) MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: 0)
socket socket
|> assign(:release_groups_count, Enum.count(release_groups)) |> assign(:release_groups_count, Enum.count(result.release_groups))
|> stream(:release_groups, release_groups, reset: true) |> assign(:release_groups_total_count, result.total_count)
|> stream(:release_groups, result.release_groups, reset: true)
end end
{:ok, {:ok,
@@ -163,14 +167,15 @@ defmodule MusicLibraryWeb.AddRecordComponent do
@impl true @impl true
def handle_event("search", %{"mb_query" => mb_query}, socket) do def handle_event("search", %{"mb_query" => mb_query}, socket) do
{:ok, release_groups} = {:ok, result} =
MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: 0) MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: 0)
{:noreply, {:noreply,
socket socket
|> assign(:offset, 0) |> assign(:offset, 0)
|> assign(:release_groups_count, length(release_groups)) |> assign(:release_groups_count, length(result.release_groups))
|> stream(:release_groups, release_groups, reset: true) |> assign(:release_groups_total_count, result.total_count)
|> stream(:release_groups, result.release_groups, reset: true)
|> assign(:form, to_form(%{"mb_query" => mb_query}))} |> assign(:form, to_form(%{"mb_query" => mb_query}))}
end end
@@ -179,13 +184,14 @@ defmodule MusicLibraryWeb.AddRecordComponent do
offset = socket.assigns.offset + @batch_size offset = socket.assigns.offset + @batch_size
case MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: offset) do case MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: offset) do
{:ok, release_groups} -> {:ok, result} ->
{:noreply, {:noreply,
socket socket
|> assign(:offset, offset) |> assign(:offset, offset)
|> assign(:loaded_all_results?, length(release_groups) < @batch_size) |> assign(:loaded_all_results?, length(result.release_groups) < @batch_size)
|> assign(:release_groups_count, length(release_groups)) |> assign(:release_groups_count, length(result.release_groups))
|> stream(:release_groups, release_groups)} |> assign(:release_groups_total_count, result.total_count)
|> stream(:release_groups, result.release_groups)}
{:error, _reason} -> {:error, _reason} ->
{:noreply, socket} {:noreply, socket}
+4 -1
View File
@@ -17,8 +17,11 @@ defmodule MusicBrainzTest do
Req.Test.json(conn, results) Req.Test.json(conn, results)
end) end)
assert {:ok, expected_results} == assert {:ok, result} =
MusicBrainz.search_release_group("Marillion", limit: 20, offset: 10) MusicBrainz.search_release_group("Marillion", limit: 20, offset: 10)
assert result.release_groups == expected_results
assert result.total_count == 437
end end
end end