0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-10 14:51:37 -05:00

Use active sets tokens for form

This commit is contained in:
Florian Schroedl 2024-08-21 15:36:40 +02:00
parent 6c6be35292
commit 8264da3a2a
2 changed files with 15 additions and 10 deletions

View file

@ -99,10 +99,10 @@ Token names should only contain letters and digits separated by . characters.")}
empty-input? (p/rejected nil) empty-input? (p/rejected nil)
direct-self-reference? (p/rejected :error/token-direct-self-reference) direct-self-reference? (p/rejected :error/token-direct-self-reference)
:else (let [token-id (or (:id token) (random-uuid)) :else (let [token-id (or (:id token) (random-uuid))
new-tokens (update tokens token-id merge {:id token-id new-tokens (update tokens token-name merge {:id token-id
:value input :value input
:name token-name})] :name token-name})]
(-> (sd/resolve-tokens+ new-tokens #_ {:debug? true}) (-> (sd/resolve-tokens+ new-tokens {:names-map? true})
(p/then (p/then
(fn [resolved-tokens] (fn [resolved-tokens]
(let [{:keys [errors resolved-value] :as resolved-token} (get resolved-tokens token-name)] (let [{:keys [errors resolved-value] :as resolved-token} (get resolved-tokens token-name)]
@ -139,11 +139,15 @@ Token names should only contain letters and digits separated by . characters.")}
timeout))))] timeout))))]
debounced-resolver-callback)) debounced-resolver-callback))
(defonce form-token-cache-atom (atom nil))
(mf/defc form (mf/defc form
{::mf/wrap-props false} {::mf/wrap-props false}
[{:keys [token token-type] :as _args}] [{:keys [token token-type] :as _args}]
(let [tokens (mf/deref refs/workspace-tokens) (let [tokens (mf/deref refs/get-active-theme-sets-tokens)
resolved-tokens (sd/use-resolved-tokens tokens) resolved-tokens (sd/use-resolved-tokens tokens {:names-map? true
:cache-atom form-token-cache-atom})
_ (js/console.log "resolved-tokens" resolved-tokens)
token-path (mf/use-memo token-path (mf/use-memo
(mf/deps (:name token)) (mf/deps (:name token))
#(wtt/token-name->path (:name token))) #(wtt/token-name->path (:name token)))

View file

@ -107,11 +107,12 @@
This hook will return the unresolved tokens as state until they are processed, This hook will return the unresolved tokens as state until they are processed,
then the state will be updated with the resolved tokens." then the state will be updated with the resolved tokens."
[tokens & {:keys [cache-atom] [tokens & {:keys [cache-atom _names-map?]
:or {cache-atom !tokens-cache}}] :or {cache-atom !tokens-cache}
:as config}]
(let [tokens-state (mf/use-state (get @cache-atom tokens))] (let [tokens-state (mf/use-state (get @cache-atom tokens))]
(mf/use-effect (mf/use-effect
(mf/deps tokens) (mf/deps tokens config)
(fn [] (fn []
(let [cached (get @cache-atom tokens)] (let [cached (get @cache-atom tokens)]
(cond (cond
@ -120,7 +121,7 @@
;; Get the cached entry ;; Get the cached entry
(some? cached) (reset! tokens-state cached) (some? cached) (reset! tokens-state cached)
;; No cached entry, start processing ;; No cached entry, start processing
:else (let [promise+ (resolve-tokens+ tokens)] :else (let [promise+ (resolve-tokens+ tokens config)]
(swap! cache-atom assoc tokens promise+) (swap! cache-atom assoc tokens promise+)
(p/then promise+ (fn [resolved-tokens] (p/then promise+ (fn [resolved-tokens]
(swap! cache-atom assoc tokens resolved-tokens) (swap! cache-atom assoc tokens resolved-tokens)