mirror of
https://github.com/penpot/penpot.git
synced 2025-02-22 23:06:08 -05:00
🎉 Detach component now only affects top instance, not subinstances
This commit is contained in:
parent
b33e469501
commit
a27fa8b317
2 changed files with 20 additions and 18 deletions
|
@ -63,6 +63,10 @@
|
||||||
[container shape-id f]
|
[container shape-id f]
|
||||||
(update-in container [:objects shape-id] f))
|
(update-in container [:objects shape-id] f))
|
||||||
|
|
||||||
|
(defn get-direct-children
|
||||||
|
[container shape]
|
||||||
|
(map #(get-shape container %) (:shapes shape)))
|
||||||
|
|
||||||
(defn get-component-shape
|
(defn get-component-shape
|
||||||
"Get the parent shape linked to a component for this shape, if any"
|
"Get the parent shape linked to a component for this shape, if any"
|
||||||
[objects shape]
|
[objects shape]
|
||||||
|
|
|
@ -171,26 +171,26 @@
|
||||||
|
|
||||||
[new-shape changes])))
|
[new-shape changes])))
|
||||||
|
|
||||||
|
(declare generate-detach-recursive)
|
||||||
|
|
||||||
(defn generate-detach-instance
|
(defn generate-detach-instance
|
||||||
"Generate changes to remove the links between a shape and all its children
|
"Generate changes to remove the links between a shape and all its children
|
||||||
with a component."
|
with a component."
|
||||||
[changes container shape-id]
|
[changes container shape-id]
|
||||||
(log/debug :msg "Detach instance" :shape-id shape-id :container (:id container))
|
(log/debug :msg "Detach instance" :shape-id shape-id :container (:id container))
|
||||||
(let [shapes (->> (cph/get-children-with-self (:objects container) shape-id)
|
(generate-detach-recursive changes container shape-id true))
|
||||||
(map :id))
|
|
||||||
|
|
||||||
update-fn
|
|
||||||
(fn [shape]
|
|
||||||
(assoc shape
|
|
||||||
:component-id nil
|
|
||||||
:component-file nil
|
|
||||||
:component-root? nil
|
|
||||||
:remote-synced? nil
|
|
||||||
:shape-ref nil
|
|
||||||
:touched nil))]
|
|
||||||
|
|
||||||
(pcb/update-shapes changes shapes update-fn)))
|
|
||||||
|
|
||||||
|
(defn- generate-detach-recursive
|
||||||
|
[changes container shape-id first]
|
||||||
|
(let [shape (ctn/get-shape container shape-id)]
|
||||||
|
(if (and (ctk/instance-root? shape) (not first))
|
||||||
|
;; Subinstances are not detached, but converted in top instances
|
||||||
|
(pcb/update-shapes changes [(:id shape)] #(assoc % :component-root? true))
|
||||||
|
;; Otherwise, detach the shape and all children
|
||||||
|
(let [children-ids (:shapes shape)]
|
||||||
|
(reduce #(generate-detach-recursive %1 container %2 false)
|
||||||
|
(pcb/update-shapes changes [(:id shape)] ctk/detach-shape)
|
||||||
|
children-ids)))))
|
||||||
|
|
||||||
(defn prepare-restore-component
|
(defn prepare-restore-component
|
||||||
([library-data component-id it]
|
([library-data component-id it]
|
||||||
|
@ -579,10 +579,8 @@
|
||||||
|
|
||||||
component-container (ctf/get-component-container library component)
|
component-container (ctf/get-component-container library component)
|
||||||
|
|
||||||
children-inst (mapv #(ctn/get-shape container %)
|
children-inst (vec (ctn/get-direct-children container shape-inst))
|
||||||
(:shapes shape-inst))
|
children-main (vec (ctn/get-direct-children component-container shape-main))
|
||||||
children-main (mapv #(ctn/get-shape component-container %)
|
|
||||||
(:shapes shape-main))
|
|
||||||
|
|
||||||
only-inst (fn [changes child-inst]
|
only-inst (fn [changes child-inst]
|
||||||
(if-not (and omit-touched?
|
(if-not (and omit-touched?
|
||||||
|
|
Loading…
Add table
Reference in a new issue