diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index eaeb4b972..386e8f3b9 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -220,6 +220,7 @@ selrect (get-in state [:workspace-local :selrect]) blocked? (fn [id] (get-in objects [id :blocked] false))] (rx/merge + (when selrect (->> (uw/ask! {:cmd :selection/query :page-id page-id @@ -232,6 +233,7 @@ (defn select-inside-group [group-id position] + (ptk/reify ::select-inside-group ptk/WatchEvent (watch [_ state _] @@ -249,6 +251,7 @@ (when selected (rx/of (select-shape (:id selected)))))))) + ;; --- Duplicate Shapes (declare prepare-duplicate-change) (declare prepare-duplicate-frame-change) @@ -322,39 +325,40 @@ (defn- prepare-duplicate-shape-change [objects page-id names obj delta frame-id parent-id] - (let [id (uuid/next) - name (dwc/generate-unique-name names (:name obj)) - renamed-obj (assoc obj :id id :name name) - moved-obj (geom/move renamed-obj delta) - parent-id (or parent-id frame-id) + (when (some? obj) + (let [id (uuid/next) + name (dwc/generate-unique-name names (:name obj)) + renamed-obj (assoc obj :id id :name name) + moved-obj (geom/move renamed-obj delta) + parent-id (or parent-id frame-id) - children-changes - (loop [names names - result [] - cid (first (:shapes obj)) - cids (rest (:shapes obj))] - (if (nil? cid) - result - (let [obj (get objects cid) - changes (prepare-duplicate-shape-change objects page-id names obj delta frame-id id)] - (recur - (into names (map change->name changes)) - (into result changes) - (first cids) - (rest cids))))) + children-changes + (loop [names names + result [] + cid (first (:shapes obj)) + cids (rest (:shapes obj))] + (if (nil? cid) + result + (let [obj (get objects cid) + changes (prepare-duplicate-shape-change objects page-id names obj delta frame-id id)] + (recur + (into names (map change->name changes)) + (into result changes) + (first cids) + (rest cids))))) - reframed-obj (-> moved-obj - (assoc :frame-id frame-id) - (dissoc :shapes))] - (into [{:type :add-obj - :id id - :page-id page-id - :old-id (:id obj) - :frame-id frame-id - :parent-id parent-id - :ignore-touched true - :obj (dissoc reframed-obj :shapes)}] - children-changes))) + reframed-obj (-> moved-obj + (assoc :frame-id frame-id) + (dissoc :shapes))] + (into [{:type :add-obj + :id id + :page-id page-id + :old-id (:id obj) + :frame-id frame-id + :parent-id parent-id + :ignore-touched true + :obj (dissoc reframed-obj :shapes)}] + children-changes)))) (defn- prepare-duplicate-frame-change [objects page-id names obj delta] @@ -367,7 +371,7 @@ (assoc :id frame-id) (assoc :name frame-name) (assoc :frame-id uuid/zero) - (dissoc :shapes) + (assoc :shapes []) (geom/move delta)) fch {:type :add-obj diff --git a/frontend/src/app/main/ui/viewer.cljs b/frontend/src/app/main/ui/viewer.cljs index 7f6e493a1..212301613 100644 --- a/frontend/src/app/main/ui/viewer.cljs +++ b/frontend/src/app/main/ui/viewer.cljs @@ -136,7 +136,7 @@ (gpt/negate) (gmt/translate-matrix)) - update-fn #(assoc-in %1 [%2 :modifiers :displacement] modifier) + update-fn #(d/update-when %1 %2 assoc-in [:modifiers :displacement] modifier) objects (->> (d/concat [frame-id] (cp/get-children frame-id objects)) (reduce update-fn objects))