From c777bf9e0ed371a55c42d8ef9437fae2f3ea5761 Mon Sep 17 00:00:00 2001 From: Gabriel Faria Date: Thu, 11 Dec 2025 21:04:54 +0000 Subject: [PATCH 1/2] feat: avatar component --- lib/yearbook_web/components/avatar.ex | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 lib/yearbook_web/components/avatar.ex diff --git a/lib/yearbook_web/components/avatar.ex b/lib/yearbook_web/components/avatar.ex new file mode 100644 index 0000000..e8c91e7 --- /dev/null +++ b/lib/yearbook_web/components/avatar.ex @@ -0,0 +1,59 @@ +defmodule YearbookWeb.Components.Avatar do + @moduledoc """ + Avatar Component. + """ + + use Phoenix.Component + + attr :src, :string, default: nil, doc: "The URL of the image to display." + + attr :size, :atom, + values: [:xs, :sm, :md, :lg, :xl], + default: :md, + doc: "The size of the avatars." + + attr :name, :string, doc: "The name of the user." + + def avatar(%{src: nil} = assigns) do + assigns = assigns |> assign(:size_classes, size_classes(assigns.size)) + ~H""" +
+ <%= get_initials(@name) %> +
+ """ + end + + def avatar(assigns) do + assigns = assigns |> assign(:size_classes, size_classes(assigns.size)) + ~H""" + {@name} + """ + end + + def size_classes(size) do + case size do + :xs -> "w-8 h-8 text-xs" + :sm -> "w-12 h-12 text-sm" + :md -> "w-16 h-16 text-base" + :lg -> "w-24 h-24 text-xl" + :xl -> "w-32 h-32 text-4xl" + end + end + + def get_initials(nil), do: "?" + def get_initials(name) do + parts = name |> String.split(" ", trim: true) |> Enum.reject(&(&1 == "")) + case parts do + [single] -> String.first(single) |> String.upcase() + _ -> + first = parts |> List.first() |> String.first() |> String.upcase() + last = parts |> List.last() |> String.first() |> String.upcase() + first <> last + end + end + +end From e32ceb97154c31cb968d636450a673ab523408ce Mon Sep 17 00:00:00 2001 From: Gabriel Faria Date: Thu, 11 Dec 2025 21:10:30 +0000 Subject: [PATCH 2/2] fix: formatting --- lib/yearbook_web/components/avatar.ex | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/yearbook_web/components/avatar.ex b/lib/yearbook_web/components/avatar.ex index e8c91e7..e0ccfb0 100644 --- a/lib/yearbook_web/components/avatar.ex +++ b/lib/yearbook_web/components/avatar.ex @@ -16,21 +16,23 @@ defmodule YearbookWeb.Components.Avatar do def avatar(%{src: nil} = assigns) do assigns = assigns |> assign(:size_classes, size_classes(assigns.size)) + ~H""" -
- <%= get_initials(@name) %> -
+
+ {get_initials(@name)} +
""" end def avatar(assigns) do assigns = assigns |> assign(:size_classes, size_classes(assigns.size)) + ~H""" - {@name} + {@name} """ end @@ -45,15 +47,18 @@ defmodule YearbookWeb.Components.Avatar do end def get_initials(nil), do: "?" + def get_initials(name) do parts = name |> String.split(" ", trim: true) |> Enum.reject(&(&1 == "")) + case parts do - [single] -> String.first(single) |> String.upcase() + [single] -> + String.first(single) |> String.upcase() + _ -> first = parts |> List.first() |> String.first() |> String.upcase() last = parts |> List.last() |> String.first() |> String.upcase() first <> last end end - end