diff --git a/common/src/app/common/path/subpaths.cljc b/common/src/app/common/path/subpaths.cljc index 7dc19720d..202e273b1 100644 --- a/common/src/app/common/path/subpaths.cljc +++ b/common/src/app/common/path/subpaths.cljc @@ -73,9 +73,15 @@ (fn [subpaths current] (let [is-move? (= :move-to (:command current)) last-idx (dec (count subpaths))] - (if is-move? + (cond + is-move? (conj subpaths (make-subpath current)) - (update subpaths last-idx add-subpath-command current))))] + + (>= last-idx 0) + (update subpaths last-idx add-subpath-command current) + + :else + subpaths)))] (->> content (reduce reduce-subpath [])))) diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index 53127984d..3c2e7df94 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -432,36 +432,37 @@ (ptk/reify ::duplicate-selected ptk/WatchEvent (watch [it state _] - (let [page-id (:current-page-id state) - objects (wsh/lookup-page-objects state page-id) - selected (wsh/lookup-selected state) - delta (if (and move-delta? (= (count selected) 1)) - (let [obj (get objects (first selected))] - (calc-duplicate-delta obj state objects)) - (gpt/point 0 0)) + (when (nil? (get-in state [:workspace-local :transform])) + (let [page-id (:current-page-id state) + objects (wsh/lookup-page-objects state page-id) + selected (wsh/lookup-selected state) + delta (if (and move-delta? (= (count selected) 1)) + (let [obj (get objects (first selected))] + (calc-duplicate-delta obj state objects)) + (gpt/point 0 0)) - unames (dwc/retrieve-used-names objects) + unames (dwc/retrieve-used-names objects) - rchanges (->> (prepare-duplicate-changes objects page-id unames selected delta) - (duplicate-changes-update-indices objects selected)) + rchanges (->> (prepare-duplicate-changes objects page-id unames selected delta) + (duplicate-changes-update-indices objects selected)) - uchanges (mapv #(array-map :type :del-obj :page-id page-id :id (:id %)) - (reverse rchanges)) + uchanges (mapv #(array-map :type :del-obj :page-id page-id :id (:id %)) + (reverse rchanges)) - id-original (when (= (count selected) 1) (first selected)) + id-original (when (= (count selected) 1) (first selected)) - selected (->> rchanges - (filter #(selected (:old-id %))) - (map #(get-in % [:obj :id])) - (into (d/ordered-set))) + selected (->> rchanges + (filter #(selected (:old-id %))) + (map #(get-in % [:obj :id])) + (into (d/ordered-set))) - id-duplicated (when (= (count selected) 1) (first selected))] + id-duplicated (when (= (count selected) 1) (first selected))] - (rx/of (dch/commit-changes {:redo-changes rchanges - :undo-changes uchanges - :origin it}) - (select-shapes selected) - (memorize-duplicated id-original id-duplicated)))))) + (rx/of (dch/commit-changes {:redo-changes rchanges + :undo-changes uchanges + :origin it}) + (select-shapes selected) + (memorize-duplicated id-original id-duplicated))))))) (defn change-hover-state [id value]