Add the search by bids for Book Index LiveView.
This commit is contained in:
@@ -180,6 +180,15 @@ defmodule DecentralisedBookIndex.Metadata.Book do
|
|||||||
pagination offset?: true, default_limit: 10
|
pagination offset?: true, default_limit: 10
|
||||||
end
|
end
|
||||||
|
|
||||||
|
read :search_by_bid do
|
||||||
|
argument :type, :string, allow_nil?: false
|
||||||
|
argument :bid, :string, allow_nil?: false
|
||||||
|
|
||||||
|
filter expr(exists(bids, type == ^arg(:type) and contains(bid, ^arg(:bid))))
|
||||||
|
|
||||||
|
pagination offset?: true, default_limit: 10
|
||||||
|
end
|
||||||
|
|
||||||
update :update do
|
update :update do
|
||||||
primary? true
|
primary? true
|
||||||
require_atomic? false
|
require_atomic? false
|
||||||
|
|||||||
@@ -106,9 +106,11 @@ defmodule DecentralisedBookIndexWeb.BookLive.Index do
|
|||||||
search_mode = Map.get(params, "search_mode", "title") |> validate_search_mode()
|
search_mode = Map.get(params, "search_mode", "title") |> validate_search_mode()
|
||||||
page_params = AshPhoenix.LiveView.page_from_params(params, 10)
|
page_params = AshPhoenix.LiveView.page_from_params(params, 10)
|
||||||
|
|
||||||
page = Metadata.search_book!(
|
page = search(
|
||||||
|
search_mode,
|
||||||
search_query,
|
search_query,
|
||||||
page: page_params ++ [count: true],
|
page_params,
|
||||||
|
sort_by: sort_by,
|
||||||
actor: socket.assigns[:current_user]
|
actor: socket.assigns[:current_user]
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -207,7 +209,7 @@ defmodule DecentralisedBookIndexWeb.BookLive.Index do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def validate_search_mode(key) do
|
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
|
if key in valid_keys do
|
||||||
key
|
key
|
||||||
@@ -224,4 +226,28 @@ defmodule DecentralisedBookIndexWeb.BookLive.Index do
|
|||||||
|
|
||||||
{:noreply, push_patch(socket, to: ~p"/books?#{params}")}
|
{:noreply, push_patch(socket, to: ~p"/books?#{params}")}
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user