From d2fbb9dfa7aaadf24dcf9aac58f952b06a59efe6 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Thu, 13 Mar 2025 10:52:54 +0100 Subject: [PATCH] :bug: Fix problem with grid component propagation --- common/src/app/common/logic/libraries.cljc | 20 ++++++++++++++++--- common/src/app/common/types/shape/layout.cljc | 14 +++---------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/common/src/app/common/logic/libraries.cljc b/common/src/app/common/logic/libraries.cljc index 5ad85cbcb..41708bcb6 100644 --- a/common/src/app/common/logic/libraries.cljc +++ b/common/src/app/common/logic/libraries.cljc @@ -1722,13 +1722,26 @@ (pcb/update-shapes [shape-copy-id] (fn [shape-copy objects] - (let [ids-map + (let [component-page + (ctf/get-component-page main-container main-component) + + component-swap-children + (->> shape-main + :shapes + (map #(get (:objects component-page) %)) + (filter #(some? (ctk/get-swap-slot %))) + (group-by ctk/get-swap-slot)) + + ids-map (into {} (comp (map #(get objects %)) (keep (fn [copy-shape] - (let [main-shape (ctf/get-ref-shape main-container main-component copy-shape)] + (let [main-shape + (if (some? (ctk/get-swap-slot copy-shape)) + (first (get component-swap-children (ctk/get-swap-slot copy-shape))) + (ctf/get-ref-shape main-container main-component copy-shape))] [(:id main-shape) (:id copy-shape)])))) (:shapes shape-copy)) @@ -1744,7 +1757,8 @@ main-cells (-> shape-main (ctl/remap-grid-cells ids-map) :layout-grid-cells)] (-> shape-copy (assoc :layout-grid-cells - (ctl/merge-cells copy-cells main-cells omit-touched?))))) + (ctl/merge-cells main-cells copy-cells omit-touched?)) + (ctl/assign-cells objects)))) {:ignore-touched true :with-objects? true}))) (defn- update-grid-main-attrs diff --git a/common/src/app/common/types/shape/layout.cljc b/common/src/app/common/types/shape/layout.cljc index 9c929de7a..df832c946 100644 --- a/common/src/app/common/types/shape/layout.cljc +++ b/common/src/app/common/types/shape/layout.cljc @@ -1643,15 +1643,10 @@ untouched as possible" [target-cells source-cells omit-touched?] (if omit-touched? - (letfn [(get-data [cells id] - (dissoc (get cells id) :row :column :row-span :column-span)) - - (merge-cells [source-cell target-cell] + (letfn [(merge-cells [source-cell target-cell] (-> source-cell (d/patch-object - (dissoc target-cell :shapes :row :column :row-span :column-span)) - (cond-> (d/not-empty? (:shapes target-cell)) - (assoc :shapes (:shapes target-cell)))))] + (dissoc target-cell :row :column :row-span :column-span))))] (let [deleted-cells (into #{} (filter #(not (contains? source-cells %))) @@ -1659,10 +1654,7 @@ touched-cells (into #{} - (filter #(and - (not (contains? deleted-cells %)) - (not= (get-data source-cells %) - (get-data target-cells %)))) + (filter #(not (contains? deleted-cells %))) (keys target-cells))] (->> touched-cells