mirror of
https://github.com/penpot/penpot.git
synced 2025-05-17 16:06:10 +02:00
🐛 Fix duplicate frames
This commit is contained in:
parent
506c2b8d7b
commit
d69d392362
2 changed files with 67 additions and 77 deletions
|
@ -281,8 +281,6 @@
|
||||||
|
|
||||||
|
|
||||||
;; --- Duplicate Shapes
|
;; --- Duplicate Shapes
|
||||||
(declare prepare-duplicate-change)
|
|
||||||
(declare prepare-duplicate-frame-change)
|
|
||||||
(declare prepare-duplicate-shape-change)
|
(declare prepare-duplicate-shape-change)
|
||||||
(declare prepare-duplicate-flows)
|
(declare prepare-duplicate-flows)
|
||||||
(declare prepare-duplicate-guides)
|
(declare prepare-duplicate-guides)
|
||||||
|
@ -304,91 +302,59 @@
|
||||||
|
|
||||||
changes
|
changes
|
||||||
(->> shapes
|
(->> shapes
|
||||||
(reduce #(prepare-duplicate-change %1
|
(reduce #(prepare-duplicate-shape-change %1
|
||||||
all-objects
|
all-objects
|
||||||
page
|
page
|
||||||
unames
|
unames
|
||||||
update-unames!
|
update-unames!
|
||||||
ids-map
|
ids-map
|
||||||
%2
|
%2
|
||||||
delta)
|
delta)
|
||||||
init-changes))]
|
init-changes))]
|
||||||
|
|
||||||
(-> changes
|
(-> changes
|
||||||
(prepare-duplicate-flows shapes page ids-map)
|
(prepare-duplicate-flows shapes page ids-map)
|
||||||
(prepare-duplicate-guides shapes page ids-map delta))))
|
(prepare-duplicate-guides shapes page ids-map delta))))
|
||||||
|
|
||||||
(defn- prepare-duplicate-change
|
|
||||||
[changes objects page unames update-unames! ids-map shape delta]
|
|
||||||
(if (cph/frame-shape? shape)
|
|
||||||
(prepare-duplicate-frame-change changes objects page unames update-unames! ids-map shape delta)
|
|
||||||
(prepare-duplicate-shape-change changes objects page unames update-unames! ids-map shape delta (:frame-id shape) (:parent-id shape))))
|
|
||||||
|
|
||||||
(defn- prepare-duplicate-frame-change
|
|
||||||
[changes objects page unames update-unames! ids-map obj delta]
|
|
||||||
(let [new-id (ids-map (:id obj))
|
|
||||||
frame-name (:name obj)
|
|
||||||
|
|
||||||
new-frame (-> obj
|
|
||||||
(assoc :id new-id
|
|
||||||
:name frame-name
|
|
||||||
:shapes [])
|
|
||||||
(dissoc :use-for-thumbnail?)
|
|
||||||
(gsh/move delta)
|
|
||||||
(d/update-when :interactions #(ctsi/remap-interactions % ids-map objects)))
|
|
||||||
|
|
||||||
changes (-> (pcb/add-object changes new-frame)
|
|
||||||
(pcb/amend-last-change #(assoc % :old-id (:id obj))))
|
|
||||||
|
|
||||||
changes (reduce (fn [changes child]
|
|
||||||
(prepare-duplicate-shape-change changes
|
|
||||||
objects
|
|
||||||
page
|
|
||||||
unames
|
|
||||||
update-unames!
|
|
||||||
ids-map
|
|
||||||
child
|
|
||||||
delta
|
|
||||||
new-id
|
|
||||||
new-id))
|
|
||||||
changes
|
|
||||||
(map (d/getf objects) (:shapes obj)))]
|
|
||||||
changes))
|
|
||||||
|
|
||||||
(defn- prepare-duplicate-shape-change
|
(defn- prepare-duplicate-shape-change
|
||||||
[changes objects page unames update-unames! ids-map obj delta frame-id parent-id]
|
([changes objects page unames update-unames! ids-map obj delta]
|
||||||
(if (some? obj)
|
(prepare-duplicate-shape-change changes objects page unames update-unames! ids-map obj delta (:frame-id obj) (:parent-id obj)))
|
||||||
(let [new-id (ids-map (:id obj))
|
|
||||||
parent-id (or parent-id frame-id)
|
|
||||||
name (:name obj)
|
|
||||||
|
|
||||||
new-obj (-> obj
|
([changes objects page unames update-unames! ids-map obj delta frame-id parent-id]
|
||||||
(assoc :id new-id
|
(if (some? obj)
|
||||||
:name name
|
(let [frame? (cph/frame-shape? obj)
|
||||||
:parent-id parent-id
|
new-id (ids-map (:id obj))
|
||||||
:frame-id frame-id)
|
parent-id (or parent-id frame-id)
|
||||||
(dissoc :shapes
|
name (:name obj)
|
||||||
:main-instance?)
|
|
||||||
(gsh/move delta)
|
|
||||||
(d/update-when :interactions #(ctsi/remap-interactions % ids-map objects)))
|
|
||||||
|
|
||||||
changes (-> (pcb/add-object changes new-obj {:ignore-touched true})
|
new-obj (-> obj
|
||||||
(pcb/amend-last-change #(assoc % :old-id (:id obj))))]
|
(assoc :id new-id
|
||||||
|
:name name
|
||||||
|
:parent-id parent-id
|
||||||
|
:frame-id frame-id)
|
||||||
|
(dissoc :shapes
|
||||||
|
:main-instance?
|
||||||
|
:use-for-thumbnail?)
|
||||||
|
(gsh/move delta)
|
||||||
|
(d/update-when :interactions #(ctsi/remap-interactions % ids-map objects)))
|
||||||
|
|
||||||
(reduce (fn [changes child]
|
changes (-> (pcb/add-object changes new-obj {:ignore-touched true})
|
||||||
(prepare-duplicate-shape-change changes
|
(pcb/amend-last-change #(assoc % :old-id (:id obj))))]
|
||||||
objects
|
|
||||||
page
|
(reduce (fn [changes child]
|
||||||
unames
|
(prepare-duplicate-shape-change changes
|
||||||
update-unames!
|
objects
|
||||||
ids-map
|
page
|
||||||
child
|
unames
|
||||||
delta
|
update-unames!
|
||||||
frame-id
|
ids-map
|
||||||
new-id))
|
child
|
||||||
changes
|
delta
|
||||||
(map (d/getf objects) (:shapes obj))))
|
(if frame? new-id frame-id)
|
||||||
changes))
|
new-id))
|
||||||
|
changes
|
||||||
|
(map (d/getf objects) (:shapes obj))))
|
||||||
|
changes)))
|
||||||
|
|
||||||
(defn- prepare-duplicate-flows
|
(defn- prepare-duplicate-flows
|
||||||
[changes shapes page ids-map]
|
[changes shapes page ids-map]
|
||||||
|
|
|
@ -267,6 +267,30 @@
|
||||||
[]
|
[]
|
||||||
(dump-selected' @st/state))
|
(dump-selected' @st/state))
|
||||||
|
|
||||||
|
(defn ^:export parent
|
||||||
|
[]
|
||||||
|
(let [state @st/state
|
||||||
|
page-id (get state :current-page-id)
|
||||||
|
objects (get-in state [:workspace-data :pages-index page-id :objects])
|
||||||
|
selected (first (get-in state [:workspace-local :selected]))
|
||||||
|
parent-id (get-in objects [selected :parent-id])
|
||||||
|
parent (get objects parent-id)]
|
||||||
|
(when parent
|
||||||
|
(prn (str (:name parent) " - " (:id parent))))
|
||||||
|
nil))
|
||||||
|
|
||||||
|
(defn ^:export frame
|
||||||
|
[]
|
||||||
|
(let [state @st/state
|
||||||
|
page-id (get state :current-page-id)
|
||||||
|
objects (get-in state [:workspace-data :pages-index page-id :objects])
|
||||||
|
selected (first (get-in state [:workspace-local :selected]))
|
||||||
|
frame-id (get-in objects [selected :frame-id])
|
||||||
|
frame (get objects frame-id)]
|
||||||
|
(when frame
|
||||||
|
(prn (str (:name frame) " - " (:id frame))))
|
||||||
|
nil))
|
||||||
|
|
||||||
(defn dump-tree'
|
(defn dump-tree'
|
||||||
([state] (dump-tree' state false false))
|
([state] (dump-tree' state false false))
|
||||||
([state show-ids] (dump-tree' state show-ids false))
|
([state show-ids] (dump-tree' state show-ids false))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue