🐛 Fix register flow from workspace url (#11756)

* 🐛 Fix show validation errors below inputs instead of showing a toast

* 🐛 Fix redirect to send email screen after a successful registration
This commit is contained in:
Luis de Dios 2026-09-23 18:18:14 +02:00 committed by GitHub
parent de6fb9d13e
commit 58b1acbb66
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 28 deletions

View File

@ -21,7 +21,6 @@
[app.util.i18n :as i18n :refer [tr]] [app.util.i18n :as i18n :refer [tr]]
[app.util.storage :as storage] [app.util.storage :as storage]
[beicon.v2.core :as rx] [beicon.v2.core :as rx]
[cuerdas.core :as str]
[rumext.v2 :as mf])) [rumext.v2 :as mf]))
;; --- PAGE: Register ;; --- PAGE: Register
@ -81,42 +80,40 @@
(mf/use-fn (mf/use-fn
(fn [cause] (fn [cause]
(reset! submitted? false) (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] (condp = [type code]
[:restriction :email-does-not-match-invitation] [: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] [: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] [: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] [: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] [: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] [: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] [: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] [:validation :weak-password]
(let [details (:details edata) (let [options (when (seq (:details edata))
items (when (seq details) (mapv tr (:details edata)))]
(->> details (set-field-error! :password {:message (tr "errors.weak-password")
(map #(str "<li>" (tr %) "</li>")) :options options}))
(str/join "")))
detail (when items
(str "<ul>" items "</ul>"))]
(st/emit! (ntf/show {:content (tr "errors.weak-password")
:detail detail
:is-html true
:type :toast
:level :error})))
(do (do
(when-let [explain (get edata :explain)] (when-let [explain (get edata :explain)]
@ -128,7 +125,7 @@
(mf/deps on-success-callback) (mf/deps on-success-callback)
(fn [params] (fn [params]
(if (fn? on-success-callback) (if (fn? on-success-callback)
(on-success-callback (:email params)) (on-success-callback params)
(cond (cond
(some? (:invitation-token params)) (some? (:invitation-token params))
(let [token (:invitation-token params)] (let [token (:invitation-token params)]

View File

@ -125,13 +125,22 @@
success-register success-register
(mf/use-fn (mf/use-fn
(fn [data] (fn [data]
(reset! register-token (:token data)) (cond
(reset! current-section :register-validate))) (: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 register-email-sent
(mf/use-fn (mf/use-fn
(fn [email] (fn [data]
(reset! user-email email) (reset! user-email (if (string? data) data (:email data)))
(reset! current-section :register-email-sent))) (reset! current-section :register-email-sent)))
recovery-email-sent recovery-email-sent

View File

@ -9,6 +9,7 @@
(:require (:require
[app.common.logging :as log] [app.common.logging :as log]
[app.main.data.modal :as modal] [app.main.data.modal :as modal]
[app.main.router :as rt]
[app.main.store :as st] [app.main.store :as st]
[app.main.ui.auth.login :refer [login-dialog*]] [app.main.ui.auth.login :refer [login-dialog*]]
[app.main.ui.auth.recovery-request :refer [recovery-request-page*]] [app.main.ui.auth.recovery-request :refer [recovery-request-page*]]
@ -68,8 +69,17 @@
success-register success-register
(fn [data] (fn [data]
(reset! register-token (:token data)) (cond
(set-current-section :register-validate))] (: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-overlay)}
[:div {:class (stl/css :modal-container)} [:div {:class (stl/css :modal-container)}