From 0418147e74ccc9391a2d768af871d84098d49541 Mon Sep 17 00:00:00 2001 From: Globalstar117 Date: Sat, 17 Jan 2026 02:08:39 +1100 Subject: [PATCH] :bug: Add error handler to token form validation to prevent crash When creating a token with a name that conflicts with existing hierarchical token names (e.g., 'accent-color' when 'accent-color.blue.dark' exists), the validation throws an error via rx/throw. However, the rx/subs! subscriber in generic_form.cljs had no error handler, causing an unhandled exception that resulted in an 'Internal Error' crash. This fix adds an error handler that: 1. Catches validation errors from the reactive stream 2. Uses humanize-errors to convert them to user-friendly messages 3. Displays the error in the form's extra-errors field Before: Crash with 'Internal Error' dialog After: Form shows validation error message Fixes #8110 --- This is a Gittensor contribution. gittensor:user:GlobalStar117 --- .../workspace/tokens/management/forms/generic_form.cljs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs b/frontend/src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs index c5ab6a428a..5348ee2d8a 100644 --- a/frontend/src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs @@ -18,6 +18,7 @@ [app.main.data.workspace.tokens.application :as dwta] [app.main.data.workspace.tokens.library-edit :as dwtl] [app.main.data.workspace.tokens.propagation :as dwtp] + [app.main.data.workspace.tokens.errors :as wte] [app.main.data.workspace.tokens.remapping :as remap] [app.main.refs :as refs] [app.main.store :as st] @@ -224,7 +225,12 @@ :description description})) (dwtl/toggle-token-path path) (dwtp/propagate-workspace-tokens) - (modal/hide!))))))))))] + (modal/hide!))))) + ;; Error handler: display validation errors in the form instead of crashing + (fn [{:keys [errors]}] + (let [error-messages (wte/humanize-errors errors) + error-message (first error-messages)] + (swap! form assoc-in [:extra-errors :value] {:message error-message}))))))))] [:> fc/form* {:class (stl/css :form-wrapper) :form form