diff --git a/lib/music_library/records.ex b/lib/music_library/records.ex index 08ab6b8a..e98632ec 100644 --- a/lib/music_library/records.ex +++ b/lib/music_library/records.ex @@ -35,6 +35,14 @@ defmodule MusicLibrary.Records do Repo.aggregate(Record, :count) end + def search_records_count(query) do + q = + from r in Record, + where: like(r.title, ^"%#{query}%") or like(r.artists, ^"%#{query}%") + + Repo.aggregate(q, :count) + end + def get_record!(id), do: Repo.get!(Record, id) def get_image!(id) do diff --git a/lib/music_library_web/components/pagination.ex b/lib/music_library_web/components/pagination.ex index 07212418..2c92d5d0 100644 --- a/lib/music_library_web/components/pagination.ex +++ b/lib/music_library_web/components/pagination.ex @@ -1,7 +1,6 @@ defmodule MusicLibraryWeb.Pagination do use Phoenix.Component - # alias Phoenix.LiveView.JS use Gettext, backend: MusicLibraryWeb.Gettext attr :pagination_params, :map, required: true @@ -39,11 +38,13 @@ defmodule MusicLibraryWeb.Pagination do :if={@page_links.prev_page} page_number={@page_links.prev_page} page_size={@pagination_params.page_size} + query={@pagination_params.query} /> <.numbered_link :for={page_number <- @page_links.visible_left_pages} page_number={page_number} page_size={@pagination_params.page_size} + query={@pagination_params.query} /> <.separator :if={@page_links.left_separator} /> <.numbered_link @@ -51,17 +52,20 @@ defmodule MusicLibraryWeb.Pagination do page_number={page_number} active={page_number == @pagination_params.page} page_size={@pagination_params.page_size} + query={@pagination_params.query} /> <.separator :if={@page_links.right_separator} /> <.numbered_link :for={page_number <- @page_links.visible_right_pages} page_number={page_number} page_size={@pagination_params.page_size} + query={@pagination_params.query} /> <.next_link :if={@page_links.next_page} page_number={@page_links.next_page} page_size={@pagination_params.page_size} + query={@pagination_params.query} /> @@ -72,12 +76,13 @@ defmodule MusicLibraryWeb.Pagination do attr :page_number, :integer, required: true attr :page_size, :integer, required: true + attr :query, :string, required: true defp next_link(assigns) do ~H""" <.link class="relative inline-flex items-center rounded-r-md px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-20 focus:outline-offset-0" - patch={"?" <> URI.encode_query(page: @page_number, page_size: @page_size)} + patch={"?" <> encode_query(page: @page_number, page_size: @page_size, query: @query)} > Next Previous

All Records

+
+
+ +
<.link patch={~p"/records/import"}> <.button>Import from MusicBrainz - - +
+ <.table id="records" @@ -62,4 +73,4 @@ /> -<.pagination pagination_params={@pagination_params} /> +<.pagination pagination_params={@record_list_params} />