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)}