feat: adds email as fallback for name in member details
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
carla 2026-01-06 16:43:13 +01:00
parent 74a2d07c24
commit b59a4ef61a
10 changed files with 212 additions and 10 deletions

View file

@ -43,7 +43,7 @@ defmodule MvWeb.MemberLive.Form do
<h1 class="text-2xl font-bold text-center flex-1">
<%= if @member do %>
{@member.first_name} {@member.last_name}
{MvWeb.MemberLive.Index.display_name(@member)}
<% else %>
{gettext("New Member")}
<% end %>

View file

@ -1165,6 +1165,62 @@ defmodule MvWeb.MemberLive.Index do
end
end
@doc """
Returns a display name for a member.
Combines first_name and last_name if available, otherwise falls back to email.
This ensures that members without names still have a meaningful display name.
## Examples
iex> member = %Member{first_name: "John", last_name: "Doe", email: "john@example.com"}
iex> display_name(member)
"John Doe"
iex> member = %Member{first_name: nil, last_name: nil, email: "john@example.com"}
iex> display_name(member)
"john@example.com"
iex> member = %Member{first_name: "John", last_name: nil, email: "john@example.com"}
iex> display_name(member)
"John"
"""
def display_name(member) do
name_parts =
[member.first_name, member.last_name]
|> Enum.reject(&blank?/1)
|> Enum.map(&String.trim/1)
|> Enum.join(" ")
if name_parts == "" do
member.email
else
name_parts
end
end
@doc """
Checks if a value is blank (nil, empty string, or only whitespace).
## Examples
iex> blank?(nil)
true
iex> blank?("")
true
iex> blank?(" ")
true
iex> blank?("John")
false
"""
def blank?(nil), do: true
def blank?(""), do: true
def blank?(value) when is_binary(value), do: String.trim(value) == ""
def blank?(_), do: false
# Public helper function to format dates for use in templates
def format_date(date), do: DateFormatter.format_date(date)

View file

@ -129,7 +129,12 @@
"""
}
>
{member.first_name}
{if MvWeb.MemberLive.Index.blank?(member.first_name) &&
MvWeb.MemberLive.Index.blank?(member.last_name) do
MvWeb.MemberLive.Index.display_name(member)
else
member.first_name
end}
</:col>
<:col
:let={member}

View file

@ -35,7 +35,7 @@ defmodule MvWeb.MemberLive.Show do
</.button>
<h1 class="text-2xl font-bold text-center flex-1">
{@member.first_name} {@member.last_name}
{MvWeb.MemberLive.Index.display_name(@member)}
</h1>
<.button variant="primary" navigate={~p"/members/#{@member}/edit?return_to=show"}>