diff --git a/frontend/src/app/main/ui/auth/register.cljs b/frontend/src/app/main/ui/auth/register.cljs
index 1b8fc40f10..b8130e8361 100644
--- a/frontend/src/app/main/ui/auth/register.cljs
+++ b/frontend/src/app/main/ui/auth/register.cljs
@@ -21,7 +21,6 @@
[app.util.i18n :as i18n :refer [tr]]
[app.util.storage :as storage]
[beicon.v2.core :as rx]
- [cuerdas.core :as str]
[rumext.v2 :as mf]))
;; --- PAGE: Register
@@ -81,42 +80,40 @@
(mf/use-fn
(fn [cause]
(reset! submitted? false)
- (let [{:keys [type code] :as edata} (ex-data cause)]
+ (let [{:keys [type code] :as edata} (ex-data cause)
+
+ set-field-error!
+ (fn [field message]
+ (swap! form assoc-in [:extra-errors field] message)
+ (swap! form assoc-in [:touched field] true))]
+
(condp = [type code]
[:restriction :email-does-not-match-invitation]
- (st/emit! (ntf/error (tr "errors.email-does-not-match-invitation")))
+ (set-field-error! :email {:message (tr "errors.email-does-not-match-invitation")})
[:restriction :registration-disabled]
- (st/emit! (ntf/error (tr "errors.registration-disabled")))
+ (set-field-error! :email {:message (tr "errors.registration-disabled")})
[:restriction :email-domain-is-not-allowed]
- (st/emit! (ntf/error (tr "errors.email-domain-not-allowed")))
+ (set-field-error! :email {:message (tr "errors.email-domain-not-allowed")})
[:restriction :email-has-permanent-bounces]
- (st/emit! (ntf/error (tr "errors.email-has-permanent-bounces" (:email edata))))
+ (set-field-error! :email {:message (tr "errors.email-has-permanent-bounces" (:email edata))})
[:restriction :email-has-complaints]
- (st/emit! (ntf/error (tr "errors.email-has-permanent-bounces" (:email edata))))
+ (set-field-error! :email {:message (tr "errors.email-has-permanent-bounces" (:email edata))})
[:validation :email-already-exists]
- (st/emit! (ntf/error (tr "errors.email-already-exists")))
+ (set-field-error! :email {:message (tr "errors.email-already-exists")})
[:validation :email-as-password]
- (st/emit! (ntf/error (tr "errors.email-as-password")))
+ (set-field-error! :password {:message (tr "errors.email-as-password")})
[:validation :weak-password]
- (let [details (:details edata)
- items (when (seq details)
- (->> details
- (map #(str "
" (tr %) ""))
- (str/join "")))
- detail (when items
- (str ""))]
- (st/emit! (ntf/show {:content (tr "errors.weak-password")
- :detail detail
- :is-html true
- :type :toast
- :level :error})))
+ (let [options (when (seq (:details edata))
+ (mapv tr (:details edata)))]
+ (set-field-error! :password {:message (tr "errors.weak-password")
+ :options options}))
(do
(when-let [explain (get edata :explain)]
@@ -128,7 +125,7 @@
(mf/deps on-success-callback)
(fn [params]
(if (fn? on-success-callback)
- (on-success-callback (:email params))
+ (on-success-callback params)
(cond
(some? (:invitation-token params))
(let [token (:invitation-token params)]
diff --git a/frontend/src/app/main/ui/static.cljs b/frontend/src/app/main/ui/static.cljs
index dfa1bacfce..b9174d7172 100644
--- a/frontend/src/app/main/ui/static.cljs
+++ b/frontend/src/app/main/ui/static.cljs
@@ -125,13 +125,22 @@
success-register
(mf/use-fn
(fn [data]
- (reset! register-token (:token data))
- (reset! current-section :register-validate)))
+ (cond
+ (:invitation-token data)
+ (st/emit! (rt/nav :auth-verify-token {:token (:invitation-token data)}))
+
+ (:is-active data)
+ (st/emit! (rt/reload true))
+
+ :else
+ (do
+ (reset! user-email (:email data))
+ (reset! current-section :register-email-sent)))))
register-email-sent
(mf/use-fn
- (fn [email]
- (reset! user-email email)
+ (fn [data]
+ (reset! user-email (if (string? data) data (:email data)))
(reset! current-section :register-email-sent)))
recovery-email-sent
diff --git a/frontend/src/app/main/ui/viewer/login.cljs b/frontend/src/app/main/ui/viewer/login.cljs
index 6ede841b73..a0fc4c6bb5 100644
--- a/frontend/src/app/main/ui/viewer/login.cljs
+++ b/frontend/src/app/main/ui/viewer/login.cljs
@@ -9,6 +9,7 @@
(:require
[app.common.logging :as log]
[app.main.data.modal :as modal]
+ [app.main.router :as rt]
[app.main.store :as st]
[app.main.ui.auth.login :refer [login-dialog*]]
[app.main.ui.auth.recovery-request :refer [recovery-request-page*]]
@@ -68,8 +69,17 @@
success-register
(fn [data]
- (reset! register-token (:token data))
- (set-current-section :register-validate))]
+ (cond
+ (:invitation-token data)
+ (st/emit! (rt/nav :auth-verify-token {:token (:invitation-token data)}))
+
+ (:is-active data)
+ (st/emit! (modal/hide))
+
+ :else
+ (do
+ (reset! user-email (:email data))
+ (set-current-section :email-sent))))]
[:div {:class (stl/css :modal-overlay)}
[:div {:class (stl/css :modal-container)}