From 02d1a1f0b146269959927c720b1445c4d72a3450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?luis=CE=B4=CE=BC?= Date: Mon, 2 Jun 2025 09:50:27 +0200 Subject: [PATCH] :sparkles: Delete variant property when it has no value anywhere after editing a formula (#6586) --- .../src/app/main/data/workspace/variants.cljs | 40 +++++++++++++++++++ .../main/ui/workspace/sidebar/layer_name.cljs | 2 + 2 files changed, 42 insertions(+) diff --git a/frontend/src/app/main/data/workspace/variants.cljs b/frontend/src/app/main/data/workspace/variants.cljs index 950478ddb2..03f504e5a5 100644 --- a/frontend/src/app/main/data/workspace/variants.cljs +++ b/frontend/src/app/main/data/workspace/variants.cljs @@ -176,6 +176,46 @@ (dwu/commit-undo-transaction undo-id)))))) +(defn remove-empty-properties + "Remove a property for all components when its value is empty for all of them" + [variant-id] + (ptk/reify ::remove-empty-properties + ptk/WatchEvent + (watch [it state _] + (let [page-id (:current-page-id state) + data (dsh/lookup-file-data state) + objects (-> (dsh/get-page data page-id) + (get :objects)) + + variant-components (cfv/find-variant-components data objects variant-id) + + properties-empty (->> variant-components + (mapcat :variant-properties) + (group-by :name) + (mapv (fn [[_ v]] + (->> v (mapv :value) (remove empty?)))) + (mapv empty?)) + + changes (-> (pcb/empty-changes it page-id) + (pcb/with-library-data data) + (pcb/with-objects objects)) + + changes (reduce + (fn [changes [idx property-empty?]] + (if property-empty? + (-> changes + (clvp/generate-remove-property variant-id idx)) + changes)) + changes + (map-indexed vector properties-empty)) + + undo-id (js/Symbol)] + + (rx/of + (dwu/start-undo-transaction undo-id) + (dch/commit-changes changes) + (dwu/commit-undo-transaction undo-id)))))) + (defn add-new-property "Add a new variant property to all the components with this variant-id" diff --git a/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs b/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs index 7ce513d512..7d56ceb848 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs @@ -72,8 +72,10 @@ (if variant-name (if (ctv/valid-properties-formula? name) (st/emit! (dwv/update-properties-names-and-values component-id variant-id variant-properties (ctv/properties-formula->map name)) + (dwv/remove-empty-properties variant-id) (dwv/update-error component-id nil)) (st/emit! (dwv/update-properties-names-and-values component-id variant-id variant-properties {}) + (dwv/remove-empty-properties variant-id) (dwv/update-error component-id name))) (st/emit! (dw/end-rename-shape shape-id name))))))