From f3d5515795402645d1e5e65ba2a90b7e8777f8cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Mon, 18 Jan 2021 11:42:29 +0100 Subject: [PATCH] :bug: Detach a shape when moving it out of a component --- common/app/common/pages/changes.cljc | 19 ++++++++++++++++++- common/app/common/pages/helpers.cljc | 12 +++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/common/app/common/pages/changes.cljc b/common/app/common/pages/changes.cljc index 9555ca150b..8d3fad6fbe 100644 --- a/common/app/common/pages/changes.cljc +++ b/common/app/common/pages/changes.cljc @@ -222,7 +222,24 @@ (d/dissoc-in [pid :remote-synced?]))))))))) (update-parent-id [objects id] - (update objects id assoc :parent-id parent-id)) + (update objects id + (fn [object] + (let [prev-component-root (cph/get-root-shape object objects) + detach-component (fn [object] + (let [new-component-root + (cph/get-root-shape object objects)] + (cond-> object + (not= prev-component-root new-component-root) + (dissoc object + :component-id + :component-file + :component-root? + :remote-synced? + :shape-ref + :touched))))] + (-> object + (assoc :parent-id parent-id) + detach-component))))) ;; Updates the frame-id references that might be outdated (assign-frame-id [frame-id objects id] diff --git a/common/app/common/pages/helpers.cljc b/common/app/common/pages/helpers.cljc index 97bbab5003..8a6df0a2a4 100644 --- a/common/app/common/pages/helpers.cljc +++ b/common/app/common/pages/helpers.cljc @@ -36,11 +36,13 @@ (defn get-root-shape "Get the root shape linked to a component for this shape, if any" [shape objects] - (if (:component-id shape) - shape - (if-let [parent-id (:parent-id shape)] - (get-root-shape (get objects parent-id) objects) - nil))) + (if-not (:shape-ref shape) + nil + (if (:component-id shape) + shape + (if-let [parent-id (:parent-id shape)] + (get-root-shape (get objects parent-id) objects) + nil)))) (defn make-container [page-or-component type]