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

🐛 Fixes problem when moving parent to children group

This commit is contained in:
alonso.torres 2021-02-03 15:25:33 +01:00 committed by Andrey Antukh
parent d66452423f
commit b056cc35e4
3 changed files with 26 additions and 0 deletions

View file

@ -61,6 +61,7 @@
(d/export helpers/set-touched-group)
(d/export helpers/touched-group?)
(d/export helpers/get-base-shape)
(d/export helpers/is-parent?)
;; Process changes
(d/export changes/process-changes)

View file

@ -376,3 +376,25 @@
;; The first id will be the top-most
(get objects (first sorted-ids))))
(defn is-parent?
"Check if `parent-candidate` is parent of `shape-id`"
[objects shape-id parent-candidate]
(loop [current (get objects parent-candidate)
done #{}
pending (:shapes current)]
(cond
(contains? done (:id current))
(recur (get objects (first pending))
done
(rest pending))
(empty? pending) false
(and current (contains? (set (:shapes current)) shape-id)) true
:else
(recur (get objects (first pending))
(conj done (:id current))
(concat (rest pending) (:shapes current))))))

View file

@ -822,6 +822,9 @@
;; Ignore any shape whose parent is also intented to be moved
ids (cp/clean-loops objects ids)
;; If we try to move a parent into a child we remove it
ids (filter #(not (cp/is-parent? objects parent-id %)) ids)
parents (loop [res #{parent-id}
ids (seq ids)]
(if (nil? ids)