0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-07 23:08:24 -05:00

Check for self references

This commit is contained in:
Florian Schroedl 2024-06-21 17:00:45 +02:00
parent 941fb041b6
commit 1dcdddb2db
2 changed files with 23 additions and 6 deletions

View file

@ -82,13 +82,15 @@
;; Value ;; Value
value (mf/use-var (or (:value token) "")) value (mf/use-var (or (:value token) ""))
resolved-value (mf/use-state (get-in tokens [(:id token) :resolved-value])) token-resolve-result (mf/use-state (get-in tokens [(:id token) :resolved-value]))
set-resolve-value (mf/use-callback set-resolve-value (mf/use-callback
(fn [token] (fn [token-or-err]
(when (:resolved-value token) (let [value (cond
(reset! resolved-value (:resolved-value token))))) (= token-or-err :error/token-self-reference) :error/token-self-reference
value-errors (mf/use-state nil) (= token-or-err :error/token-missing-reference) :error/token-missing-reference
on-update-value (sd/use-debonced-resolve-callback tokens set-resolve-value)] (:resolved-value token-or-err) (:resolved-value token-or-err))]
(reset! token-resolve-result value))))
on-update-value (sd/use-debonced-resolve-callback name token tokens set-resolve-value)]
;; on-submit (fn [e] ;; on-submit (fn [e]
;; (dom/prevent-default e) ;; (dom/prevent-default e)

View file

@ -23,6 +23,21 @@
;; Functions ------------------------------------------------------------------- ;; Functions -------------------------------------------------------------------
(defn token-self-reference? [token-name reference-string]
(let [escaped-name (str/replace token-name "." "\\.")
regex (-> (str "{" escaped-name "}")
(re-pattern))]
(re-find regex reference-string)))
(comment
(token-self-reference? {:name "some.value"} "{md} + {some.value}")
(token-self-reference? {:name "some.value"} "some.value")
(token-self-reference? {:name "some.value"} "{some|value}")
(token-self-reference? {:name "sm"} "{md} + {lg}")
(token-self-reference? {:name "sm"} "1")
(token-self-reference? {:name ""} "121")
nil)
(defn tokens->style-dictionary+ (defn tokens->style-dictionary+
"Resolves references and math expressions using StyleDictionary. "Resolves references and math expressions using StyleDictionary.
Returns a promise with the resolved dictionary." Returns a promise with the resolved dictionary."