Improve page titles

- When showing a single record, use record details
- Split title into logical breadcrumbs
This commit is contained in:
Claudio Ortolina
2024-11-26 21:00:53 +00:00
parent b8a89a041d
commit 2e40cbd5da
6 changed files with 116 additions and 42 deletions
@@ -4,6 +4,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
alias MusicLibrary.Records
alias MusicLibrary.Collection
alias MusicLibraryWeb.CollectionLive.Show
@default_records_list_params %{
query: "",
@@ -38,7 +39,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
end
socket
|> assign(:page_title, gettext("Import from MusicBrainz"))
|> assign(:page_title, gettext("Import from MusicBrainz · Collection"))
|> assign(:record, nil)
end
@@ -51,9 +52,11 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
socket
end
record = Records.get_record!(id)
socket
|> assign(:page_title, gettext("Edit"))
|> assign(:record, Records.get_record!(id))
|> assign(:page_title, Show.page_title(socket.assigns.live_action, record))
|> assign(:record, record)
end
defp apply_action(socket, :index, params) do
@@ -31,7 +31,7 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
{:noreply,
socket
|> assign(:nav_section, :records)
|> assign(:page_title, page_title(socket.assigns.live_action))
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|> assign(:record, record)}
end
@@ -88,8 +88,42 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
{:noreply, assign(socket, :record, record)}
end
defp page_title(:show), do: gettext("Show")
defp page_title(:edit), do: gettext("Edit")
def page_title(:show, record) do
artist_names = Enum.map(record.artists, & &1.name)
Enum.join(
[
Enum.join(artist_names, ", "),
"-",
record.title,
"·",
gettext("Details"),
"·",
gettext("Collection")
],
" "
)
end
def page_title(action, record) do
artist_names = Enum.map(record.artists, & &1.name)
Enum.join(
[
Enum.join(artist_names, ", "),
"-",
record.title,
"·",
title_segment(action),
"·",
gettext("Collection")
],
" "
)
end
defp title_segment(:show), do: gettext("Show")
defp title_segment(:edit), do: gettext("Edit")
defp musicbrainz_url(record) do
"https://musicbrainz.org/release-group/#{record.musicbrainz_id}"
@@ -4,6 +4,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
alias MusicLibrary.Wishlist
alias MusicLibrary.Records
alias MusicLibraryWeb.WishlistLive.Show
@default_records_list_params %{
query: "",
@@ -38,7 +39,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
end
socket
|> assign(:page_title, gettext("Import from MusicBrainz"))
|> assign(:page_title, gettext("Import from MusicBrainz · Wishlist"))
|> assign(:record, nil)
end
@@ -51,9 +52,11 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
socket
end
record = Records.get_record!(id)
socket
|> assign(:page_title, gettext("Edit"))
|> assign(:record, Records.get_record!(id))
|> assign(:page_title, Show.page_title(socket.assigns.live_action, record))
|> assign(:record, record)
end
defp apply_action(socket, :index, params) do
@@ -26,11 +26,13 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
@impl true
def handle_params(%{"id" => id}, _, socket) do
record = Records.get_record!(id)
{:noreply,
socket
|> assign(:nav_section, :wishlist)
|> assign(:page_title, page_title(socket.assigns.live_action))
|> assign(:record, Records.get_record!(id))}
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|> assign(:record, record)}
end
@impl true
@@ -86,8 +88,25 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
{:noreply, assign(socket, :record, record)}
end
defp page_title(:show), do: gettext("Show")
defp page_title(:edit), do: gettext("Edit")
def page_title(action, record) do
artist_names = Enum.map(record.artists, & &1.name)
Enum.join(
[
Enum.join(artist_names, ", "),
"-",
record.title,
"·",
title_segment(action),
"·",
gettext("Wishlist")
],
" "
)
end
defp title_segment(:show), do: gettext("Show")
defp title_segment(:edit), do: gettext("Edit")
defp musicbrainz_url(record) do
"https://musicbrainz.org/release-group/#{record.musicbrainz_id}"