0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-08 16:00:19 -05:00

🐛 Fix frame-id on migration to components-v2

This commit is contained in:
Andrés Moya 2023-11-08 17:22:10 +01:00
parent 19379fdd2c
commit 9059663a87

View file

@ -211,7 +211,7 @@
transform-to-frames
(fn [file-data]
; Transform components and copies to frames, and set the
; Transform component and copy heads to frames, and set the
; frame-id of its childrens
(letfn [(fix-container
[container]
@ -245,6 +245,30 @@
(if (ctk/instance-head? parent)
(assoc shape :frame-id (:id parent))
shape)))]
(-> file-data
(update :pages-index update-vals fix-container)
(update :components update-vals fix-container))))
fix-frame-ids
(fn [file-data]
;; Ensure that frame-id of all shapes point to the parent or to the frame-id
;; of the parent, and that the destination is indeed a frame.
(letfn [(fix-container [container]
(update container :objects #(cph/reduce-objects % fix-shape %)))
(fix-shape [objects shape]
(let [parent (when (:parent-id shape)
(get objects (:parent-id shape)))
error? (when (some? parent)
(if (= (:type parent) :frame)
(not= (:frame-id shape) (:id parent))
(not= (:frame-id shape) (:frame-id parent))))]
(if error?
(let [nearest-frame (cph/get-frame objects (:parent-id shape))
frame-id (or (:id nearest-frame) uuid/zero)]
(update objects (:id shape) assoc :frame-id frame-id))
objects)))]
(-> file-data
(update :pages-index update-vals fix-container)
(update :components update-vals fix-container))))]
@ -257,7 +281,8 @@
(remap-refs)
(fix-copies-of-detached)
(transform-to-frames)
(remap-frame-ids))))
(remap-frame-ids)
(fix-frame-ids))))
(defn- migrate-components
"If there is any component in the file library, add a new 'Library
@ -312,8 +337,8 @@
(fn [page shape]
(let [parent (ctst/get-shape page (:parent-id shape))]
(if (= :frame (:type parent))
(:parent-id shape)
(:frame-id shape))))
(:id parent)
(:frame-id parent))))
add-shapes
(fn [page]
@ -369,7 +394,7 @@
"Convert a media object that contains a bitmap image into shapes,
one shape of type :image and one group that contains it."
[{:keys [name width height id mtype]} position]
(let [group-shape (cts/setup-shape
(let [frame-shape (cts/setup-shape
{:type :frame
:x (:x position)
:y (:y position)
@ -390,9 +415,9 @@
:height height
:mtype mtype}
:name name
:frame-id uuid/zero
:parent-id (:id group-shape)})]
[group-shape [img-shape]]))
:frame-id (:id frame-shape)
:parent-id (:id frame-shape)})]
[frame-shape [img-shape]]))
(defn- parse-datauri
[data]