From bc655ed9efdfae979a3f6df11475cc69cf680988 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 26 Jan 2021 16:49:42 +0100 Subject: [PATCH] :bug: Prevent to group with circular deps. --- frontend/src/app/main/data/workspace/groups.cljs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/frontend/src/app/main/data/workspace/groups.cljs b/frontend/src/app/main/data/workspace/groups.cljs index fe79a6c07..4924d8e69 100644 --- a/frontend/src/app/main/data/workspace/groups.cljs +++ b/frontend/src/app/main/data/workspace/groups.cljs @@ -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)]