@@ -10,6 +10,12 @@ defmodule PlausibleWeb.Live.RegisterForm do
1010 alias Plausible.Teams
1111 alias PlausibleWeb.Layouts
1212
13+ @ signup_error_categories % {
14+ name: "name" ,
15+ email: "email" ,
16+ password: "password"
17+ }
18+
1319 def mount ( params , _session , socket ) do
1420 socket =
1521 socket
@@ -50,6 +56,7 @@ defmodule PlausibleWeb.Live.RegisterForm do
5056 captcha_error: nil ,
5157 password_strength: Auth.User . password_strength ( changeset ) ,
5258 disable_submit: false ,
59+ signup_previous_error: nil ,
5360 trigger_submit: false ,
5461 heading: heading ,
5562 subtitle: subtitle
@@ -95,7 +102,7 @@ defmodule PlausibleWeb.Live.RegisterForm do
95102 id = "register-form "
96103 class = "flex flex-col gap-y-6 "
97104 action = { Routes . auth_path ( @ socket , :login ) }
98- onsubmit = { form_submit_event ( @ invitation ) }
105+ onsubmit = { form_submit_event ( @ invitation , @ signup_previous_error ) }
99106 phx-change = "validate "
100107 phx-submit = "register "
101108 phx-trigger-action = { @ trigger_submit }
@@ -172,11 +179,13 @@ defmodule PlausibleWeb.Live.RegisterForm do
172179 end
173180
174181 on_ee do
175- defp form_submit_event ( invitation ) do
176- "window.plausible('Signup#{ if invitation , do: " via invitation" } ')"
182+ defp form_submit_event ( invitation , previous_error ) do
183+ options = Jason . encode! ( % { "props" => % { "previous_error" => previous_error || "none" } } )
184+
185+ "window.plausible('Signup#{ if invitation , do: " via invitation" } ', #{ options } )"
177186 end
178187 else
179- defp form_submit_event ( _ ) , do: ""
188+ defp form_submit_event ( _ , _ ) , do: ""
180189 end
181190
182191 defp name_input ( assigns ) do
@@ -273,8 +282,10 @@ defmodule PlausibleWeb.Live.RegisterForm do
273282 end
274283
275284 defp captcha_failed ( socket ) do
285+ error = "Please complete the captcha to register"
286+
276287 socket
277- |> assign ( : captcha_error, "Please complete the captcha to register ")
288+ |> assign ( captcha_error: error , signup_previous_error: " captcha")
278289 |> PlausibleWeb.Components.Captcha . reset ( )
279290 end
280291
@@ -293,13 +304,23 @@ defmodule PlausibleWeb.Live.RegisterForm do
293304 { :error , changeset } ->
294305 socket =
295306 socket
296- |> assign ( form: to_form ( Map . put ( changeset , :action , :validate ) ) )
307+ |> assign (
308+ form: to_form ( Map . put ( changeset , :action , :validate ) ) ,
309+ signup_previous_error: signup_error ( changeset )
310+ )
297311 |> PlausibleWeb.Components.Captcha . reset ( )
298312
299313 { :noreply , socket }
300314 end
301315 end
302316
317+ defp signup_error ( changeset ) do
318+ case List . first ( changeset . errors ) do
319+ { field , _error } -> Map . get ( @ signup_error_categories , field , "unknown" )
320+ nil -> "unknown"
321+ end
322+ end
323+
303324 defp do_add_user ( user , opts ) do
304325 case Repo . insert ( user ) do
305326 { :ok , user } ->
0 commit comments