0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-12 18:18:24 -05:00

Merge pull request #4254 from penpot/palba-fix-crash-copy

🐛 Fix crash copy paste a Copy from a library
This commit is contained in:
Alejandro 2024-03-13 10:01:58 +01:00 committed by GitHub
commit ecb8ed8b8b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 2 deletions

View file

@ -215,6 +215,15 @@
(some find-ref-shape-in-head (ctn/get-parent-heads (:objects container) shape)))) (some find-ref-shape-in-head (ctn/get-parent-heads (:objects container) shape))))
(defn find-original-ref-shape
"Recursively call to find-ref-shape until find the original shape of the original component"
[file container libraries shape & options]
(let [ref-shape (find-ref-shape file container libraries shape options)]
(if (nil? (:shape-ref ref-shape))
ref-shape
(find-original-ref-shape file container libraries ref-shape options))))
(defn find-ref-component (defn find-ref-component
"Locate the nearest component in the local file or libraries that is referenced by the "Locate the nearest component in the local file or libraries that is referenced by the
instance shape." instance shape."
@ -303,7 +312,7 @@
(vals (:objects component))))) (vals (:objects component)))))
;; Return true if the object is a component that exists on the file or its libraries (even a deleted one) ;; Return true if the object is a component that exists on the file or its libraries (even a deleted one)
(defn is-known-component? (defn is-main-of-known-component?
[shape libraries] [shape libraries]
(let [main-instance? (ctk/main-instance? shape) (let [main-instance? (ctk/main-instance? shape)
component-id (:component-id shape) component-id (:component-id shape)

View file

@ -468,7 +468,7 @@
(nil? obj) (nil? obj)
changes changes
(ctf/is-known-component? obj libraries) (ctf/is-main-of-known-component? obj libraries)
(prepare-duplicate-component-change changes objects page obj parent-id frame-id delta libraries library-data it) (prepare-duplicate-component-change changes objects page obj parent-id frame-id delta libraries library-data it)
:else :else
@ -486,6 +486,9 @@
(ctk/instance-root? obj)) (ctk/instance-root? obj))
duplicating-component? (or duplicating-component? (ctk/instance-head? obj)) duplicating-component? (or duplicating-component? (ctk/instance-head? obj))
is-component-main? (ctk/main-instance? obj) is-component-main? (ctk/main-instance? obj)
original-ref-shape (-> (ctf/find-original-ref-shape nil page libraries obj {:include-deleted? true})
:id)
into-component? (and duplicating-component? into-component? (and duplicating-component?
(ctn/in-any-component? objects parent)) (ctn/in-any-component? objects parent))
@ -516,6 +519,10 @@
(cond-> (or frame? group? bool?) (cond-> (or frame? group? bool?)
(assoc :shapes [])) (assoc :shapes []))
(cond-> (and (some? original-ref-shape)
(not= original-ref-shape (:shape-ref obj)))
(assoc :shape-ref original-ref-shape))
(gsh/move delta) (gsh/move delta)
(d/update-when :interactions #(ctsi/remap-interactions % ids-map objects)) (d/update-when :interactions #(ctsi/remap-interactions % ids-map objects))