0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-04-11 06:21:30 -05:00

🐛 Prevent to group with circular deps.

This commit is contained in:
Andrey Antukh 2021-01-26 16:49:42 +01:00 committed by Alonso Torres
parent 1c42ace096
commit bc655ed9ef

View file

@ -95,6 +95,20 @@
;; GROUPS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- clean-selected
"A helper that cleans selected from circular references."
[objects selected]
(loop [selected selected
id (first selected)
items (rest selected)]
(if-not id
selected
(recur (cond-> selected
(some #(contains? selected %) (cp/get-parents id objects))
(disj id))
(first items)
(rest items)))))
(def group-selected
(ptk/reify ::group-selected
ptk/WatchEvent
@ -102,6 +116,7 @@
(let [page-id (:current-page-id state)
objects (dwc/lookup-page-objects state page-id)
selected (get-in state [:workspace-local :selected])
selected (clean-selected objects selected)
shapes (shapes-for-grouping objects selected)]
(when-not (empty? shapes)
(let [[group rchanges uchanges] (prepare-create-group page-id shapes "Group-" false)]