diff --git a/CHANGES.md b/CHANGES.md index 473c1adb6..502e1ff7e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -43,6 +43,7 @@ ### :bug: Bugs fixed +- Fix duplicate multi selected elements [Taiga #3155](https://tree.taiga.io/project/penpot/issue/3155) - Avoid numeric inputs to allow big numbers [Taiga #2858](https://tree.taiga.io/project/penpot/issue/2858) - Fix component contex menu size [Taiga #2480](https://tree.taiga.io/project/penpot/issue/2480) - Add shadow to artboard make it lose the fill [Taiga #3139](https://tree.taiga.io/project/penpot/issue/3139) diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index 73fe95518..ff79bcb7e 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -483,30 +483,30 @@ (when (or (not move-delta?) (nil? (get-in state [:workspace-local :transform]))) (let [page (wsh/lookup-page state) objects (:objects page) - 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)) + selected (wsh/lookup-selected state)] + (when (seq selected) + (let [obj (get objects (first selected)) + delta (if move-delta? + (calc-duplicate-delta obj state objects) + (gpt/point 0 0)) - changes (->> (prepare-duplicate-changes objects page selected delta it) - (duplicate-changes-update-indices objects selected)) + changes (->> (prepare-duplicate-changes objects page selected delta it) + (duplicate-changes-update-indices objects selected)) - id-original (when (= (count selected) 1) (first selected)) + id-original (first selected) - selected (->> changes - :redo-changes - (filter #(= (:type %) :add-obj)) - (filter #(selected (:old-id %))) - (map #(get-in % [:obj :id])) - (into (d/ordered-set))) + selected (->> changes + :redo-changes + (filter #(= (:type %) :add-obj)) + (filter #(selected (:old-id %))) + (map #(get-in % [:obj :id])) + (into (d/ordered-set))) - id-duplicated (when (= (count selected) 1) (first selected))] - - ;; Warning: This order is important for the focus mode. - (rx/of (dch/commit-changes changes) - (select-shapes selected) - (memorize-duplicated id-original id-duplicated))))))) + id-duplicated (first selected)] + ;; Warning: This order is important for the focus mode. + (rx/of (dch/commit-changes changes) + (select-shapes selected) + (memorize-duplicated id-original id-duplicated))))))))) (defn change-hover-state [id value]