🐛 Fix some problems with error handling

This commit is contained in:
Eva Marco 2025-01-14 10:24:04 +01:00
parent dea866d3a3
commit 6eea633ca9
4 changed files with 24 additions and 9 deletions

View file

@ -321,8 +321,9 @@
children]])])) children]])]))
(mf/defc menu-tree (mf/defc menu-tree
[{:keys [selected-shapes submenu-offset submenu-direction type] :as context-data}] [{:keys [selected-shapes submenu-offset submenu-direction type errors] :as context-data}]
(let [entries (if (seq selected-shapes) (let [entries (if (and (not (some? errors))
(seq selected-shapes))
(if (some? type) (if (some? type)
(submenu-actions-selection-actions context-data) (submenu-actions-selection-actions context-data)
(selection-actions context-data)) (selection-actions context-data))
@ -343,7 +344,7 @@
:selected? selected?}])]))) :selected? selected?}])])))
(mf/defc token-context-menu-tree (mf/defc token-context-menu-tree
[{:keys [width direction] :as mdata}] [{:keys [width direction errors] :as mdata}]
(let [objects (mf/deref refs/workspace-page-objects) (let [objects (mf/deref refs/workspace-page-objects)
selected (mf/deref refs/selected-shapes) selected (mf/deref refs/selected-shapes)
selected-shapes (into [] (keep (d/getf objects)) selected) selected-shapes (into [] (keep (d/getf objects)) selected)
@ -354,6 +355,7 @@
[:& menu-tree {:submenu-offset width [:& menu-tree {:submenu-offset width
:submenu-direction direction :submenu-direction direction
:token token :token token
:errors errors
:selected-token-set-path selected-token-set-path :selected-token-set-path selected-token-set-path
:selected-shapes selected-shapes}]])) :selected-shapes selected-shapes}]]))

View file

@ -82,6 +82,7 @@
(st/emit! (dt/show-token-context-menu (st/emit! (dt/show-token-context-menu
{:type :token {:type :token
:position (dom/get-client-position event) :position (dom/get-client-position event)
:errors (:errors token)
:token-name (:name token)})))) :token-name (:name token)}))))
on-toggle-open-click (mf/use-fn on-toggle-open-click (mf/use-fn
@ -120,6 +121,7 @@
[:> icon-button* {:on-click on-popover-open-click [:> icon-button* {:on-click on-popover-open-click
:variant "ghost" :variant "ghost"
:icon "add" :icon "add"
;; TODO: This needs translation
:aria-label (str "Add token: " title)}]] :aria-label (str "Add token: " title)}]]
(when open? (when open?
[:& cmm/asset-section-block {:role :content} [:& cmm/asset-section-block {:role :content}

View file

@ -174,6 +174,7 @@
[err] [err]
(let [[header-1 header-2 & errors] (str/split err "\n")] (let [[header-1 header-2 & errors] (str/split err "\n")]
(when (and (when (and
;; TODO: This needs translations
(= header-1 "Error: ") (= header-1 "Error: ")
(= header-2 "Reference Errors:")) (= header-2 "Reference Errors:"))
errors))) errors)))
@ -206,10 +207,11 @@
;; === Errors ;; === Errors
(defn humanize-errors [{:keys [errors value] :as _token}] (defn humanize-errors [{:keys [errors] :as token}]
(->> (map (fn [err] (->> (map (fn [err]
(case err (case (:error/code err)
:error.style-dictionary/missing-reference (str "Could not resolve reference token with the name: " value) ;; TODO: This needs translations
:error.style-dictionary/missing-reference (str "Could not resolve reference token with the name: " (:error/value err))
nil)) nil))
errors) errors)
(str/join "\n"))) (str/join "\n")))

View file

@ -7,6 +7,7 @@
[app.main.ui.ds.foundations.utilities.token.token-status :refer [token-status-icon*]] [app.main.ui.ds.foundations.utilities.token.token-status :refer [token-status-icon*]]
[app.main.ui.workspace.tokens.style-dictionary :as sd] [app.main.ui.workspace.tokens.style-dictionary :as sd]
[app.main.ui.workspace.tokens.token :as wtt] [app.main.ui.workspace.tokens.token :as wtt]
[app.util.dom :as dom]
[app.util.i18n :refer [tr]] [app.util.i18n :refer [tr]]
[cuerdas.core :as str] [cuerdas.core :as str]
[rumext.v2 :as mf])) [rumext.v2 :as mf]))
@ -21,6 +22,13 @@
(wtt/resolved-value-hex theme-token)) (wtt/resolved-value-hex theme-token))
color (or color (wtt/resolved-value-hex token)) color (or color (wtt/resolved-value-hex token))
on-click
(mf/use-callback
(mf/deps errors? on-click)
(fn [event]
(dom/stop-propagation event)
(when (and (not (seq errors)) on-click)
(on-click event))))
token-status-id (cond token-status-id (cond
half-applied half-applied
@ -35,14 +43,15 @@
:token-pill-invalid-applied (and full-applied errors?)) :token-pill-invalid-applied (and full-applied errors?))
:type "button" :type "button"
:title (cond :title (cond
errors? (sd/humanize-errors token) errors? (if (nil? theme-token)
(tr "workspace.token-set.not-active")
(sd/humanize-errors token))
:else (->> [(str "Token: " name) :else (->> [(str "Token: " name)
(tr "workspace.token.original-value" value) (tr "workspace.token.original-value" value)
(tr "workspace.token.resolved-value" resolved-value)] (tr "workspace.token.resolved-value" resolved-value)]
(str/join "\n"))) (str/join "\n")))
:on-click on-click :on-click on-click
:on-context-menu on-context-menu :on-context-menu on-context-menu}
:disabled errors?}
(cond (cond
errors? errors?
[:> icon* [:> icon*