Packages
livebook
0.19.4
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook_web/components/user_components.ex
defmodule LivebookWeb.UserComponents do
use LivebookWeb, :html
@doc """
Renders user avatar.
## Examples
<.user_avatar user={@user} class="h-20 w-20" text_class="text-3xl" />
"""
attr :user, Livebook.Users.User, required: true
attr :class, :string, default: "w-full h-full"
attr :text_class, :string, default: nil
def user_avatar(%{user: %{avatar_url: nil}} = assigns) do
~H"""
<.avatar_text class={@class} user={@user} text_class={@text_class} />
"""
end
def user_avatar(assigns) do
~H"""
<object
data={@user.avatar_url}
type="image/png"
class={["rounded-full flex items-center justify-center", @class]}
aria-hidden="true"
>
<.avatar_text class={@class} user={@user} text_class={@text_class} />
</object>
"""
end
defp avatar_text(assigns) do
~H"""
<div
class={["rounded-full flex items-center justify-center", @class]}
style={"background-color: #{@user.hex_color}"}
aria-hidden="true"
>
<div class={["text-gray-100 font-semibold", @text_class]}>
{initials(@user.name)}
</div>
</div>
"""
end
defp initials(nil), do: "?"
defp initials(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} />
"""
attr :current_user, Livebook.Users.User, required: true
def current_user_modal(assigns) do
~H"""
<.modal id="user-modal" width="small">
<.live_component
module={LivebookWeb.UserComponent}
id="user"
user={@current_user}
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