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 (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
(fn [token]
(when (:resolved-value token)
(reset! resolved-value (:resolved-value token)))))
value-errors (mf/use-state nil)
on-update-value (sd/use-debonced-resolve-callback tokens set-resolve-value)]
(fn [token-or-err]
(let [value (cond
(= token-or-err :error/token-self-reference) :error/token-self-reference
(= token-or-err :error/token-missing-reference) :error/token-missing-reference
(: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]
;; (dom/prevent-default e)

View file

@ -23,6 +23,21 @@
;; 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+
"Resolves references and math expressions using StyleDictionary.
Returns a promise with the resolved dictionary."