52 lines
1.5 KiB
Elixir
52 lines
1.5 KiB
Elixir
defmodule MixerWeb.AuthComponents do
|
||
@moduledoc """
|
||
Extra components injected into AshAuthentication.Phoenix forms.
|
||
"""
|
||
|
||
use Phoenix.Component
|
||
|
||
@doc """
|
||
Renders a username input field inside the password registration form.
|
||
|
||
Receives `form` (an `AshPhoenix.Form`) as an assign via the
|
||
`register_extra_component` override.
|
||
"""
|
||
def username_register_field(assigns) do
|
||
field = assigns.form[:username]
|
||
|
||
assigns =
|
||
assigns
|
||
|> assign(:field_id, field.id)
|
||
|> assign(:field_name, field.name)
|
||
|> assign(:field_value, field.value || "")
|
||
|> assign(:field_errors, field.errors)
|
||
|
||
~H"""
|
||
<div class="mt-2 mb-2">
|
||
<label for={@field_id} class="block text-sm font-medium text-base-content mb-1">
|
||
Username
|
||
</label>
|
||
<div class="flex">
|
||
<span class="input rounded-r-none border-r-0 text-base-content/50 select-none">@</span>
|
||
<input
|
||
type="text"
|
||
id={@field_id}
|
||
name={@field_name}
|
||
value={@field_value}
|
||
class={"input w-full rounded-l-none #{if @field_errors != [], do: "input-error", else: ""}"}
|
||
placeholder="your_handle"
|
||
autocomplete="username"
|
||
required
|
||
/>
|
||
</div>
|
||
<p :if={@field_errors != []} class="mt-1 text-xs text-error">
|
||
{@field_errors |> List.first() |> elem(0)}
|
||
</p>
|
||
<p :if={@field_errors == []} class="mt-1 text-xs text-base-content/50">
|
||
3–30 characters · letters, numbers, underscores
|
||
</p>
|
||
</div>
|
||
"""
|
||
end
|
||
end
|