From a399363b08c4fe1a00858b365505a594ba687e57 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Wed, 24 Mar 2021 11:37:01 +0100 Subject: [PATCH] :bug: Fixes problem with snaps --- frontend/src/app/main/snap.cljs | 14 ++++++++------ .../app/main/ui/workspace/viewport/hooks.cljs | 16 ++++++++++++---- .../ui/workspace/viewport/snap_distances.cljs | 1 + 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/main/snap.cljs b/frontend/src/app/main/snap.cljs index 5e78f1dd32..cc81aae2b4 100644 --- a/frontend/src/app/main/snap.cljs +++ b/frontend/src/app/main/snap.cljs @@ -9,16 +9,17 @@ (ns app.main.snap (:require - [clojure.set :as set] - [beicon.core :as rx] - [app.common.uuid :refer [zero]] - [app.common.math :as mth] [app.common.data :as d] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] - [app.main.worker :as uw] + [app.common.math :as mth] + [app.common.pages :as cp] + [app.common.uuid :refer [zero]] [app.main.refs :as refs] - [app.util.geom.snap-points :as sp])) + [app.main.worker :as uw] + [app.util.geom.snap-points :as sp] + [beicon.core :as rx] + [clojure.set :as set])) (defonce ^:private snap-accuracy 5) (defonce ^:private snap-distance-accuracy 10) @@ -186,6 +187,7 @@ :frame-id (->> shapes first :frame-id) :include-frames? true :rect area-selrect}) + (rx/map #(cp/clean-loops objects %)) (rx/map #(set/difference % (into #{} (map :id shapes)))) (rx/map (fn [ids] (map #(get objects %) ids))))) diff --git a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs index c5b28f6a71..34d1acfcbe 100644 --- a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs @@ -101,8 +101,13 @@ :rect rect :include-frames? true})))) + ;; We use ref so we don't recreate the stream on a change + transform-ref (mf/use-ref nil) + over-shapes-stream (->> move-stream + ;; When transforming shapes we stop querying the worker + (rx/filter #(not (some? (mf/ref-val transform-ref)))) (rx/switch-map query-point)) roots (mf/use-memo @@ -111,9 +116,13 @@ (let [roots-ids (cp/clean-loops objects selected)] (->> roots-ids (mapv #(get objects %))))))] + (mf/use-effect + (mf/deps transform) + #(mf/set-ref-val! transform-ref transform)) + (hooks/use-stream over-shapes-stream - (mf/deps page-id objects transform selected @ctrl?) + (mf/deps page-id objects selected @ctrl?) (fn [ids] (let [remove-id? (into #{} (mapcat #(cp/get-parents % objects)) selected) remove-id? (if @ctrl? @@ -122,9 +131,8 @@ (filterv #(= :group (get-in objects [% :type]))))) remove-id?) ids (->> ids (filterv (comp not remove-id?)))] - (when (not transform) - (reset! hover (get objects (first ids))) - (reset! hover-ids ids))))))) + (reset! hover (get objects (first ids))) + (reset! hover-ids ids)))))) (defn setup-viewport-modifiers [modifiers selected objects render-ref] (let [roots (mf/use-memo diff --git a/frontend/src/app/main/ui/workspace/viewport/snap_distances.cljs b/frontend/src/app/main/ui/workspace/viewport/snap_distances.cljs index 46051017ed..ad0825adae 100644 --- a/frontend/src/app/main/ui/workspace/viewport/snap_distances.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/snap_distances.cljs @@ -232,6 +232,7 @@ :frame-id (:id frame) :include-frames? true :rect rect}) + (rx/map #(cp/clean-loops @refs/workspace-page-objects %)) (rx/map #(set/difference % selected)) (rx/map #(->> % (map (partial get @refs/workspace-page-objects))))) (rx/of nil))))]