Show total results inside add record modal
This commit is contained in:
@@ -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}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user