0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-22 22:49:01 -05:00

🐛 Fix guides are not duplicated with the artboard

This commit is contained in:
Alejandro Alonso 2022-04-22 16:01:50 +02:00 committed by Andrés Moya
parent 658e3b7aee
commit d28b4092d9
3 changed files with 51 additions and 15 deletions

View file

@ -90,6 +90,7 @@
- Fix component name in sidebar widget [Taiga #3144](https://tree.taiga.io/project/penpot/issue/3144) - Fix component name in sidebar widget [Taiga #3144](https://tree.taiga.io/project/penpot/issue/3144)
- Fix resize rotated shape with top&down constraints [Taiga #3167](https://tree.taiga.io/project/penpot/issue/3167) - Fix resize rotated shape with top&down constraints [Taiga #3167](https://tree.taiga.io/project/penpot/issue/3167)
- Fix multi user not working [Taiga #3195](https://tree.taiga.io/project/penpot/issue/3195) - Fix multi user not working [Taiga #3195](https://tree.taiga.io/project/penpot/issue/3195)
- Fix guides are not duplicated with the artboard [Taiga #3072](https://tree.taiga.io/project/penpot/issue/3072)
### :arrow_up: Deps updates ### :arrow_up: Deps updates
### :heart: Community contributions by (Thank you!) ### :heart: Community contributions by (Thank you!)

View file

@ -393,6 +393,11 @@
interactions))) interactions)))
(vals objects)) (vals objects))
;; If any of the deleted shapes is a frame with guides
guides (into {} (map (juxt :id identity) (->> (get-in page [:options :guides])
(vals)
(filter #(not (contains? ids (:frame-id %)))))))
starting-flows starting-flows
(filter (fn [flow] (filter (fn [flow]
;; If any of the deleted is a frame that starts a flow, ;; If any of the deleted is a frame that starts a flow,
@ -432,6 +437,7 @@
changes (-> (pcb/empty-changes it page-id) changes (-> (pcb/empty-changes it page-id)
(pcb/with-page page) (pcb/with-page page)
(pcb/with-objects objects) (pcb/with-objects objects)
(pcb/set-page-option :guides guides)
(pcb/remove-objects all-children) (pcb/remove-objects all-children)
(pcb/remove-objects ids) (pcb/remove-objects ids)
(pcb/remove-objects empty-parents) (pcb/remove-objects empty-parents)

View file

@ -274,6 +274,7 @@
(declare prepare-duplicate-frame-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)
(defn prepare-duplicate-changes (defn prepare-duplicate-changes
"Prepare objects to duplicate: generate new id, give them unique names, "Prepare objects to duplicate: generate new id, give them unique names,
@ -302,7 +303,9 @@
delta) delta)
init-changes))] init-changes))]
(prepare-duplicate-flows changes shapes page ids-map))) (-> changes
(prepare-duplicate-flows shapes page ids-map)
(prepare-duplicate-guides shapes page ids-map delta))))
(defn- prepare-duplicate-change (defn- prepare-duplicate-change
[changes objects page unames update-unames! ids-map shape delta] [changes objects page unames update-unames! ids-map shape delta]
@ -362,20 +365,20 @@
changes (-> (pcb/add-object changes new-obj {:ignore-touched true}) changes (-> (pcb/add-object changes new-obj {:ignore-touched true})
(pcb/amend-last-change #(assoc % :old-id (:id obj))))] (pcb/amend-last-change #(assoc % :old-id (:id obj))))]
(reduce (fn [changes child] (reduce (fn [changes child]
(prepare-duplicate-shape-change changes (prepare-duplicate-shape-change changes
objects objects
page page
unames unames
update-unames! update-unames!
ids-map ids-map
child child
delta delta
frame-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]
@ -399,6 +402,32 @@
(pcb/update-page-option changes :flows update-flows)) (pcb/update-page-option changes :flows update-flows))
changes))) changes)))
(defn- prepare-duplicate-guides
[changes shapes page ids-map delta]
(let [guides (get-in page [:options :guides])
frames (->> shapes
(filter #(= (:type %) :frame)))
new-guides (reduce
(fn [g frame]
(let [new-id (ids-map (:id frame))
new-frame (-> frame
(geom/move delta))
new-guides (->> guides
(vals)
(filter #(= (:frame-id %) (:id frame)))
(map #(-> %
(assoc :id (uuid/next))
(assoc :frame-id new-id)
(assoc :position (if (= (:axis %) :x)
(+ (:position %) (- (:x new-frame) (:x frame)))
(+ (:position %) (- (:y new-frame) (:y frame))))))))]
(conj g
(into {} (map (juxt :id identity) new-guides)))))
guides
frames)]
(-> (pcb/with-page changes page)
(pcb/set-page-option :guides new-guides))))
(defn duplicate-changes-update-indices (defn duplicate-changes-update-indices
"Updates the changes to correctly set the indexes of the duplicated objects, "Updates the changes to correctly set the indexes of the duplicated objects,
depending on the index of the original object respect their parent." depending on the index of the original object respect their parent."