Update the Book Show to show the Authors with links.
This commit is contained in:
@@ -9,7 +9,9 @@ defmodule DecentralisedBookIndexWeb.BookLive.Show do
|
||||
~H"""
|
||||
<.header>
|
||||
{@book.title}
|
||||
<:subtitle>{@authors_string}</:subtitle>
|
||||
<:subtitle>
|
||||
<.authors book={@book} />
|
||||
</:subtitle>
|
||||
|
||||
<:actions>
|
||||
<%= if @current_user != nil and Role.can_moderate?(@current_user.role) do %>
|
||||
@@ -65,32 +67,44 @@ defmodule DecentralisedBookIndexWeb.BookLive.Show do
|
||||
@impl true
|
||||
def handle_params(%{"id" => id}, _, socket) do
|
||||
book = Ash.get!(Metadata.Book, id, actor: socket.assigns.current_user, load: [:author_roles])
|
||||
author_roles = Metadata.get_author_roles_by_book_id!(book.id, load: [:author])
|
||||
authors_string = Enum.reduce(
|
||||
author_roles, "",
|
||||
fn author_role, acc ->
|
||||
if acc != "" do
|
||||
acc <> ", "
|
||||
else
|
||||
acc
|
||||
end
|
||||
<>
|
||||
if author_role.role == "" do
|
||||
"#{author_role.author.name}"
|
||||
else
|
||||
"#{author_role.author.name} (#{author_role.role})"
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:page_title, page_title(socket.assigns.live_action))
|
||||
|> assign(:book, book)
|
||||
|> assign(:authors_string, authors_string)
|
||||
|> assign(:alternative_editions, alternative_editions)
|
||||
}
|
||||
end
|
||||
|
||||
defp page_title(:show), do: "Show Book"
|
||||
defp page_title(:edit), do: "Edit Book"
|
||||
|
||||
attr :book, :map, required: true
|
||||
|
||||
def authors(assigns) do
|
||||
author_roles = Metadata.get_author_roles_by_book_id!(assigns.book.id, load: [:author])
|
||||
author_count = length(author_roles)
|
||||
authors_string =
|
||||
author_roles
|
||||
|> Enum.map(fn author_role ->
|
||||
if author_role.role == "" do
|
||||
{"#{author_role.author.name}", author_role.author.id}
|
||||
else
|
||||
{"#{author_role.author.name} (#{author_role.role})", author_role.author.id}
|
||||
end
|
||||
end)
|
||||
|> Enum.zip(1..author_count)
|
||||
|
||||
assigns =
|
||||
assigns
|
||||
|> assign(:authors_string, authors_string)
|
||||
|> assign(:author_count, author_count)
|
||||
|
||||
~H"""
|
||||
<%= for {{name, id}, index} <- @authors_string do %>
|
||||
<.link navigate={~p"/authors/#{id}/"} class="hover:underline">
|
||||
{name}</.link><%= if {index} != {@author_count} do %>,<% end %>
|
||||
<% end %>
|
||||
"""
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user