diff --git a/lib/music_library_web/components/search_components.ex b/lib/music_library_web/components/search_components.ex
index 1e44fb60..41392133 100644
--- a/lib/music_library_web/components/search_components.ex
+++ b/lib/music_library_web/components/search_components.ex
@@ -14,10 +14,9 @@ defmodule MusicLibraryWeb.SearchComponents do
## Examples
- <.search_result_record record={record} selected={false} />
+ <.search_result_record record={record} />
"""
attr :record, :map, required: true
- attr :selected, :boolean, default: false
attr :type, :atom, required: true, values: [:collection, :wishlist]
attr :rest, :global, include: ~w(phx-click phx-value-id)
@@ -26,8 +25,7 @@ defmodule MusicLibraryWeb.SearchComponents do
@@ -62,10 +60,9 @@ defmodule MusicLibraryWeb.SearchComponents do
## Examples
- <.search_result_artist artist={artist} selected={false} />
+ <.search_result_artist artist={artist} />
"""
attr :artist, :map, required: true
- attr :selected, :boolean, default: false
attr :rest, :global, include: ~w(phx-click phx-value-id)
def search_result_artist(assigns) do
@@ -73,8 +70,7 @@ defmodule MusicLibraryWeb.SearchComponents do
diff --git a/lib/music_library_web/live/universal_search_live/index.ex b/lib/music_library_web/live/universal_search_live/index.ex
index be7d0670..3f44fa13 100644
--- a/lib/music_library_web/live/universal_search_live/index.ex
+++ b/lib/music_library_web/live/universal_search_live/index.ex
@@ -14,7 +14,6 @@ defmodule MusicLibraryWeb.UniversalSearchLive.Index do
|> assign(:search_counts, %{collection_count: 0, wishlist_count: 0, artists_count: 0})
|> assign(:show_modal, false)
|> assign(:loading, false)
- |> assign(:selected_index, -1)
|> assign(:total_results, 0)}
end
@@ -31,7 +30,6 @@ defmodule MusicLibraryWeb.UniversalSearchLive.Index do
|> assign(:search_query, "")
|> assign(:search_results, %{collection: [], wishlist: [], artists: []})
|> assign(:search_counts, %{collection_count: 0, wishlist_count: 0, artists_count: 0})
- |> assign(:selected_index, -1)
|> assign(:total_results, 0)}
end
@@ -46,7 +44,6 @@ defmodule MusicLibraryWeb.UniversalSearchLive.Index do
|> assign(:search_results, %{collection: [], wishlist: [], artists: []})
|> assign(:search_counts, %{collection_count: 0, wishlist_count: 0, artists_count: 0})
|> assign(:loading, false)
- |> assign(:selected_index, -1)
|> assign(:total_results, 0)}
_query ->
@@ -110,28 +107,6 @@ defmodule MusicLibraryWeb.UniversalSearchLive.Index do
|> push_navigate(to: ~p"/wishlist?query=#{query}")}
end
- @impl true
- def handle_event("key_navigation", %{"key" => key}, socket) do
- case key do
- "Escape" ->
- {:noreply, assign(socket, :show_modal, false)}
-
- "ArrowDown" ->
- new_index = min(socket.assigns.selected_index + 1, socket.assigns.total_results - 1)
- {:noreply, assign(socket, :selected_index, new_index)}
-
- "ArrowUp" ->
- new_index = max(socket.assigns.selected_index - 1, -1)
- {:noreply, assign(socket, :selected_index, new_index)}
-
- "Enter" ->
- handle_enter_key(socket)
-
- _ ->
- {:noreply, socket}
- end
- end
-
@impl true
def handle_info({:perform_search, query}, socket) do
# Only search if the query hasn't changed (debouncing)
@@ -149,57 +124,9 @@ defmodule MusicLibraryWeb.UniversalSearchLive.Index do
|> assign(:search_results, search_results)
|> assign(:search_counts, search_counts)
|> assign(:loading, false)
- |> assign(:selected_index, -1)
|> assign(:total_results, total_results)}
else
{:noreply, socket}
end
end
-
- defp handle_enter_key(socket) do
- selected_index = socket.assigns.selected_index
-
- if selected_index >= 0 do
- results = socket.assigns.search_results
-
- # Calculate which section and item the selected index corresponds to
- collection_count = length(results.collection)
- wishlist_count = length(results.wishlist)
- artists_count = length(results.artists)
-
- cond do
- selected_index < collection_count ->
- # Selected item is in collection
- record = Enum.at(results.collection, selected_index)
-
- {:noreply,
- socket
- |> assign(:show_modal, false)
- |> push_navigate(to: ~p"/collection/#{record.id}")}
-
- selected_index < collection_count + wishlist_count ->
- # Selected item is in wishlist
- record = Enum.at(results.wishlist, selected_index - collection_count)
-
- {:noreply,
- socket
- |> assign(:show_modal, false)
- |> push_navigate(to: ~p"/wishlist/#{record.id}")}
-
- selected_index < collection_count + wishlist_count + artists_count ->
- # Selected item is in artists
- artist = Enum.at(results.artists, selected_index - collection_count - wishlist_count)
-
- {:noreply,
- socket
- |> assign(:show_modal, false)
- |> push_navigate(to: ~p"/artists/#{artist.musicbrainz_id}")}
-
- true ->
- {:noreply, socket}
- end
- else
- {:noreply, socket}
- end
- end
end
diff --git a/lib/music_library_web/live/universal_search_live/index.html.heex b/lib/music_library_web/live/universal_search_live/index.html.heex
index dcc684ee..4f6cb85b 100644
--- a/lib/music_library_web/live/universal_search_live/index.html.heex
+++ b/lib/music_library_web/live/universal_search_live/index.html.heex
@@ -44,10 +44,9 @@
total_count={@search_counts.collection_count}
>
<.search_result_record
- :for={{record, index} <- Enum.with_index(@search_results.collection)}
+ :for={record <- @search_results.collection}
record={record}
type={:collection}
- selected={@selected_index == index}
phx-click="navigate_to_record"
phx-value-id={record.id}
phx-value-type="collection"
@@ -72,10 +71,9 @@
class="border-t border-zinc-200 dark:border-zinc-700"
>
<.search_result_record
- :for={{record, index} <- Enum.with_index(@search_results.wishlist)}
+ :for={record <- @search_results.wishlist}
record={record}
type={:wishlist}
- selected={@selected_index == length(@search_results.collection) + index}
phx-click="navigate_to_record"
phx-value-id={record.id}
phx-value-type="wishlist"
@@ -100,12 +98,8 @@
class="border-t border-zinc-200 dark:border-zinc-700"
>
<.search_result_artist
- :for={{artist, index} <- Enum.with_index(@search_results.artists)}
+ :for={artist <- @search_results.artists}
artist={artist}
- selected={
- @selected_index ==
- length(@search_results.collection) + length(@search_results.wishlist) + index
- }
phx-click="navigate_to_artist"
phx-value-id={artist.musicbrainz_id}
/>