diff --git a/lib/mixer/accounts/user.ex b/lib/mixer/accounts/user.ex index d5ba7ce..f5e0c29 100644 --- a/lib/mixer/accounts/user.ex +++ b/lib/mixer/accounts/user.ex @@ -434,6 +434,10 @@ defmodule Mixer.Accounts.User do identities do identity :unique_email, [:email] - identity :unique_username, [:username], nils_distinct?: true + identity :unique_username, [:username] do + eager_check_with Mixer.Accounts + message "is already taken" + nils_distinct? true + end end end diff --git a/lib/mixer_web/auth_overrides.ex b/lib/mixer_web/auth_overrides.ex index aafea61..5e0eb63 100644 --- a/lib/mixer_web/auth_overrides.ex +++ b/lib/mixer_web/auth_overrides.ex @@ -18,6 +18,6 @@ defmodule MixerWeb.AuthOverrides do # Inject the username field into the password registration form override AshAuthentication.Phoenix.Components.Password do - set :register_extra_component, &MixerWeb.AuthComponents.username_register_field/1 + set :register_extra_component, &MixerWeb.AuthComponents.username_field/1 end end diff --git a/lib/mixer_web/components/auth_components.ex b/lib/mixer_web/components/auth_components.ex index dbc93b1..9629ba7 100644 --- a/lib/mixer_web/components/auth_components.ex +++ b/lib/mixer_web/components/auth_components.ex @@ -11,7 +11,7 @@ defmodule MixerWeb.AuthComponents do Receives `form` (an `AshPhoenix.Form`) as an assign via the `register_extra_component` override. """ - def username_register_field(assigns) do + def username_field(assigns) do field = assigns.form[:username] assigns = @@ -27,7 +27,7 @@ defmodule MixerWeb.AuthComponents do Username
- {@field_errors |> List.first() |> elem(0)} -
-- 3–30 characters · letters, numbers, underscores +
+ {translate_error(error)}
""" end + + def translate_error({msg, opts}) do + if count = opts[:count] do + Gettext.dngettext(MixerWeb.Gettext, "errors", msg, msg, count, opts) + else + Gettext.dgettext(MixerWeb.Gettext, "errors", msg, opts) + end + end end diff --git a/lib/mixer_web/live/magic_sign_in_live.ex b/lib/mixer_web/live/magic_sign_in_live.ex index ebc0b46..a9d925f 100644 --- a/lib/mixer_web/live/magic_sign_in_live.ex +++ b/lib/mixer_web/live/magic_sign_in_live.ex @@ -37,7 +37,7 @@ defmodule MixerWeb.MagicSignInLive do domain = Info.authentication_domain!(resource) # Determine whether this user needs to pick a username - needs_username? = needs_username?(token, resource) + needs_username? = needs_username?(token, resource, domain) form = resource @@ -75,70 +75,26 @@ defmodule MixerWeb.MagicSignInLive do @spec render(Socket.assigns()) :: Rendered.t() def render(assigns) do ~H""" -- {form[:username].errors |> List.first() |> elem(0)} -
-- 3–30 characters · letters, numbers, underscores -
-