From 8c3f90fe361ce166c12921981450a11bbbc7e6a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Thu, 1 Jun 2023 13:41:33 +0200 Subject: [PATCH] :bug: Fix erroneous touched state when delete a copy and then undo --- .../src/app/common/pages/changes_builder.cljc | 90 ++++++++++--------- .../src/app/main/data/workspace/shapes.cljs | 2 +- 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/common/src/app/common/pages/changes_builder.cljc b/common/src/app/common/pages/changes_builder.cljc index 37626cf8f8..56ba9e95b7 100644 --- a/common/src/app/common/pages/changes_builder.cljc +++ b/common/src/app/common/pages/changes_builder.cljc @@ -359,54 +359,56 @@ (apply-changes-local))))) (defn remove-objects - [changes ids] - (assert-page-id changes) - (assert-objects changes) - (let [page-id (::page-id (meta changes)) - objects (lookup-objects changes) + ([changes ids] (remove-objects changes ids nil)) + ([changes ids {:keys [ignore-touched] :or {ignore-touched false}}] + (assert-page-id changes) + (assert-objects changes) + (let [page-id (::page-id (meta changes)) + objects (lookup-objects changes) - add-redo-change - (fn [change-set id] - (conj change-set - {:type :del-obj - :page-id page-id - :id id})) + add-redo-change + (fn [change-set id] + (conj change-set + {:type :del-obj + :page-id page-id + :ignore-touched ignore-touched + :id id})) - add-undo-change-shape - (fn [change-set id] - (let [shape (get objects id)] - (d/preconj - change-set - {:type :add-obj - :id id - :page-id page-id - :parent-id (:frame-id shape) - :frame-id (:frame-id shape) - :index (cph/get-position-on-parent objects id) - :obj (cond-> shape - (contains? shape :shapes) - (assoc :shapes []))}))) + add-undo-change-shape + (fn [change-set id] + (let [shape (get objects id)] + (d/preconj + change-set + {:type :add-obj + :id id + :page-id page-id + :parent-id (:frame-id shape) + :frame-id (:frame-id shape) + :index (cph/get-position-on-parent objects id) + :obj (cond-> shape + (contains? shape :shapes) + (assoc :shapes []))}))) - add-undo-change-parent - (fn [change-set id] - (let [shape (get objects id) - prev-sibling (cph/get-prev-sibling objects (:id shape))] - (d/preconj - change-set - {:type :mov-objects - :page-id page-id - :parent-id (:parent-id shape) - :shapes [id] - :after-shape prev-sibling - :index 0 - :ignore-touched true})))] + add-undo-change-parent + (fn [change-set id] + (let [shape (get objects id) + prev-sibling (cph/get-prev-sibling objects (:id shape))] + (d/preconj + change-set + {:type :mov-objects + :page-id page-id + :parent-id (:parent-id shape) + :shapes [id] + :after-shape prev-sibling + :index 0 + :ignore-touched true})))] - (-> changes - (update :redo-changes #(reduce add-redo-change % ids)) - (update :undo-changes #(as-> % $ - (reduce add-undo-change-parent $ ids) - (reduce add-undo-change-shape $ ids))) - (apply-changes-local)))) + (-> changes + (update :redo-changes #(reduce add-redo-change % ids)) + (update :undo-changes #(as-> % $ + (reduce add-undo-change-parent $ ids) + (reduce add-undo-change-shape $ ids))) + (apply-changes-local))))) (defn resize-parents [changes ids] diff --git a/frontend/src/app/main/data/workspace/shapes.cljs b/frontend/src/app/main/data/workspace/shapes.cljs index 91d70542d4..4eb3056749 100644 --- a/frontend/src/app/main/data/workspace/shapes.cljs +++ b/frontend/src/app/main/data/workspace/shapes.cljs @@ -314,7 +314,7 @@ components-to-delete) changes (-> changes - (pcb/remove-objects all-children) + (pcb/remove-objects all-children {:ignore-touched true}) (pcb/remove-objects ids) (pcb/remove-objects empty-parents) (pcb/resize-parents all-parents)