From 6225f59ea0ceb53fdba46334f7bd9952dd6033cd Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Wed, 31 Jul 2024 14:04:00 +0200 Subject: [PATCH 01/18] Cleanup --- frontend/src/app/main/ui/workspace/tokens/changes.cljs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/changes.cljs b/frontend/src/app/main/ui/workspace/tokens/changes.cljs index 915216bef9..3ba521c39f 100644 --- a/frontend/src/app/main/ui/workspace/tokens/changes.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/changes.cljs @@ -8,20 +8,17 @@ (:require [app.common.types.shape.radius :as ctsr] [app.common.types.token :as ctt] - [app.main.data.tokens :as dt] [app.main.data.workspace :as udw] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.shape-layout :as dwsl] [app.main.data.workspace.state-helpers :as wsh] [app.main.data.workspace.transforms :as dwt] [app.main.data.workspace.undo :as dwu] - [app.main.store :as st] [app.main.ui.workspace.tokens.style-dictionary :as sd] [app.main.ui.workspace.tokens.token :as wtt] [beicon.v2.core :as rx] [clojure.set :as set] - [potok.v2.core :as ptk] - [promesa.core :as p])) + [potok.v2.core :as ptk])) ;; Token Updates --------------------------------------------------------------- From 69d93592375c0060d9f4877052f3f4d8012fc295 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Wed, 31 Jul 2024 14:36:09 +0200 Subject: [PATCH 02/18] Collecting update functions by attributes --- .../ui/workspace/tokens/style_dictionary.cljs | 3 + .../app/main/ui/workspace/tokens/update.cljs | 70 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 frontend/src/app/main/ui/workspace/tokens/update.cljs diff --git a/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs b/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs index 911fbafe99..1944abe10d 100644 --- a/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/style_dictionary.cljs @@ -111,6 +111,9 @@ (defonce !tokens-cache (atom nil)) +(defn get-cached-tokens [tokens] + (get @!tokens-cache tokens tokens)) + (defn use-resolved-tokens "The StyleDictionary process function is async, so we can't use resolved values directly. diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs new file mode 100644 index 0000000000..c5f73518c2 --- /dev/null +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -0,0 +1,70 @@ +(ns app.main.ui.workspace.tokens.update + (:require + [app.common.types.token :as ctt] + [app.main.data.workspace.shape-layout :as dwsl] + [app.main.refs :as refs] + [app.main.ui.workspace.tokens.changes :as wtch] + [app.main.ui.workspace.tokens.style-dictionary :as wtsd] + [clojure.set :as set])) + +(defn invert-collect-key-vals + [xs resolved-tokens] + (-> (reduce + (fn [acc [k v]] + (let [resolved-value (get-in resolved-tokens [v :resolved-value])] + (update acc resolved-value (fnil conj #{}) k))) + {} xs))) + +(defn shape-ids-by-values + [attrs-values-map object-id] + (->> (map (fn [[value attrs]] [attrs {value #{object-id}}]) attrs-values-map) + (into {}))) + +(defn deep-merge + "Like d/deep-merge but unions set values." + ([a b] + (cond + (map? a) (merge-with deep-merge a b) + (set? a) (set/union a b) + :else b)) + ([a b & rest] + (reduce deep-merge a (cons b rest)))) + +(defn update-workspace-tokens [] + (let [resolved-tokens (wtsd/get-cached-tokens @refs/workspace-tokens)] + (->> @refs/workspace-page-objects + (reduce + (fn [acc [object-id {:keys [applied-tokens]}]] + (if (seq applied-tokens) + (let [applied-tokens (-> (invert-collect-key-vals applied-tokens resolved-tokens) + (shape-ids-by-values object-id))] + (deep-merge acc applied-tokens)) + acc)) + {})))) + +(def attributes->shape-update + {#{:rx :ry} wtch/update-shape-radius-single-corner + #{:r1 :r2 :r3 :r4} wtch/update-shape-radius-single-corner + ctt/stroke-width-keys wtch/update-stroke-width + ctt/sizing-keys wtch/update-shape-dimensions + ctt/opacity-keys wtch/update-opacity + #{:p1 :p2 :p3 :p4} (fn [resolved-value shape-ids attrs] + (dwsl/update-layout shape-ids {:layout-padding (zipmap attrs (repeat resolved-value))})) + #{:column-gap :row-gap} wtch/update-layout-spacing + #{:width :height} wtch/update-shape-dimensions + #{:layout-item-min-w :layout-item-min-h :layout-item-max-w :layout-item-max-h} wtch/update-layout-sizing-limits + ctt/rotation-keys wtch/update-rotation}) + +(merge {} (into {} [[:a 1]])) + + +(def attributes-collect-by-pairs + (reduce + (fn [acc [ks _]] + (into acc (map (fn [k] [k ks]) ks))) + {} attributes->shape-update)) + +(comment + (update-workspace-tokens) + + nil) From 0166c38486cbc5d01607e57a662ce9c66b89f775 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Wed, 31 Jul 2024 16:43:03 +0200 Subject: [PATCH 03/18] Split logical attribute groups --- .../app/main/ui/workspace/tokens/update.cljs | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index c5f73518c2..99c5156996 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -5,16 +5,43 @@ [app.main.refs :as refs] [app.main.ui.workspace.tokens.changes :as wtch] [app.main.ui.workspace.tokens.style-dictionary :as wtsd] - [clojure.set :as set])) + [clojure.set :as set] + [clojure.data :as data])) + +(def filter-existing-values? false) (defn invert-collect-key-vals - [xs resolved-tokens] + [xs resolved-tokens shape] (-> (reduce (fn [acc [k v]] (let [resolved-value (get-in resolved-tokens [v :resolved-value])] - (update acc resolved-value (fnil conj #{}) k))) + (if (and filter-existing-values? (= (get shape k) resolved-value)) + acc + (update acc resolved-value (fnil conj #{}) k)))) {} xs))) +(defn split-attribute-groups [attrs-values-map] + (reduce + (fn [acc [attrs v]] + (cond + (some attrs #{:rx :ry}) (let [[_ a b] (data/diff #{:rx :ry} attrs)] + (assoc acc + a v + b v)) + + (some attrs #{:widht :height}) (let [[_ a b] (data/diff #{:width :height} attrs)] + (assoc acc + a v + b v)) + (some attrs ctt/spacing-keys) (let [[_ rst gap] (data/diff #{:row-gap :column-gap} attrs) + [_ position padding] (data/diff #{:p1 :p2 :p3 :p4} rst)] + (cond-> acc + (seq gap) (assoc gap v) + (seq position) (assoc position v) + (seq padding) (assoc padding v))) + :else (assoc acc attrs v))) + {} attrs-values-map)) + (defn shape-ids-by-values [attrs-values-map object-id] (->> (map (fn [[value attrs]] [attrs {value #{object-id}}]) attrs-values-map) @@ -34,10 +61,12 @@ (let [resolved-tokens (wtsd/get-cached-tokens @refs/workspace-tokens)] (->> @refs/workspace-page-objects (reduce - (fn [acc [object-id {:keys [applied-tokens]}]] + (fn [acc [object-id {:keys [applied-tokens] :as shape}]] (if (seq applied-tokens) - (let [applied-tokens (-> (invert-collect-key-vals applied-tokens resolved-tokens) - (shape-ids-by-values object-id))] + (let [applied-tokens (-> + (invert-collect-key-vals applied-tokens resolved-tokens shape) + (shape-ids-by-values object-id) + (split-attribute-groups))] (deep-merge acc applied-tokens)) acc)) {})))) @@ -55,8 +84,6 @@ #{:layout-item-min-w :layout-item-min-h :layout-item-max-w :layout-item-max-h} wtch/update-layout-sizing-limits ctt/rotation-keys wtch/update-rotation}) -(merge {} (into {} [[:a 1]])) - (def attributes-collect-by-pairs (reduce From d22234fe2a91b44ea1a5053b45b2016ce98c2c93 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Wed, 31 Jul 2024 16:51:55 +0200 Subject: [PATCH 04/18] Cleanup --- .../app/main/ui/workspace/tokens/update.cljs | 82 ++++++++++--------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 99c5156996..d23ce86ccd 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -8,8 +8,37 @@ [clojure.set :as set] [clojure.data :as data])) +;; Constants ------------------------------------------------------------------- + (def filter-existing-values? false) +(def attributes->shape-update + {#{:rx :ry} wtch/update-shape-radius-single-corner + #{:r1 :r2 :r3 :r4} wtch/update-shape-radius-single-corner + ctt/stroke-width-keys wtch/update-stroke-width + ctt/sizing-keys wtch/update-shape-dimensions + ctt/opacity-keys wtch/update-opacity + #{:p1 :p2 :p3 :p4} (fn [resolved-value shape-ids attrs] + (dwsl/update-layout shape-ids {:layout-padding (zipmap attrs (repeat resolved-value))})) + #{:column-gap :row-gap} wtch/update-layout-spacing + #{:width :height} wtch/update-shape-dimensions + #{:layout-item-min-w :layout-item-min-h :layout-item-max-w :layout-item-max-h} wtch/update-layout-sizing-limits + ctt/rotation-keys wtch/update-rotation}) + +;; Helpers --------------------------------------------------------------------- + +(defn deep-merge + "Like d/deep-merge but unions set values." + ([a b] + (cond + (map? a) (merge-with deep-merge a b) + (set? a) (set/union a b) + :else b)) + ([a b & rest] + (reduce deep-merge a (cons b rest)))) + +;; Data flows ------------------------------------------------------------------ + (defn invert-collect-key-vals [xs resolved-tokens shape] (-> (reduce @@ -47,51 +76,24 @@ (->> (map (fn [[value attrs]] [attrs {value #{object-id}}]) attrs-values-map) (into {}))) -(defn deep-merge - "Like d/deep-merge but unions set values." - ([a b] - (cond - (map? a) (merge-with deep-merge a b) - (set? a) (set/union a b) - :else b)) - ([a b & rest] - (reduce deep-merge a (cons b rest)))) +(defn collect-shape-update-info [resolved-tokens shapes] + (reduce + (fn [acc [object-id {:keys [applied-tokens] :as shape}]] + (if (seq applied-tokens) + (let [applied-tokens (-> + (invert-collect-key-vals applied-tokens resolved-tokens shape) + (shape-ids-by-values object-id) + (split-attribute-groups))] + (deep-merge acc applied-tokens)) + acc)) + {} shapes)) + (defn update-workspace-tokens [] (let [resolved-tokens (wtsd/get-cached-tokens @refs/workspace-tokens)] (->> @refs/workspace-page-objects - (reduce - (fn [acc [object-id {:keys [applied-tokens] :as shape}]] - (if (seq applied-tokens) - (let [applied-tokens (-> - (invert-collect-key-vals applied-tokens resolved-tokens shape) - (shape-ids-by-values object-id) - (split-attribute-groups))] - (deep-merge acc applied-tokens)) - acc)) - {})))) - -(def attributes->shape-update - {#{:rx :ry} wtch/update-shape-radius-single-corner - #{:r1 :r2 :r3 :r4} wtch/update-shape-radius-single-corner - ctt/stroke-width-keys wtch/update-stroke-width - ctt/sizing-keys wtch/update-shape-dimensions - ctt/opacity-keys wtch/update-opacity - #{:p1 :p2 :p3 :p4} (fn [resolved-value shape-ids attrs] - (dwsl/update-layout shape-ids {:layout-padding (zipmap attrs (repeat resolved-value))})) - #{:column-gap :row-gap} wtch/update-layout-spacing - #{:width :height} wtch/update-shape-dimensions - #{:layout-item-min-w :layout-item-min-h :layout-item-max-w :layout-item-max-h} wtch/update-layout-sizing-limits - ctt/rotation-keys wtch/update-rotation}) - - -(def attributes-collect-by-pairs - (reduce - (fn [acc [ks _]] - (into acc (map (fn [k] [k ks]) ks))) - {} attributes->shape-update)) + (collect-shape-update-info resolved-tokens)))) (comment (update-workspace-tokens) - nil) From a1fefe66ae2b23c80e904b06cc1010f23d405e2a Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Wed, 31 Jul 2024 17:26:50 +0200 Subject: [PATCH 05/18] Working updates! --- .../app/main/ui/workspace/tokens/update.cljs | 45 +++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index d23ce86ccd..55e02892de 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -1,23 +1,28 @@ (ns app.main.ui.workspace.tokens.update (:require + [beicon.v2.core :as brx] [app.common.types.token :as ctt] [app.main.data.workspace.shape-layout :as dwsl] [app.main.refs :as refs] + [app.main.store :as st] [app.main.ui.workspace.tokens.changes :as wtch] [app.main.ui.workspace.tokens.style-dictionary :as wtsd] + [clojure.data :as data] [clojure.set :as set] - [clojure.data :as data])) + [potok.v2.core :as ptk] + [beicon.v2.core :as rx])) ;; Constants ------------------------------------------------------------------- (def filter-existing-values? false) (def attributes->shape-update - {#{:rx :ry} wtch/update-shape-radius-single-corner + {#{:rx :ry} (fn [v ids _] (wtch/update-shape-radius-all v ids)) #{:r1 :r2 :r3 :r4} wtch/update-shape-radius-single-corner ctt/stroke-width-keys wtch/update-stroke-width ctt/sizing-keys wtch/update-shape-dimensions ctt/opacity-keys wtch/update-opacity + #{:x :y} wtch/update-shape-position #{:p1 :p2 :p3 :p4} (fn [resolved-value shape-ids attrs] (dwsl/update-layout shape-ids {:layout-padding (zipmap attrs (repeat resolved-value))})) #{:column-gap :row-gap} wtch/update-layout-spacing @@ -25,6 +30,12 @@ #{:layout-item-min-w :layout-item-min-h :layout-item-max-w :layout-item-max-h} wtch/update-layout-sizing-limits ctt/rotation-keys wtch/update-rotation}) +(def attribute-actions-map + (reduce + (fn [acc [ks action]] + (into acc (map (fn [k] [k action]) ks))) + {} attributes->shape-update)) + ;; Helpers --------------------------------------------------------------------- (defn deep-merge @@ -76,24 +87,42 @@ (->> (map (fn [[value attrs]] [attrs {value #{object-id}}]) attrs-values-map) (into {}))) -(defn collect-shape-update-info [resolved-tokens shapes] +(defn collect-shapes-update-info [resolved-tokens shapes] (reduce (fn [acc [object-id {:keys [applied-tokens] :as shape}]] (if (seq applied-tokens) - (let [applied-tokens (-> - (invert-collect-key-vals applied-tokens resolved-tokens shape) - (shape-ids-by-values object-id) - (split-attribute-groups))] + (let [applied-tokens (-> (invert-collect-key-vals applied-tokens resolved-tokens shape) + (shape-ids-by-values object-id) + (split-attribute-groups))] (deep-merge acc applied-tokens)) acc)) {} shapes)) +(defn actionize-shapes-update-info [shapes-update-info] + (mapcat (fn [[attrs update-infos]] + (let [action (some attribute-actions-map attrs)] + (map + (fn [[v shape-ids]] + (list action v shape-ids attrs)) + update-infos))) + shapes-update-info)) (defn update-workspace-tokens [] (let [resolved-tokens (wtsd/get-cached-tokens @refs/workspace-tokens)] (->> @refs/workspace-page-objects - (collect-shape-update-info resolved-tokens)))) + (collect-shapes-update-info resolved-tokens) + (actionize-shapes-update-info)))) + +(defn update-workspace-tokens-event [] + (ptk/reify ::update-shape-position + ptk/WatchEvent + (watch [_ _ _] + (->> (update-workspace-tokens) + (mapv (fn [[f & attrs]] + (apply f attrs))) + (brx/concat))))) (comment (update-workspace-tokens) + (st/emit! (update-workspace-tokens-event)) nil) From e52623c728203140da8768626603f41f74961c29 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 09:13:58 +0200 Subject: [PATCH 06/18] Update shapes in one undo step, resolve tokens from state not cache atom --- .../app/main/ui/workspace/tokens/update.cljs | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 55e02892de..4c6d597b4d 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -1,16 +1,17 @@ (ns app.main.ui.workspace.tokens.update (:require - [beicon.v2.core :as brx] [app.common.types.token :as ctt] [app.main.data.workspace.shape-layout :as dwsl] + [app.main.data.workspace.undo :as dwu] [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.workspace.tokens.changes :as wtch] [app.main.ui.workspace.tokens.style-dictionary :as wtsd] + [app.main.ui.workspace.tokens.style-dictionary :as sd] + [beicon.v2.core :as rx] [clojure.data :as data] [clojure.set :as set] - [potok.v2.core :as ptk] - [beicon.v2.core :as rx])) + [potok.v2.core :as ptk])) ;; Constants ------------------------------------------------------------------- @@ -107,20 +108,32 @@ update-infos))) shapes-update-info)) +(defn update-tokens [resolved-tokens] + (->> @refs/workspace-page-objects + (collect-shapes-update-info resolved-tokens) + (actionize-shapes-update-info))) + (defn update-workspace-tokens [] (let [resolved-tokens (wtsd/get-cached-tokens @refs/workspace-tokens)] - (->> @refs/workspace-page-objects - (collect-shapes-update-info resolved-tokens) - (actionize-shapes-update-info)))) + (update-tokens resolved-tokens))) (defn update-workspace-tokens-event [] (ptk/reify ::update-shape-position ptk/WatchEvent - (watch [_ _ _] - (->> (update-workspace-tokens) - (mapv (fn [[f & attrs]] - (apply f attrs))) - (brx/concat))))) + (watch [_ state _] + (->> + (rx/from (sd/resolve-tokens+ (get-in state [:workspace-data :tokens]))) + (rx/mapcat + (fn [sd-tokens] + (let [undo-id (js/Symbol)] + (rx/concat + (rx/of (dwu/start-undo-transaction undo-id)) + (rx/concat + (->> (update-tokens sd-tokens) + (map (fn [[f & attrs]] + (apply f attrs))) + (rx/concat))) + (rx/of (dwu/commit-undo-transaction undo-id)))))))))) (comment (update-workspace-tokens) From 68415b6668be9218883d2ab18d653dbb872c07a8 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 09:14:21 +0200 Subject: [PATCH 07/18] Update tokens after shape update --- frontend/src/app/main/ui/workspace/tokens/form.cljs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/app/main/ui/workspace/tokens/form.cljs b/frontend/src/app/main/ui/workspace/tokens/form.cljs index 9ac30f39d2..7db3cd1d8a 100644 --- a/frontend/src/app/main/ui/workspace/tokens/form.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/form.cljs @@ -8,6 +8,7 @@ (:require-macros [app.main.style :as stl]) (:require ["lodash.debounce" :as debounce] + [app.main.ui.workspace.tokens.update :as wtu] [app.common.data :as d] [app.main.data.modal :as modal] [app.main.data.tokens :as dt] @@ -246,6 +247,7 @@ Token names should only contain letters and digits separated by . characters.")} final-description (assoc :description final-description) (:id token) (assoc :id (:id token)))] (st/emit! (dt/add-token token)) + (st/emit! (wtu/update-workspace-tokens-event)) (modal/hide!)))))))))] [:form {:on-submit on-submit} From ac27f95091857cc48c87251bb1746cce26734c8e Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 09:41:28 +0200 Subject: [PATCH 08/18] Fix undo deleting the token on update --- common/src/app/common/files/changes_builder.cljc | 10 +++++----- frontend/src/app/main/data/tokens.cljs | 12 ++++++++---- frontend/src/app/main/ui/workspace/tokens/form.cljs | 12 ++++++------ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/common/src/app/common/files/changes_builder.cljc b/common/src/app/common/files/changes_builder.cljc index c5f28cb9ba..831e47433f 100644 --- a/common/src/app/common/files/changes_builder.cljc +++ b/common/src/app/common/files/changes_builder.cljc @@ -672,11 +672,11 @@ (apply-changes-local))) (defn update-token - [changes token] - (let [token-id (:id token)] - (-> changes - (update :redo-changes conj {:type :mod-token :id token-id :token token}) - (apply-changes-local)))) + [changes {:keys [id] :as token} prev-token] + (-> changes + (update :redo-changes conj {:type :mod-token :id id :token token}) + (update :undo-changes conj {:type :mod-token :id id :token (or prev-token token)}) + (apply-changes-local))) (defn delete-token [changes token-id] diff --git a/frontend/src/app/main/data/tokens.cljs b/frontend/src/app/main/data/tokens.cljs index e0b827518f..f83ce15079 100644 --- a/frontend/src/app/main/data/tokens.cljs +++ b/frontend/src/app/main/data/tokens.cljs @@ -95,14 +95,18 @@ (let [workspace-data (deref refs/workspace-data)] (get (:tokens workspace-data) id))) -(defn add-token +(defn update-create-token [token] (let [token (update token :id #(or % (uuid/next)))] (ptk/reify ::add-token ptk/WatchEvent (watch [it _ _] - (let [changes (-> (pcb/empty-changes it) - (pcb/add-token token))] + (let [prev-token (get-token-data-from-token-id (:id token)) + changes (if prev-token + (-> (pcb/empty-changes it) + (pcb/update-token token prev-token)) + (-> (pcb/empty-changes it) + (pcb/add-token token)))] (rx/of (dch/commit-changes changes))))))) (defn delete-token @@ -122,7 +126,7 @@ (let [new-token (-> (get-token-data-from-token-id id) (dissoc :id) (update :name #(str/concat % "-copy")))] - (add-token new-token))) + (update-create-token new-token))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; TEMP (Move to test) diff --git a/frontend/src/app/main/ui/workspace/tokens/form.cljs b/frontend/src/app/main/ui/workspace/tokens/form.cljs index 7db3cd1d8a..73b50a8fd9 100644 --- a/frontend/src/app/main/ui/workspace/tokens/form.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/form.cljs @@ -241,12 +241,12 @@ Token names should only contain letters and digits separated by . characters.")} ;; The result should be a vector of all resolved validations ;; We do not handle the error case as it will be handled by the components validations (when (and (seq result) (not err)) - (let [token (cond-> {:name final-name - :type (or (:type token) token-type) - :value final-value} - final-description (assoc :description final-description) - (:id token) (assoc :id (:id token)))] - (st/emit! (dt/add-token token)) + (let [new-token (cond-> {:name final-name + :type (or (:type token) token-type) + :value final-value} + final-description (assoc :description final-description) + (:id token) (assoc :id (:id token)))] + (st/emit! (dt/update-create-token new-token)) (st/emit! (wtu/update-workspace-tokens-event)) (modal/hide!)))))))))] [:form From 68b32448d19d15162028114ec14ca98fd40fb052 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 10:41:03 +0200 Subject: [PATCH 09/18] Fix exact match of diff adding nil attrs group and crashing the app --- .../src/app/main/ui/workspace/tokens/update.cljs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 4c6d597b4d..77707ad35d 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -66,14 +66,14 @@ (fn [acc [attrs v]] (cond (some attrs #{:rx :ry}) (let [[_ a b] (data/diff #{:rx :ry} attrs)] - (assoc acc - a v - b v)) + (cond-> (assoc acc b v) + ;; Exact match in attrs + a (assoc a v))) (some attrs #{:widht :height}) (let [[_ a b] (data/diff #{:width :height} attrs)] - (assoc acc - a v - b v)) + (cond-> (assoc acc b v) + ;; Exact match in attrs + a (assoc a v))) (some attrs ctt/spacing-keys) (let [[_ rst gap] (data/diff #{:row-gap :column-gap} attrs) [_ position padding] (data/diff #{:p1 :p2 :p3 :p4} rst)] (cond-> acc From feb438f88296d13e11c6e369eb32c33b4d2e8192 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 10:41:45 +0200 Subject: [PATCH 10/18] Safety net --- frontend/src/app/main/ui/workspace/tokens/update.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 77707ad35d..d379dc1274 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -80,7 +80,7 @@ (seq gap) (assoc gap v) (seq position) (assoc position v) (seq padding) (assoc padding v))) - :else (assoc acc attrs v))) + attrs (assoc acc attrs v))) {} attrs-values-map)) (defn shape-ids-by-values From cc6f34f78ac1ebb3399f293531126b8208f3df10 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 11:07:02 +0200 Subject: [PATCH 11/18] Fix trying to update shapes for deleted tokens crash --- frontend/src/app/main/ui/workspace/tokens/update.cljs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index d379dc1274..6e19b72ffe 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -55,8 +55,12 @@ [xs resolved-tokens shape] (-> (reduce (fn [acc [k v]] - (let [resolved-value (get-in resolved-tokens [v :resolved-value])] - (if (and filter-existing-values? (= (get shape k) resolved-value)) + (let [resolved-token (get resolved-tokens v) + resolved-value (get resolved-token :resolved-value) + skip? (or + (not (get resolved-tokens v)) + (and filter-existing-values? (= (get shape k) resolved-value)))] + (if skip? acc (update acc resolved-value (fnil conj #{}) k)))) {} xs))) From 9ebd7436354480393bccecc1547412b149095390 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 11:09:36 +0200 Subject: [PATCH 12/18] Testing comment --- frontend/src/app/main/ui/workspace/tokens/update.cljs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 6e19b72ffe..724642897a 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -140,6 +140,12 @@ (rx/of (dwu/commit-undo-transaction undo-id)))))))))) (comment + (->> (update-workspace-tokens) + (map rest) + (into [])) + + (update-workspace-tokens) + (st/emit! (update-workspace-tokens-event)) nil) From fdce370bb6a5f8687afa35c575d8bbfc0ae28355 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 12:05:15 +0200 Subject: [PATCH 13/18] Disable debug --- frontend/src/app/main/ui/workspace/tokens/form.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/form.cljs b/frontend/src/app/main/ui/workspace/tokens/form.cljs index 73b50a8fd9..b159bac596 100644 --- a/frontend/src/app/main/ui/workspace/tokens/form.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/form.cljs @@ -101,7 +101,7 @@ Token names should only contain letters and digits separated by . characters.")} new-tokens (update tokens token-id merge {:id token-id :value input :name token-name})] - (-> (sd/resolve-tokens+ new-tokens {:debug? true}) + (-> (sd/resolve-tokens+ new-tokens #_ {:debug? true}) (p/then (fn [resolved-tokens] (let [{:keys [errors resolved-value] :as resolved-token} (get resolved-tokens token-id)] From 518441e582f8600861bd92c1d453066aceffe64b Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 12:12:03 +0200 Subject: [PATCH 14/18] Fix spacing token click will add padding --- frontend/src/app/main/ui/workspace/tokens/token_types.cljs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/token_types.cljs b/frontend/src/app/main/ui/workspace/tokens/token_types.cljs index 6b6c169169..a083bed547 100644 --- a/frontend/src/app/main/ui/workspace/tokens/token_types.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/token_types.cljs @@ -66,7 +66,8 @@ :key :rotation}]}}] [:spacing {:title "Spacing" - :attributes ctt/spacing-keys + :attributes #{:column-gap :row-gap} + :all-attributes ctt/spacing-keys :on-update-shape wtch/update-layout-spacing :modal {:key :tokens/spacing :fields [{:label "Spacing" From fc6d64fb5d3592e4d47cb6aa95bb776bbc89881e Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 15:32:33 +0200 Subject: [PATCH 15/18] Fix import --- frontend/src/app/main/ui/workspace/tokens/update.cljs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 724642897a..3d033e2f9f 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -7,7 +7,6 @@ [app.main.store :as st] [app.main.ui.workspace.tokens.changes :as wtch] [app.main.ui.workspace.tokens.style-dictionary :as wtsd] - [app.main.ui.workspace.tokens.style-dictionary :as sd] [beicon.v2.core :as rx] [clojure.data :as data] [clojure.set :as set] @@ -126,7 +125,7 @@ ptk/WatchEvent (watch [_ state _] (->> - (rx/from (sd/resolve-tokens+ (get-in state [:workspace-data :tokens]))) + (rx/from (wtsd/resolve-tokens+ (get-in state [:workspace-data :tokens]))) (rx/mapcat (fn [sd-tokens] (let [undo-id (js/Symbol)] From 0c757f05e359ecf0ddb7953de8d5e47bb8eab000 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 15:37:39 +0200 Subject: [PATCH 16/18] Apply actions directly --- frontend/src/app/main/ui/workspace/tokens/update.cljs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 3d033e2f9f..0cdc67d184 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -107,7 +107,7 @@ (let [action (some attribute-actions-map attrs)] (map (fn [[v shape-ids]] - (list action v shape-ids attrs)) + (action v shape-ids attrs)) update-infos))) shapes-update-info)) @@ -133,8 +133,6 @@ (rx/of (dwu/start-undo-transaction undo-id)) (rx/concat (->> (update-tokens sd-tokens) - (map (fn [[f & attrs]] - (apply f attrs))) (rx/concat))) (rx/of (dwu/commit-undo-transaction undo-id)))))))))) From 13163a457109445633fcaae2d54c5b3fc84aa41a Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 15:37:53 +0200 Subject: [PATCH 17/18] Clean up debugging code --- .../src/app/main/ui/workspace/tokens/form.cljs | 2 +- .../app/main/ui/workspace/tokens/update.cljs | 17 +---------------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/form.cljs b/frontend/src/app/main/ui/workspace/tokens/form.cljs index b159bac596..5094f29eff 100644 --- a/frontend/src/app/main/ui/workspace/tokens/form.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/form.cljs @@ -247,7 +247,7 @@ Token names should only contain letters and digits separated by . characters.")} final-description (assoc :description final-description) (:id token) (assoc :id (:id token)))] (st/emit! (dt/update-create-token new-token)) - (st/emit! (wtu/update-workspace-tokens-event)) + (st/emit! (wtu/update-workspace-tokens)) (modal/hide!)))))))))] [:form {:on-submit on-submit} diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 0cdc67d184..255471bb44 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -117,11 +117,7 @@ (actionize-shapes-update-info))) (defn update-workspace-tokens [] - (let [resolved-tokens (wtsd/get-cached-tokens @refs/workspace-tokens)] - (update-tokens resolved-tokens))) - -(defn update-workspace-tokens-event [] - (ptk/reify ::update-shape-position + (ptk/reify ::update-workspace-tokens ptk/WatchEvent (watch [_ state _] (->> @@ -135,14 +131,3 @@ (->> (update-tokens sd-tokens) (rx/concat))) (rx/of (dwu/commit-undo-transaction undo-id)))))))))) - -(comment - (->> (update-workspace-tokens) - (map rest) - (into [])) - - - (update-workspace-tokens) - - (st/emit! (update-workspace-tokens-event)) - nil) From 72c5c3ec9aed5c208858e0f0ab6711e1791d0bfa Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 1 Aug 2024 15:45:37 +0200 Subject: [PATCH 18/18] Cleanup --- frontend/src/app/main/ui/workspace/tokens/update.cljs | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/update.cljs b/frontend/src/app/main/ui/workspace/tokens/update.cljs index 255471bb44..1543d8d069 100644 --- a/frontend/src/app/main/ui/workspace/tokens/update.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/update.cljs @@ -4,7 +4,6 @@ [app.main.data.workspace.shape-layout :as dwsl] [app.main.data.workspace.undo :as dwu] [app.main.refs :as refs] - [app.main.store :as st] [app.main.ui.workspace.tokens.changes :as wtch] [app.main.ui.workspace.tokens.style-dictionary :as wtsd] [beicon.v2.core :as rx]