From c0140cde0e7e7f0f72df737b846159ccd4da2691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Wed, 3 Jun 2026 15:53:44 +0200 Subject: [PATCH] wip --- common/src/app/common/files/changes.cljc | 16 ++++++++--- .../src/app/common/files/changes_builder.cljc | 15 +++++++++++ frontend/src/app/main/data/helpers.cljs | 7 +++++ .../app/main/data/workspace/libraries.cljs | 27 ++++++++++--------- .../data/workspace/tokens/application.cljs | 3 +-- .../data/workspace/tokens/library_edit.cljs | 12 ++++----- .../data/workspace/tokens/propagation.cljs | 3 +-- .../data/workspace/tokens/selected_set.cljs | 12 +++------ frontend/src/app/main/refs.cljs | 2 +- frontend/src/app/plugins/library.cljs | 2 +- 10 files changed, 63 insertions(+), 36 deletions(-) diff --git a/common/src/app/common/files/changes.cljc b/common/src/app/common/files/changes.cljc index 8747099167..cf0f34a1c2 100644 --- a/common/src/app/common/files/changes.cljc +++ b/common/src/app/common/files/changes.cljc @@ -425,9 +425,15 @@ [:before-group [:maybe :boolean]]]] [:set-base-font-size - [:map {:title "ModBaseFontSize"} - [:type [:= :set-base-font-size]] - [:base-font-size :string]]]]) + [:map {:title "ModBaseFontSize"} + [:type [:= :set-base-font-size]] + [:base-font-size :string]]] + + [:set-tokens-file + [:map {:title "SetTokensFile"} + [:type [:= :set-tokens-file]] + [:file-id ::sm/uuid] + [:library-id [:maybe ::sm/uuid]]]]]) (def schema:changes [:sequential {:gen/max 5 :gen/min 1} schema:change]) @@ -1065,6 +1071,10 @@ [data {:keys [base-font-size]}] (ctf/set-base-font-size data base-font-size)) +(defmethod process-change :set-tokens-file + [data {:keys [library-id]}] + (assoc data :tokens-file library-id)) + ;; === Operations diff --git a/common/src/app/common/files/changes_builder.cljc b/common/src/app/common/files/changes_builder.cljc index eb7593e992..c7e8d71288 100644 --- a/common/src/app/common/files/changes_builder.cljc +++ b/common/src/app/common/files/changes_builder.cljc @@ -1084,6 +1084,21 @@ :base-font-size previous-font-size}) (apply-changes-local)))) +(defn set-tokens-file + [changes library-id] + (assert-file-data! changes) + (let [file-data (::file-data (meta changes)) + file-id (:id file-data) + prev-val (:tokens-file file-data)] + (-> changes + (update :redo-changes conj {:type :set-tokens-file + :file-id file-id + :library-id library-id}) + (update :undo-changes conj {:type :set-tokens-file + :file-id file-id + :library-id prev-val}) + (apply-changes-local)))) + ;; Misc changes (defn reorder-children diff --git a/frontend/src/app/main/data/helpers.cljs b/frontend/src/app/main/data/helpers.cljs index fd22d092a0..d106299572 100644 --- a/frontend/src/app/main/data/helpers.cljs +++ b/frontend/src/app/main/data/helpers.cljs @@ -37,6 +37,13 @@ ([state file-id] (dm/get-in state [:files file-id :data]))) +(defn lookup-tokens-lib + [state] + (let [current-file-data (lookup-file-data state) + tokens-file-id (or (:tokens-file current-file-data) (:id current-file-data)) + tokens-file-data (lookup-file-data state tokens-file-id)] + (:tokens-lib tokens-file-data))) + (defn get-page [fdata page-id] (dm/get-in fdata [:pages-index page-id])) diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index a3a93cf7cc..1356dbe180 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -1545,16 +1545,17 @@ (defn link-file-to-library [file-id library-id] - (ptk/reify ::attach-library + (ptk/reify ::link-file-to-library ev/Event (-data [_] - {::ev/name "attach-library" + {::ev/name "link-file-to-library" :file-id file-id :library-id library-id}) ptk/WatchEvent (watch [_ state _] - (let [libraries (:shared-files state) + (let [file-data (dm/get-in state [:files file-id :data]) + libraries (:shared-files state) library (get libraries library-id) variants-count (-> library :library-summary :variants count) @@ -1565,18 +1566,20 @@ (map first) set)] (rx/concat - (rx/merge - (->> (rp/cmd! :link-file-to-library {:file-id file-id :library-id library-id}) - (rx/merge-map (fn [libraries-to-load] - (as-> libraries-to-load $ - (remove loaded-libraries $) - (conj $ library-id) - (map #(load-library-file file-id %) $)))))) - (rx/of (ptk/reify ::attach-library-finished)) + (rx/of (dch/commit-changes (-> (pcb/empty-changes nil) + (pcb/with-file-data file-data) + (pcb/set-tokens-file library-id)))) + (->> (rp/cmd! :link-file-to-library {:file-id file-id :library-id library-id}) + (rx/merge-map (fn [libraries-to-load] + (as-> libraries-to-load $ + (remove loaded-libraries $) + (conj $ library-id) + (map #(load-library-file file-id %) $))))) + (rx/of (ptk/reify ::link-file-to-library-finished)) (when (pos? variants-count) (->> (rp/cmd! :get-library-usage {:file-id library-id}) (rx/map (fn [library-usage] - (ev/event {::ev/name "attach-library-variants" + (ev/event {::ev/name "link-file-to-library-variants" :file-id file-id :library-id library-id :variants-count variants-count diff --git a/frontend/src/app/main/data/workspace/tokens/application.cljs b/frontend/src/app/main/data/workspace/tokens/application.cljs index 15592b3b13..200177e274 100644 --- a/frontend/src/app/main/data/workspace/tokens/application.cljs +++ b/frontend/src/app/main/data/workspace/tokens/application.cljs @@ -675,8 +675,7 @@ (ctt/typography-token-keys (:type token)) (set/union attributes-to-remove ctt/typography-keys) (ctt/typography-keys (:type token)) (set/union attributes-to-remove ctt/typography-token-keys) :else attributes-to-remove)] - (when-let [tokens (some-> (dsh/lookup-file-data state) - (get :tokens-lib) + (when-let [tokens (some-> (dsh/lookup-tokens-lib state) (ctob/get-tokens-in-active-sets))] (->> (if (contains? cf/flags :tokenscript) (rx/of (ts/resolve-tokens tokens)) 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 d8be9688ae..238e5e3ee6 100644 --- a/frontend/src/app/main/data/workspace/tokens/library_edit.cljs +++ b/frontend/src/app/main/data/workspace/tokens/library_edit.cljs @@ -38,8 +38,7 @@ (defn get-tokens-lib [state] - (-> (dsh/lookup-file-data state) - (get :tokens-lib))) + (dsh/lookup-tokens-lib state)) (defn lookup-token-set ([state] @@ -231,8 +230,7 @@ ptk/WatchEvent (watch [it state _] (let [data (dsh/lookup-file-data state) - tokens-lib (get data :tokens-lib)] - + tokens-lib (dsh/lookup-tokens-lib state)] (if (and tokens-lib (ctob/get-theme tokens-lib (ctob/get-id token-theme))) (rx/of (ntf/show {:content (tr "errors.token-theme-already-exists") :type :toast @@ -249,8 +247,8 @@ (ptk/reify ::update-token-theme ptk/WatchEvent (watch [it state _] - (let [data (dsh/lookup-file-data state) - tokens-lib (get data :tokens-lib)] + (let [data (dsh/lookup-file-data state) + tokens-lib (dsh/lookup-tokens-lib state)] (if (and (not= id (ctob/get-id token-theme)) (ctob/get-theme tokens-lib (ctob/get-id token-theme))) (rx/of (ntf/show {:content (tr "errors.token-theme-already-exists") @@ -348,7 +346,7 @@ ptk/WatchEvent (watch [it state _] (let [data (dsh/lookup-file-data state) - tokens-lib (get data :tokens-lib) + tokens-lib (dsh/lookup-tokens-lib state) suffix (tr "workspace.tokens.duplicate-suffix")] (when-let [token-set (ctob/duplicate-set id tokens-lib {:suffix suffix})] diff --git a/frontend/src/app/main/data/workspace/tokens/propagation.cljs b/frontend/src/app/main/data/workspace/tokens/propagation.cljs index 3685e77970..5634020a04 100644 --- a/frontend/src/app/main/data/workspace/tokens/propagation.cljs +++ b/frontend/src/app/main/data/workspace/tokens/propagation.cljs @@ -188,8 +188,7 @@ (ptk/reify ::propagate-workspace-tokens ptk/WatchEvent (watch [_ state _] - (when-let [tokens-tree (-> (dsh/lookup-file-data state) - (get :tokens-lib) + (when-let [tokens-tree (-> (dsh/lookup-tokens-lib state) (ctob/get-tokens-in-active-sets))] (->> (if (contains? cf/flags :tokenscript) (rx/of (-> (ts/resolve-tokens tokens-tree) diff --git a/frontend/src/app/main/data/workspace/tokens/selected_set.cljs b/frontend/src/app/main/data/workspace/tokens/selected_set.cljs index 5189f03cab..ed31fc729a 100644 --- a/frontend/src/app/main/data/workspace/tokens/selected_set.cljs +++ b/frontend/src/app/main/data/workspace/tokens/selected_set.cljs @@ -13,26 +13,22 @@ (defn- get-selected-token-set-id [state] (or (get-in state [:workspace-tokens :selected-token-set-id]) - (some-> (dsh/lookup-file-data state) - (get :tokens-lib) + (some-> (dsh/lookup-tokens-lib state) (ctob/get-sets) (first) (ctob/get-id)))) (defn get-selected-token-set [state] (when-let [set-id (get-selected-token-set-id state)] - (some-> (dsh/lookup-file-data state) - (get :tokens-lib) + (some-> (dsh/lookup-tokens-lib state) (ctob/get-set set-id)))) (defn get-token-in-selected-set [state token-id] (when-let [set-id (get-selected-token-set-id state)] - (some-> (dsh/lookup-file-data state) - (get :tokens-lib) + (some-> (dsh/lookup-tokens-lib state) (ctob/get-token set-id token-id)))) (defn get-all-tokens-in-selected-set [state] (when-let [set-id (get-selected-token-set-id state)] - (some-> (dsh/lookup-file-data state) - (get :tokens-lib) + (some-> (dsh/lookup-tokens-lib state) (ctob/get-tokens set-id)))) diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index 791520efd9..e639f47a8b 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -458,7 +458,7 @@ ;; ---- Token refs (def tokens-lib - (l/derived :tokens-lib workspace-data)) + (l/derived dsh/lookup-tokens-lib st/state)) (def workspace-token-theme-groups (l/derived (d/nilf ctob/get-theme-groups) tokens-lib)) diff --git a/frontend/src/app/plugins/library.cljs b/frontend/src/app/plugins/library.cljs index c92823c1ad..17d6d8c188 100644 --- a/frontend/src/app/plugins/library.cljs +++ b/frontend/src/app/plugins/library.cljs @@ -1130,7 +1130,7 @@ (let [file-id (:current-file-id @st/state) library-id (uuid/parse library-id)] (->> st/stream - (rx/filter (ptk/type? ::dwl/attach-library-finished)) + (rx/filter (ptk/type? ::dwl/link-file-to-library-finished)) (rx/take 1) (rx/subs! #(resolve (library-proxy plugin-id library-id)) reject)) (st/emit! (-> (dwl/link-file-to-library file-id library-id)