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
defp parse_release_group_search_results({request, response}) do
releases =
Enum.map(response.body["release-groups"], &ReleaseGroupSearchResult.from_api_response/1)
body = %{
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
defp parse_artist({request, response}) do
@@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.AddRecordComponent do
use MusicLibraryWeb, :live_component
import MusicLibraryWeb.RecordComponents, only: [format_label: 1, type_label: 1]
import MusicLibraryWeb.SearchComponents, only: [keyboard_shortcuts: 1]
alias MusicBrainz.ReleaseGroupSearchResult
alias MusicLibrary.Records
@@ -56,6 +57,7 @@ defmodule MusicLibraryWeb.AddRecordComponent do
>
{gettext("No results")}
</div>
<.keyboard_shortcuts total_results={@release_groups_total_count} />
</div>
"""
end
@@ -133,6 +135,7 @@ defmodule MusicLibraryWeb.AddRecordComponent do
dom_id: fn rg -> "musicbrainz_#{rg.id}" end
)
|> assign(:release_groups_count, 0)
|> assign(:release_groups_total_count, 0)
|> stream(:release_groups, [])
|> assign(:loaded_all_results?, false)}
end
@@ -145,12 +148,13 @@ defmodule MusicLibraryWeb.AddRecordComponent do
if mb_query == "" do
socket
else
{:ok, release_groups} =
{:ok, result} =
MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: 0)
socket
|> assign(:release_groups_count, Enum.count(release_groups))
|> stream(:release_groups, release_groups, reset: true)
|> assign(:release_groups_count, Enum.count(result.release_groups))
|> assign(:release_groups_total_count, result.total_count)
|> stream(:release_groups, result.release_groups, reset: true)
end
{:ok,
@@ -163,14 +167,15 @@ defmodule MusicLibraryWeb.AddRecordComponent do
@impl true
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)
{:noreply,
socket
|> assign(:offset, 0)
|> assign(:release_groups_count, length(release_groups))
|> stream(:release_groups, release_groups, reset: true)
|> assign(:release_groups_count, length(result.release_groups))
|> assign(:release_groups_total_count, result.total_count)
|> stream(:release_groups, result.release_groups, reset: true)
|> assign(:form, to_form(%{"mb_query" => mb_query}))}
end
@@ -179,13 +184,14 @@ defmodule MusicLibraryWeb.AddRecordComponent do
offset = socket.assigns.offset + @batch_size
case MusicBrainz.search_release_group(mb_query, limit: @batch_size, offset: offset) do
{:ok, release_groups} ->
{:ok, result} ->
{:noreply,
socket
|> assign(:offset, offset)
|> assign(:loaded_all_results?, length(release_groups) < @batch_size)
|> assign(:release_groups_count, length(release_groups))
|> stream(:release_groups, release_groups)}
|> assign(:loaded_all_results?, length(result.release_groups) < @batch_size)
|> assign(:release_groups_count, length(result.release_groups))
|> assign(:release_groups_total_count, result.total_count)
|> stream(:release_groups, result.release_groups)}
{:error, _reason} ->
{:noreply, socket}
+4 -1
View File
@@ -17,8 +17,11 @@ defmodule MusicBrainzTest do
Req.Test.json(conn, results)
end)
assert {:ok, expected_results} ==
assert {:ok, result} =
MusicBrainz.search_release_group("Marillion", limit: 20, offset: 10)
assert result.release_groups == expected_results
assert result.total_count == 437
end
end