Add the search by bids for Book Index LiveView.

This commit is contained in:
2025-04-04 11:18:40 +03:00
parent 73f69a72a5
commit 0150095233
2 changed files with 38 additions and 3 deletions
@@ -106,9 +106,11 @@ defmodule DecentralisedBookIndexWeb.BookLive.Index do
search_mode = Map.get(params, "search_mode", "title") |> validate_search_mode()
page_params = AshPhoenix.LiveView.page_from_params(params, 10)
page = Metadata.search_book!(
page = search(
search_mode,
search_query,
page: page_params ++ [count: true],
page_params,
sort_by: sort_by,
actor: socket.assigns[:current_user]
)
@@ -207,7 +209,7 @@ defmodule DecentralisedBookIndexWeb.BookLive.Index do
end
def validate_search_mode(key) do
valid_keys = Enum.map(sort_options(), &elem(&1, 1))
valid_keys = Enum.map(search_mode_options(), &elem(&1, 1))
if key in valid_keys do
key
@@ -224,4 +226,28 @@ defmodule DecentralisedBookIndexWeb.BookLive.Index do
{:noreply, push_patch(socket, to: ~p"/books?#{params}")}
end
def search(search_mode, search_query, page_params, opts \\ []) do
sort_by = Keyword.get(opts, :sort_by, nil)
actor = Keyword.get(opts, :actor, nil)
case search_mode do
"title" ->
Metadata.search_book!(
search_query,
query: [sort_input: sort_by],
page: page_params ++ [count: true],
actor: actor
)
type ->
Metadata.search_book_by_bid!(
type,
search_query,
query: [sort_input: sort_by],
page: page_params ++ [count: true],
actor: actor
)
end
end
end