From c20e901d21a8c21d5c5d93efa886a78e85c4cfe9 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Wed, 27 Aug 2025 09:49:18 +0300 Subject: [PATCH] Show total results inside add record modal --- lib/music_brainz/api.ex | 9 ++++--- .../components/add_record_component.ex | 26 ++++++++++++------- test/music_brainz_test.exs | 5 +++- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/lib/music_brainz/api.ex b/lib/music_brainz/api.ex index 35ea328a..6266918f 100644 --- a/lib/music_brainz/api.ex +++ b/lib/music_brainz/api.ex @@ -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 diff --git a/lib/music_library_web/components/add_record_component.ex b/lib/music_library_web/components/add_record_component.ex index deafdd44..d413f132 100644 --- a/lib/music_library_web/components/add_record_component.ex +++ b/lib/music_library_web/components/add_record_component.ex @@ -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")} + <.keyboard_shortcuts total_results={@release_groups_total_count} /> """ 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} diff --git a/test/music_brainz_test.exs b/test/music_brainz_test.exs index ad9ac3e3..dc973310 100644 --- a/test/music_brainz_test.exs +++ b/test/music_brainz_test.exs @@ -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