diff --git a/common/src/app/common/files/changes.cljc b/common/src/app/common/files/changes.cljc index f055d76ec7..397a1a4aa0 100644 --- a/common/src/app/common/files/changes.cljc +++ b/common/src/app/common/files/changes.cljc @@ -405,24 +405,24 @@ [:type [:= :set-tokens-lib]] [:tokens-lib ::sm/any]]] - [:set-token-set - [:map {:title "SetTokenSetChange"} - [:type [:= :set-token-set]] - [:set-id ::sm/uuid] - [:group? :boolean] - [:token-set [:maybe ctob/schema:token-set-attrs]]]] + [:set-token-set + [:map {:title "SetTokenSetChange"} + [:type [:= :set-token-set]] + [:set-id ::sm/uuid] + [:group? :boolean] + [:token-set [:maybe ctob/schema:token-set-attrs]]]] - [:set-token - [:map {:title "SetTokenChange"} - [:type [:= :set-token]] - [:set-name :string] - [:token-id ::sm/uuid] - [:token [:maybe ctob/schema:token-attrs]]]] + [:set-token + [:map {:title "SetTokenChange"} + [:type [:= :set-token]] + [:set-name :string] + [:token-id ::sm/uuid] + [:token [:maybe ctob/schema:token-attrs]]]] - [:set-base-font-size - [:map {:title "ModBaseFontSize"} - [:type [:= :set-base-font-size]] - [:base-font-size :string]]]]) + [:set-base-font-size + [:map {:title "ModBaseFontSize"} + [:type [:= :set-base-font-size]] + [:base-font-size :string]]]]) (def schema:changes [:sequential {:gen/max 5 :gen/min 1} schema:change]) @@ -982,7 +982,7 @@ (update data :tokens-lib (fn [lib] (let [lib' (ctob/ensure-tokens-lib lib) - set (ctob/set-by-name lib' set-name)] ;; FIXME: remove this when set-token uses set-id + set (ctob/get-set-by-name lib' set-name)] ;; FIXME: remove this when set-token uses set-id (cond (not token) (ctob/delete-token-from-set lib' set-name token-id) @@ -999,14 +999,14 @@ (update data :tokens-lib (fn [lib] (let [lib' (ctob/ensure-tokens-lib lib) - set (ctob/set-by-id lib' set-id)] ;; FIXME: remove this when set-token-set uses set-id + set (ctob/get-set lib' set-id)] ;; FIXME: remove this when set-token-set uses set-id (cond (not token-set) (if group? (ctob/delete-set-group lib' (ctob/get-name set)) ;; FIXME: move to a separate change (ctob/delete-set lib' (ctob/get-name set))) - (not (ctob/set-by-id lib' set-id)) + (not (ctob/get-set lib' set-id)) (ctob/add-set lib' (ctob/make-token-set token-set)) :else diff --git a/common/src/app/common/files/changes_builder.cljc b/common/src/app/common/files/changes_builder.cljc index 62f6823ff8..8a91b6b2c7 100644 --- a/common/src/app/common/files/changes_builder.cljc +++ b/common/src/app/common/files/changes_builder.cljc @@ -885,7 +885,7 @@ (assert-library! changes) (let [library-data (::library-data (meta changes)) prev-token (some-> (get library-data :tokens-lib) - (ctob/set-by-name set-name) + (ctob/get-set-by-name set-name) (ctob/get-token token-id))] (-> changes (update :redo-changes conj {:type :set-token diff --git a/common/src/app/common/types/tokens_lib.cljc b/common/src/app/common/types/tokens_lib.cljc index e1f6a02e7d..c8dcd83e2b 100644 --- a/common/src/app/common/types/tokens_lib.cljc +++ b/common/src/app/common/types/tokens_lib.cljc @@ -213,12 +213,11 @@ ;; === Token Set (defprotocol ITokenSet - (token-by-id [_ id] "get a token by its id") - (token-by-name [_ id] "get a token by its name") (add-token [_ token] "add a token at the end of the list") (update-token [_ id f] "update a token in the list") (delete-token [_ id] "delete a token from the list") - (get-token [_ id] "return token by id") + (get-token [_ id] "get a token by its id") + (get-token-by-name [_ id] "get a token by its name") (get-tokens [_] "return an ordered sequence of all tokens in the set") (get-tokens-map [_] "return a map of tokens in the set, indexed by token-name")) @@ -287,13 +286,6 @@ tokens)) ITokenSet - (token-by-id [_ id] - (some #(when (= (:id %) id) %) ;; TODO: this will be made in an efficient way when - (vals tokens))) ;; we refactor the tokens lib internal structure - - (token-by-name [_ name] - (get tokens name)) - (add-token [_ token] (let [token (check-token token)] (TokenSet. id @@ -303,7 +295,7 @@ (assoc tokens (:name token) token)))) (update-token [this token-id f] - (if-let [token (token-by-id this token-id)] + (if-let [token (get-token this token-id)] (let [token' (-> (make-token (f token)) (assoc :modified-at (ct/now)))] (TokenSet. id @@ -318,15 +310,19 @@ this)) (delete-token [this token-id] - (let [token (token-by-id this token-id)] + (let [token (get-token this token-id)] (TokenSet. id name description (ct/now) (dissoc tokens (:name token))))) - (get-token [this id] ;; TODO: this is redundant, may be removed - (token-by-id this id)) + (get-token [_ id] + (some #(when (= (:id %) id) %) ;; TODO: this will be made in an efficient way when + (vals tokens))) ;; we refactor the tokens lib internal structure + + (get-token-by-name [_ name] + (get tokens name)) (get-tokens [_] (vals tokens)) @@ -557,8 +553,6 @@ Prefixed set path or ppath: a path wit added prefixes [\"G-some-group\", \"G-some-subgroup\"]. Prefixed set full path or pfpath: a full path wit prefixes [\"G-some-group\", \"G-some-subgroup\", \"S-some-set\"]. Prefixed set final name or pfname: a final name with prefix \"S-some-set\"." - (set-by-id [_ id] "get a set by its id") - (set-by-name [_ name] "get a set by its name") (add-set [_ token-set] "add a set to the library, at the end") (update-set [_ set-name f] "modify a set in the library") (delete-set-path [_ set-path] "delete a set in the library") @@ -573,7 +567,8 @@ (get-sets-at-path [_ path-str] "get an ordered sequence of sets at `path` in the library") (rename-set-group [_ from-path-str to-path-str] "renames set groups and all child set names from `from-path-str` to `to-path-str`") (get-ordered-set-names [_] "get an ordered sequence of all sets names in the library") - (get-set [_ set-name] "get one set looking for name")) + (get-set [_ id] "get a set looking by id") + (get-set-by-name [_ name] "get a set looking by name")) (def ^:private schema:token-set-node [:schema {:registry {::node @@ -950,7 +945,7 @@ (set-group-path-exists? [_ path] "if a set group at `path` exists") (add-token-in-set [_ set-id token] "add token to a set") (get-token-in-set [_ set-id token-id] "get token in a set") - (get-token-by-name [_ set-id token-name] "get token in a set searching by token name") + (get-token-in-set-by-name [_ set-id token-name] "get token in a set searching by token name") (update-token-in-set [_ set-id token-id f] "update a token in a set") (delete-token-from-set [_ set-id token-id] "delete a token from a set") (toggle-set-in-theme [_ group-name theme-name set-name] "toggle a set used / not used in a theme") @@ -980,14 +975,6 @@ Will return a value that matches this schema: (-write [this writter options] (json/-write (export-dtcg-json this) writter options))]) ITokenSets - (set-by-id [this id] - (some #(when (= (get-id %) id) %) ;; TODO: this will be made in an efficient way when - (get-sets this))) ;; we refactor the tokens lib internal structure - - (set-by-name [_ name] - (let [path (set-name->prefixed-full-path name)] - (get-in sets path))) - (add-set [_ token-set] (assert (token-set? token-set) "expected valid token-set") (let [path (get-set-prefixed-path token-set)] @@ -1186,8 +1173,13 @@ Will return a value that matches this schema: (set-count [this] (count (get-sets this))) - (get-set [this set-id] ;; TODO: this is redundant and should be removed - (set-by-id this set-id)) + (get-set [this id] + (some #(when (= (get-id %) id) %) ;; TODO: this will be made in an efficient way when + (get-sets this))) ;; we refactor the tokens lib internal structure + + (get-set-by-name [_ name] + (let [path (set-name->prefixed-full-path name)] + (get-in sets path))) ITokenThemes (add-theme [_ token-theme] @@ -1306,10 +1298,10 @@ Will return a value that matches this schema: (get-set set-id) (get-token token-id))) - (get-token-by-name [this set-id token-name] + (get-token-in-set-by-name [this set-id token-name] (some-> this (get-set set-id) - (token-by-name token-name))) + (get-token-by-name token-name))) (update-token-in-set [this set-name token-id f] (update-set this set-name #(update-token % token-id f))) @@ -1349,7 +1341,7 @@ Will return a value that matches this schema: all-set-names (get-ordered-set-names this) active-set-names (filter theme-set-names all-set-names) tokens (reduce (fn [tokens set-name] - (let [set (set-by-name this set-name)] + (let [set (get-set-by-name this set-name)] (merge tokens (get-tokens-map set)))) (d/ordered-map) active-set-names)] diff --git a/common/test/common_tests/types/tokens_lib_test.cljc b/common/test/common_tests/types/tokens_lib_test.cljc index f2dedb9687..82517ad553 100644 --- a/common/test/common_tests/types/tokens_lib_test.cljc +++ b/common/test/common_tests/types/tokens_lib_test.cljc @@ -406,7 +406,6 @@ (ctob/add-token-in-set "test-token-set" token) (ctob/add-token-in-set "not-existing-set" token)) - _ (prn "tokens-lib'" (datafy tokens-lib')) token-set (ctob/get-set tokens-lib (thi/id :test-token-set)) token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set)) token' (ctob/get-token token-set' (thi/id :token))] @@ -1282,20 +1281,20 @@ (let [json (-> (slurp "test/common_tests/types/data/tokens-single-set-legacy-example.json") (json/decode {:key-fn identity})) lib (ctob/parse-decoded-json json "single_set") - token-set (ctob/set-by-name lib "single_set")] + token-set (ctob/get-set-by-name lib "single_set")] (t/is (= '("single_set") (ctob/get-ordered-set-names lib))) (t/testing "token added" - (t/is (some? (ctob/get-token-by-name lib (ctob/get-id token-set) "color.red.100"))))))) + (t/is (some? (ctob/get-token-in-set-by-name lib (ctob/get-id token-set) "color.red.100"))))))) #?(:clj (t/deftest parse-single-set-dtcg-json (let [json (-> (slurp "test/common_tests/types/data/tokens-single-set-dtcg-example.json") (json/decode {:key-fn identity})) lib (ctob/parse-decoded-json json "single_set") - token-set (ctob/set-by-name lib "single_set")] + token-set (ctob/get-set-by-name lib "single_set")] (t/is (= '("single_set") (ctob/get-ordered-set-names lib))) (t/testing "token added" - (t/is (some? (ctob/get-token-by-name lib (ctob/get-id token-set) "color.red.100"))))))) + (t/is (some? (ctob/get-token-in-set-by-name lib (ctob/get-id token-set) "color.red.100"))))))) #?(:clj (t/deftest parse-multi-set-legacy-json @@ -1303,31 +1302,31 @@ (json/decode {:key-fn identity})) lib (ctob/parse-decoded-json json "") token-theme (ctob/get-theme lib "group-1" "theme-1") - core-set (ctob/set-by-name lib "core") - theme-set (ctob/set-by-name lib "theme")] + core-set (ctob/get-set-by-name lib "core") + theme-set (ctob/get-set-by-name lib "theme")] (t/is (= '("core" "light" "dark" "theme") (ctob/get-ordered-set-names lib))) (t/testing "set exists in theme" (t/is (= (:group token-theme) "group-1")) (t/is (= (:name token-theme) "theme-1")) (t/is (= (:sets token-theme) #{"light"}))) (t/testing "tokens exist in core set" - (t/is (tht/token-data-eq? (ctob/get-token-by-name lib (ctob/get-id core-set) "colors.red.600") + (t/is (tht/token-data-eq? (ctob/get-token-in-set-by-name lib (ctob/get-id core-set) "colors.red.600") {:name "colors.red.600" :type :color :value "#e53e3e" :description ""})) - (t/is (tht/token-data-eq? (ctob/get-token-by-name lib (ctob/get-id core-set) "spacing.multi-value") + (t/is (tht/token-data-eq? (ctob/get-token-in-set-by-name lib (ctob/get-id core-set) "spacing.multi-value") {:name "spacing.multi-value" :type :spacing :value "{dimension.sm} {dimension.xl}" :description "You can have multiple values in a single spacing token"})) - (t/is (tht/token-data-eq? (ctob/get-token-by-name lib (ctob/get-id theme-set) "button.primary.background") + (t/is (tht/token-data-eq? (ctob/get-token-in-set-by-name lib (ctob/get-id theme-set) "button.primary.background") {:name "button.primary.background" :type :color :value "{accent.default}" :description ""}))) (t/testing "invalid tokens got discarded" - (t/is (nil? (ctob/get-token-by-name lib (ctob/get-id theme-set) "boxShadow.default"))))))) + (t/is (nil? (ctob/get-token-in-set-by-name lib (ctob/get-id theme-set) "boxShadow.default"))))))) #?(:clj (t/deftest parse-multi-set-dtcg-json @@ -1335,31 +1334,31 @@ (json/decode {:key-fn identity})) lib (ctob/parse-decoded-json json "") token-theme (ctob/get-theme lib "group-1" "theme-1") - core-set (ctob/set-by-name lib "core") - theme-set (ctob/set-by-name lib "theme")] + core-set (ctob/get-set-by-name lib "core") + theme-set (ctob/get-set-by-name lib "theme")] (t/is (= '("core" "light" "dark" "theme") (ctob/get-ordered-set-names lib))) (t/testing "set exists in theme" (t/is (= (:group token-theme) "group-1")) (t/is (= (:name token-theme) "theme-1")) (t/is (= (:sets token-theme) #{"light"}))) (t/testing "tokens exist in core set" - (t/is (tht/token-data-eq? (ctob/get-token-by-name lib (ctob/get-id core-set) "colors.red.600") + (t/is (tht/token-data-eq? (ctob/get-token-in-set-by-name lib (ctob/get-id core-set) "colors.red.600") {:name "colors.red.600" :type :color :value "#e53e3e" :description ""})) - (t/is (tht/token-data-eq? (ctob/get-token-by-name lib (ctob/get-id core-set) "spacing.multi-value") + (t/is (tht/token-data-eq? (ctob/get-token-in-set-by-name lib (ctob/get-id core-set) "spacing.multi-value") {:name "spacing.multi-value" :type :spacing :value "{dimension.sm} {dimension.xl}" :description "You can have multiple values in a single spacing token"})) - (t/is (tht/token-data-eq? (ctob/get-token-by-name lib (ctob/get-id theme-set) "button.primary.background") + (t/is (tht/token-data-eq? (ctob/get-token-in-set-by-name lib (ctob/get-id theme-set) "button.primary.background") {:name "button.primary.background" :type :color :value "{accent.default}" :description ""}))) (t/testing "invalid tokens got discarded" - (t/is (nil? (ctob/get-token-by-name lib (ctob/get-id theme-set) "boxShadow.default"))))))) + (t/is (nil? (ctob/get-token-in-set-by-name lib (ctob/get-id theme-set) "boxShadow.default"))))))) #?(:clj (t/deftest parse-multi-set-dtcg-json-default-team @@ -1368,14 +1367,14 @@ lib (ctob/parse-decoded-json json "") themes (ctob/get-themes lib) first-theme (first themes) - dark-set (ctob/set-by-name lib "dark")] + dark-set (ctob/get-set-by-name lib "dark")] (t/is (= '("dark") (ctob/get-ordered-set-names lib))) (t/is (= 1 (count themes))) (t/testing "existing theme is default theme" (t/is (= (:group first-theme) "")) (t/is (= (:name first-theme) ctob/hidden-theme-name))) (t/testing "token exist in dark set" - (t/is (tht/token-data-eq? (ctob/get-token-by-name lib (ctob/get-id dark-set) "small") + (t/is (tht/token-data-eq? (ctob/get-token-in-set-by-name lib (ctob/get-id dark-set) "small") {:name "small" :value "8" :type :border-radius diff --git a/frontend/src/app/main/data/workspace/tokens/library_edit.cljs b/frontend/src/app/main/data/workspace/tokens/library_edit.cljs index ce45b32829..acaad5c13f 100644 --- a/frontend/src/app/main/data/workspace/tokens/library_edit.cljs +++ b/frontend/src/app/main/data/workspace/tokens/library_edit.cljs @@ -6,7 +6,6 @@ (ns app.main.data.workspace.tokens.library-edit (:require - [app.common.data :as d] [app.common.data.macros :as dm] [app.common.files.changes-builder :as pcb] [app.common.files.helpers :as cfh] @@ -23,8 +22,6 @@ [app.main.data.workspace.tokens.propagation :as dwtp] [app.util.i18n :refer [tr]] [beicon.v2.core :as rx] - [clojure.datafy :refer [datafy]] - [clojure.test :as ct] [potok.v2.core :as ptk])) (declare set-selected-token-set-name) @@ -153,7 +150,7 @@ (let [data (dsh/lookup-file-data state) tokens-lib (get data :tokens-lib) set-name (ctob/normalize-set-name set-name)] - (if (and tokens-lib (ctob/set-by-name tokens-lib set-name)) + (if (and tokens-lib (ctob/get-set-by-name tokens-lib set-name)) (rx/of (ntf/show {:content (tr "errors.token-set-already-exists") :type :toast :level :error @@ -184,7 +181,7 @@ name (ctob/normalize-set-name name (ctob/get-name token-set)) tokens-lib (get data :tokens-lib)] - (if (ctob/set-by-name tokens-lib name) + (if (ctob/get-set-by-name tokens-lib name) (rx/of (ntf/show {:content (tr "errors.token-set-already-exists") :type :toast :level :error diff --git a/frontend/test/frontend_tests/tokens/import_export_test.cljs b/frontend/test/frontend_tests/tokens/import_export_test.cljs index 130b7570ca..b369d4867c 100644 --- a/frontend/test/frontend_tests/tokens/import_export_test.cljs +++ b/frontend/test/frontend_tests/tokens/import_export_test.cljs @@ -24,8 +24,8 @@ (dwti/import-file-stream "core") (rx/subs! (fn [tokens-lib] (t/is (instance? ctob/TokensLib tokens-lib)) - (t/is (= "red" (-> (ctob/set-by-name tokens-lib "core") - (ctob/token-by-name "color") + (t/is (= "red" (-> (ctob/get-set-by-name tokens-lib "core") + (ctob/get-token-by-name "color") (:value)))) (done)))))))) @@ -96,7 +96,7 @@ color.value tries to reference missing, which is not defined."))) (->> (rx/of json) (dwti/import-file-stream "") (rx/subs! (fn [tokens-lib] - (let [token-set (ctob/set-by-name tokens-lib "core")] + (let [token-set (ctob/get-set-by-name tokens-lib "core")] (t/is (instance? ctob/TokensLib tokens-lib)) - (t/is (= "{missing}" (:value (ctob/get-token-by-name tokens-lib (ctob/get-id token-set) "color")))) + (t/is (= "{missing}" (:value (ctob/get-token-in-set-by-name tokens-lib (ctob/get-id token-set) "color")))) (done))))))))) diff --git a/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs b/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs index e41faab7f1..7a08c94e1e 100644 --- a/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs +++ b/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs @@ -43,7 +43,7 @@ (let [file' (ths/get-file-from-state new-state) tokens-lib' (toht/get-tokens-lib file') sets' (ctob/get-sets tokens-lib') - set-b' (ctob/set-by-name tokens-lib' "Set B")] + set-b' (ctob/get-set-by-name tokens-lib' "Set B")] (t/testing "Token lib contains two sets" (t/is (= (count sets') 2)) @@ -55,7 +55,7 @@ (let [file (setup-file-with-token-lib) store (ths/setup-store file) tokens-lib (toht/get-tokens-lib file) - set-a (ctob/set-by-name tokens-lib "Set A") + set-a (ctob/get-set-by-name tokens-lib "Set A") events [(dwtl/update-token-set (ctob/rename set-a "Set A updated") "Set A updated")]] @@ -65,7 +65,7 @@ (let [file' (ths/get-file-from-state new-state) tokens-lib' (toht/get-tokens-lib file') sets' (ctob/get-sets tokens-lib') - set-a' (ctob/set-by-name tokens-lib' "Set A updated")] + set-a' (ctob/get-set-by-name tokens-lib' "Set A updated")] (t/testing "Set has been renamed" (t/is (= (count sets') 1))