From fbaf8ac63e3542dfb2799cbbded0a6a5aabce590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Fri, 12 Jun 2026 09:58:23 +0200 Subject: [PATCH] wip --- common/src/app/common/files/tokens.cljc | 18 +++++++- common/src/app/common/types/file.cljc | 9 ++-- common/src/app/common/types/token_status.cljc | 44 +++++------------- .../test/common_tests/files/tokens_test.cljc | 31 +++++++++++++ .../common_tests/types/token_status_test.cljc | 45 ++----------------- 5 files changed, 67 insertions(+), 80 deletions(-) diff --git a/common/src/app/common/files/tokens.cljc b/common/src/app/common/files/tokens.cljc index c09e06a53d..1efaaa75c5 100644 --- a/common/src/app/common/files/tokens.cljc +++ b/common/src/app/common/files/tokens.cljc @@ -379,6 +379,22 @@ ;; Tokens status +(defn make-token-status-from-lib + "Make a TokenStatus from a TokensLib, activating the themes and sets + marked as active in the library (to migrate from legacy files)." + [tokens-lib] + (assert (ctob/tokens-lib? tokens-lib) "expected valid tokens-lib") + (let [active-themes (into #{} + (comp (map :id) + (filter #(not= % ctob/hidden-theme-id))) + (ctob/get-active-themes tokens-lib)) + active-sets (into #{} + (comp (map #(ctob/get-set-by-name tokens-lib %)) + (map ctob/get-id)) + (ctob/get-active-themes-set-names tokens-lib))] + (ctos/make-token-status :active-themes active-themes + :active-sets active-sets))) + (defn set-theme-status [token-status tokens-lib theme-id status] (assert (ctos/token-status? token-status) "expected valid token-status") @@ -386,5 +402,5 @@ (assert (uuid? theme-id) "expected valid theme-id") (assert (boolean? status) "expected boolean status") (if (ctob/get-theme tokens-lib theme-id) - (ctos/set-theme-status token-status tokens-lib theme-id status) + (ctos/set-theme-status token-status theme-id status) token-status)) \ No newline at end of file diff --git a/common/src/app/common/types/file.cljc b/common/src/app/common/types/file.cljc index 48c48ae531..81ac15a584 100644 --- a/common/src/app/common/types/file.cljc +++ b/common/src/app/common/types/file.cljc @@ -11,6 +11,7 @@ [app.common.features :as cfeat] [app.common.files.defaults :refer [version]] [app.common.files.helpers :as cfh] + [app.common.files.tokens :as cfo] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] [app.common.geom.shapes.tree-seq :as gsts] @@ -203,7 +204,7 @@ [file-data] (if (and (some? (:tokens-lib file-data)) (nil? (:token-status file-data))) ;; TODO: remove this when we deprecate old-style files without token-status - (assoc file-data :token-status (ctos/make-token-status-from-lib (:tokens-lib file-data))) + (assoc file-data :token-status (cfo/make-token-status-from-lib (:tokens-lib file-data))) (-> file-data (update :tokens-lib #(or % (ctob/make-tokens-lib))) (update :token-status #(or % (ctos/make-token-status)))))) @@ -326,7 +327,7 @@ [file-data] (if (and (some? (:tokens-lib file-data)) (nil? (:token-status file-data))) ;; TODO: remove this when we deprecate old-style files without token-status - (ctos/make-token-status-from-lib (:tokens-lib file-data)) + (cfo/make-token-status-from-lib (:tokens-lib file-data)) (:token-status file-data))) (defn update-tokens-lib @@ -337,9 +338,9 @@ (defn update-token-status "Update the token-status inside file-data through a callback function. - The function will receive the tokens status, the tokens lib and the rest of args." + The function will receive the tokens status and the rest of args." [file-data f & args] - (d/update-when file-data :token-status #(apply f % (get-tokens-lib file-data) args))) + (d/update-when file-data :token-status #(apply f % args))) ;; Asset helpers (defn find-component-file diff --git a/common/src/app/common/types/token_status.cljc b/common/src/app/common/types/token_status.cljc index 09a5461325..bc5a4db3b7 100644 --- a/common/src/app/common/types/token_status.cljc +++ b/common/src/app/common/types/token_status.cljc @@ -11,7 +11,6 @@ [app.common.schema :as sm] [app.common.schema.generators :as sg] [app.common.transit :as t] - [app.common.types.tokens-lib :as ctob] [clojure.core.protocols :as cp] [clojure.datafy :refer [datafy]] [clojure.pprint :as pp])) @@ -20,9 +19,9 @@ ;; in a tokens library. (defprotocol ITokenStatus - (activate-theme [_ tokens-lib theme-id] "Add a theme uuid to active themes") - (deactivate-theme [_ tokens-lib theme-id] "Remove a theme uuid from active themes") - (set-theme-status [_ tokens-lib theme-id status] "Add or remove a theme uuid to active themes") + (activate-theme [_ theme-id] "Add a theme uuid to active themes") + (deactivate-theme [_ theme-id] "Remove a theme uuid from active themes") + (set-theme-status [_ theme-id status] "Add or remove a theme uuid to active themes") (theme-active? [_ theme-id] "Check if a theme uuid is active") (active-themes-count [_] "Return the number of active themes") (activate-set [_ set-id] "Add a set uuid to active sets") @@ -43,27 +42,20 @@ (c.json/-write (datafy this) writter options))]) ITokenStatus - (activate-theme [this tokens-lib theme-id] - (assert (ctob/tokens-lib? tokens-lib) "expected valid tokens-lib") + (activate-theme [_ theme-id] (assert (uuid? theme-id) "expected valid theme-id") - (if (ctob/get-theme tokens-lib theme-id) - (TokenStatus. (conj active-themes theme-id) active-sets) - this)) + (TokenStatus. (conj active-themes theme-id) active-sets)) - (deactivate-theme [this tokens-lib theme-id] - (assert (ctob/tokens-lib? tokens-lib) "expected valid tokens-lib") + (deactivate-theme [_ theme-id] (assert (uuid? theme-id) "expected valid theme-id") - (if (ctob/get-theme tokens-lib theme-id) - (TokenStatus. (disj active-themes theme-id) active-sets) - this)) + (TokenStatus. (disj active-themes theme-id) active-sets)) - (set-theme-status [this tokens-lib theme-id status] - (assert (ctob/tokens-lib? tokens-lib) "expected valid tokens-lib") + (set-theme-status [this theme-id status] (assert (uuid? theme-id) "expected valid theme-id") (assert (boolean? status) "expected boolean status") (if status - (activate-theme this tokens-lib theme-id) - (deactivate-theme this tokens-lib theme-id))) + (activate-theme this theme-id) + (deactivate-theme this theme-id))) (theme-active? [_ theme-id] (assert (uuid? theme-id) "expected valid theme-id") @@ -133,22 +125,6 @@ (check-token-status-attrs) (map->TokenStatus))) -(defn make-token-status-from-lib - "Make a TokenStatus from a TokensLib, activating the themes and sets - marked as active in the library (to migrate from legacy files)." - [tokens-lib] - (assert (ctob/tokens-lib? tokens-lib) "expected valid tokens-lib") - (let [active-themes (into #{} - (comp (map :id) - (filter #(not= % ctob/hidden-theme-id))) - (ctob/get-active-themes tokens-lib)) - active-sets (into #{} - (comp (map #(ctob/get-set-by-name tokens-lib %)) - (map ctob/get-id)) - (ctob/get-active-themes-set-names tokens-lib))] - (make-token-status :active-themes active-themes - :active-sets active-sets))) - ;; === Pretty-print for debugging === (defmethod pp/simple-dispatch TokenStatus [^TokenStatus obj] diff --git a/common/test/common_tests/files/tokens_test.cljc b/common/test/common_tests/files/tokens_test.cljc index 3bf0ce8189..8d9dafed6c 100644 --- a/common/test/common_tests/files/tokens_test.cljc +++ b/common/test/common_tests/files/tokens_test.cljc @@ -86,6 +86,37 @@ {:applied-tokens {:x "a"}}] #{:y}))))) +;; Make TokenStatus from a TokensLib (to migrate from legacy files) +(t/deftest make-token-status-from-tokens-lib + (let [tokens-lib (-> (ctob/make-tokens-lib) + (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-a) + :name "set-a")) + (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-b) + :name "set-b")) + (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-c) + :name "set-c")) + (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-d) + :name "set-d")) + (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-1) + :name "theme-1" + :sets #{"set-a" "set-b"})) + (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-2) + :name "theme-2" + :sets #{"set-b"})) + (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-3) + :name "theme-3" + :sets #{"set-c" "set-d"})) + (ctob/set-active-themes #{"/theme-1" "/theme-2"})) + token-status (cfo/make-token-status-from-lib tokens-lib)] + (t/is (ctos/token-status? token-status)) + (t/is (ctos/check-token-status token-status)) + (t/is (= (ctos/active-themes-count token-status) 2)) + (t/is (ctos/theme-active? token-status (thi/id :theme-1))) + (t/is (ctos/theme-active? token-status (thi/id :theme-2))) + (t/is (= (ctos/active-set-count token-status) 2)) + (t/is (ctos/set-active? token-status (thi/id :set-a))) + (t/is (ctos/set-active? token-status (thi/id :set-b))))) + (t/deftest set-theme-status (t/testing "setting the status of a theme gets it activated or deactivated" (let [tokens-lib (-> (ctob/make-tokens-lib) diff --git a/common/test/common_tests/types/token_status_test.cljc b/common/test/common_tests/types/token_status_test.cljc index d59e687c05..aa1f763ad8 100644 --- a/common/test/common_tests/types/token_status_test.cljc +++ b/common/test/common_tests/types/token_status_test.cljc @@ -47,31 +47,25 @@ (t/deftest activate-theme (let [theme-id (uuid/next) - tokens-lib (-> (ctob/make-tokens-lib) - (ctob/add-theme (ctob/make-token-theme :id theme-id :name "theme"))) status (ctos/make-token-status) - status' (ctos/activate-theme status tokens-lib theme-id)] + status' (ctos/activate-theme status theme-id)] (t/is (not (ctos/theme-active? status theme-id))) (t/is (ctos/theme-active? status' theme-id)) (t/is (= (ctos/active-themes-count status') 1)))) (t/deftest deactivate-theme (let [theme-id (uuid/next) - tokens-lib (-> (ctob/make-tokens-lib) - (ctob/add-theme (ctob/make-token-theme :id theme-id :name "theme"))) status (ctos/make-token-status :active-themes #{theme-id}) - status' (ctos/deactivate-theme status tokens-lib theme-id)] + status' (ctos/deactivate-theme status theme-id)] (t/is (ctos/theme-active? status theme-id)) (t/is (not (ctos/theme-active? status' theme-id))) (t/is (= (ctos/active-themes-count status') 0)))) (t/deftest set-theme-status (let [theme-id (uuid/next) - tokens-lib (-> (ctob/make-tokens-lib) - (ctob/add-theme (ctob/make-token-theme :id theme-id :name "theme"))) status (ctos/make-token-status) - status' (ctos/set-theme-status status tokens-lib theme-id true) - status'' (ctos/set-theme-status status' tokens-lib theme-id false)] + status' (ctos/set-theme-status status theme-id true) + status'' (ctos/set-theme-status status' theme-id false)] (t/is (ctos/theme-active? status' theme-id)) (t/is (not (ctos/theme-active? status'' theme-id))) (t/is (= (ctos/active-themes-count status') 1)) @@ -146,34 +140,3 @@ (t/is (map? parsed)) (t/is (= [(str theme-id)] (:active-themes parsed))) (t/is (= [(str set-id)] (:active-sets parsed)))))) - -;; Make TokenStatus from a TokensLib (to migrate from legacy files) -(t/deftest make-token-status-from-tokens-lib - (let [tokens-lib (-> (ctob/make-tokens-lib) - (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-a) - :name "set-a")) - (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-b) - :name "set-b")) - (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-c) - :name "set-c")) - (ctob/add-set (ctob/make-token-set :id (thi/new-id! :set-d) - :name "set-d")) - (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-1) - :name "theme-1" - :sets #{"set-a" "set-b"})) - (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-2) - :name "theme-2" - :sets #{"set-b"})) - (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-3) - :name "theme-3" - :sets #{"set-c" "set-d"})) - (ctob/set-active-themes #{"/theme-1" "/theme-2"})) - token-status (ctos/make-token-status-from-lib tokens-lib)] - (t/is (ctos/token-status? token-status)) - (t/is (ctos/check-token-status token-status)) - (t/is (= (ctos/active-themes-count token-status) 2)) - (t/is (ctos/theme-active? token-status (thi/id :theme-1))) - (t/is (ctos/theme-active? token-status (thi/id :theme-2))) - (t/is (= (ctos/active-set-count token-status) 2)) - (t/is (ctos/set-active? token-status (thi/id :set-a))) - (t/is (ctos/set-active? token-status (thi/id :set-b)))))