🐛 Fix duplicate frames

This commit is contained in:
alonso.torres 2023-01-27 13:06:32 +01:00 committed by Andrés Moya
parent 506c2b8d7b
commit d69d392362
2 changed files with 67 additions and 77 deletions

View file

@ -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,7 +302,7 @@
changes changes
(->> shapes (->> shapes
(reduce #(prepare-duplicate-change %1 (reduce #(prepare-duplicate-shape-change %1
all-objects all-objects
page page
unames unames
@ -318,47 +316,14 @@
(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]
(prepare-duplicate-shape-change changes objects page unames update-unames! ids-map obj delta (:frame-id obj) (:parent-id obj)))
([changes objects page unames update-unames! ids-map obj delta frame-id parent-id]
(if (some? obj) (if (some? obj)
(let [new-id (ids-map (:id obj)) (let [frame? (cph/frame-shape? obj)
new-id (ids-map (:id obj))
parent-id (or parent-id frame-id) parent-id (or parent-id frame-id)
name (:name obj) name (:name obj)
@ -368,7 +333,8 @@
:parent-id parent-id :parent-id parent-id
:frame-id frame-id) :frame-id frame-id)
(dissoc :shapes (dissoc :shapes
:main-instance?) :main-instance?
:use-for-thumbnail?)
(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)))
@ -384,11 +350,11 @@
ids-map ids-map
child child
delta delta
frame-id (if frame? new-id frame-id)
new-id)) new-id))
changes changes
(map (d/getf objects) (:shapes obj)))) (map (d/getf objects) (:shapes obj))))
changes)) changes)))
(defn- prepare-duplicate-flows (defn- prepare-duplicate-flows
[changes shapes page ids-map] [changes shapes page ids-map]

View file

@ -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))