livebook/lib/livebook_web/live/user_helpers.ex

70 lines
1.6 KiB
Elixir
Raw Normal View History

defmodule LivebookWeb.UserHelpers do
2023-02-23 02:34:54 +08:00
use LivebookWeb, :html
@doc """
Renders user avatar.
## Examples
<.user_avatar user={@user} class="h-20 w-20" text_class="text-3xl" />
2023-02-23 02:34:54 +08:00
"""
2023-02-23 02:34:54 +08:00
attr :user, Livebook.Users.User, required: true
attr :class, :string, default: "w-full h-full"
attr :text_class, :string, default: nil
2023-02-23 02:34:54 +08:00
def user_avatar(assigns) do
~H"""
2022-08-02 21:51:02 +08:00
<div
2023-02-23 02:34:54 +08:00
class={["rounded-full flex items-center justify-center", @class]}
style={"background-color: #{@user.hex_color}"}
2022-08-02 21:51:02 +08:00
aria-hidden="true"
>
2023-02-23 02:34:54 +08:00
<div class={["text-gray-100 font-semibold", @text_class]}>
<%= avatar_text(@user.name) %>
</div>
</div>
"""
end
defp avatar_text(nil), do: "?"
defp avatar_text(name) do
name
|> String.split()
|> Enum.map(&String.at(&1, 0))
|> Enum.map(&String.upcase/1)
|> case do
[initial] -> initial
initials -> List.first(initials) <> List.last(initials)
end
end
@doc """
Renders the current user edit form in a modal.
## Examples
<.current_user_modal current_user={@current_user} />
2023-02-23 02:34:54 +08:00
"""
2023-02-23 02:34:54 +08:00
attr :current_user, Livebook.Users.User, required: true
def current_user_modal(assigns) do
~H"""
2023-03-08 05:19:16 +08:00
<.modal id="user-modal" width={:small}>
2022-08-02 21:51:02 +08:00
<.live_component
module={LivebookWeb.UserComponent}
id="user"
user={@current_user}
2022-08-02 21:51:02 +08:00
on_save={hide_current_user_modal()}
/>
</.modal>
"""
end
def show_current_user_modal(js \\ %JS{}), do: show_modal(js, "user-modal")
def hide_current_user_modal(js \\ %JS{}), do: hide_modal(js, "user-modal")
end