diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs index 2362d9c19..ef8eb85e3 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs @@ -26,6 +26,7 @@ [app.main.ui.icons :as i] [app.main.ui.workspace.tokens.core :as wtc] [app.main.ui.workspace.tokens.editable-select :refer [editable-select]] + [app.main.ui.workspace.tokens.style-dictionary :as sd] [app.util.dom :as dom] [app.util.i18n :as i18n :refer [tr]] [clojure.set :refer [rename-keys union]] @@ -98,7 +99,8 @@ selection-parents-ref (mf/use-memo (mf/deps ids) #(refs/parents-by-ids ids)) selection-parents (mf/deref selection-parents-ref) - tokens (mf/deref refs/workspace-tokens) + tokens (-> (mf/deref refs/workspace-tokens) + (sd/use-resolved-tokens)) tokens-by-type (mf/use-memo (mf/deps tokens) #(wtc/group-tokens-by-type tokens)) border-radius-tokens (:border-radius tokens-by-type) diff --git a/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs b/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs index b8dd86e2e..77e891b62 100644 --- a/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs @@ -2,6 +2,7 @@ (:require [app.main.refs :as refs] [promesa.core :as p] + [rumext.v2 :as mf] [shadow.resource])) (def StyleDictionary @@ -81,6 +82,20 @@ (when-let [workspace-tokens @refs/workspace-tokens] (resolve-tokens+ workspace-tokens))) +;; Hooks ----------------------------------------------------------------------- + +(defonce !tokens-cache (atom nil)) + +(defn use-resolved-tokens [tokens] + (let [tokens-state (mf/use-state (get @!tokens-cache tokens tokens))] + (mf/use-effect + (mf/deps tokens) + (fn [] + (p/let [resolved-tokens (resolve-tokens+ tokens)] + (reset! !tokens-cache resolved-tokens) + (reset! tokens-state resolved-tokens)))) + @tokens-state)) + ;; Testing --------------------------------------------------------------------- (defn tokens-studio-example []