mirror of
https://github.com/penpot/penpot.git
synced 2025-05-21 21:06:47 +02:00
🐛 Fix bad undo group associations
This commit is contained in:
parent
ce341a05e1
commit
47b432e307
4 changed files with 17 additions and 10 deletions
|
@ -87,7 +87,8 @@
|
||||||
{:redo-changes (d/concat-vec (:redo-changes changes1) (:redo-changes changes2))
|
{:redo-changes (d/concat-vec (:redo-changes changes1) (:redo-changes changes2))
|
||||||
:undo-changes (d/concat-vec (:undo-changes changes1) (:undo-changes changes2))
|
:undo-changes (d/concat-vec (:undo-changes changes1) (:undo-changes changes2))
|
||||||
:origin (:origin changes1)
|
:origin (:origin changes1)
|
||||||
:undo-group (:undo-group changes1)})
|
:undo-group (:undo-group changes1)
|
||||||
|
:tags (:tags changes1)})
|
||||||
|
|
||||||
; TODO: remove this when not needed
|
; TODO: remove this when not needed
|
||||||
(defn- assert-page-id
|
(defn- assert-page-id
|
||||||
|
|
|
@ -45,7 +45,8 @@
|
||||||
add-undo-group? (and
|
add-undo-group? (and
|
||||||
(not (nil? undo-group))
|
(not (nil? undo-group))
|
||||||
(= (get-in changes [:redo-changes 0 :type]) :mod-obj)
|
(= (get-in changes [:redo-changes 0 :type]) :mod-obj)
|
||||||
(= (get-in prev-item [:redo-changes 0 :type]) :add-obj))] ;; This is a copy-and-move with mouse+alt
|
(= (get-in prev-item [:redo-changes 0 :type]) :add-obj)
|
||||||
|
(contains? (:tags prev-item) :alt-duplication))] ;; This is a copy-and-move with mouse+alt
|
||||||
|
|
||||||
(cond-> changes add-undo-group? (assoc :undo-group undo-group))))
|
(cond-> changes add-undo-group? (assoc :undo-group undo-group))))
|
||||||
|
|
||||||
|
@ -165,15 +166,15 @@
|
||||||
(defn commit-changes
|
(defn commit-changes
|
||||||
"Schedules a list of changes to execute now, and add the corresponding undo changes to
|
"Schedules a list of changes to execute now, and add the corresponding undo changes to
|
||||||
the undo stack.
|
the undo stack.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
- save-undo?: if set to false, do not add undo changes.
|
- save-undo?: if set to false, do not add undo changes.
|
||||||
- undo-group: if some consecutive changes (or even transactions) share the same
|
- undo-group: if some consecutive changes (or even transactions) share the same
|
||||||
undo-group, they will be undone or redone in a single step
|
undo-group, they will be undone or redone in a single step
|
||||||
"
|
"
|
||||||
[{:keys [redo-changes undo-changes
|
[{:keys [redo-changes undo-changes
|
||||||
origin save-undo? file-id undo-group stack-undo?]
|
origin save-undo? file-id undo-group tags stack-undo?]
|
||||||
:or {save-undo? true stack-undo? false undo-group (uuid/next)}}]
|
:or {save-undo? true stack-undo? false tags #{} undo-group (uuid/next)}}]
|
||||||
(log/debug :msg "commit-changes"
|
(log/debug :msg "commit-changes"
|
||||||
:js/undo-group (str undo-group)
|
:js/undo-group (str undo-group)
|
||||||
:js/redo-changes redo-changes
|
:js/redo-changes redo-changes
|
||||||
|
@ -192,6 +193,7 @@
|
||||||
:frames frames
|
:frames frames
|
||||||
:save-undo? save-undo?
|
:save-undo? save-undo?
|
||||||
:undo-group undo-group
|
:undo-group undo-group
|
||||||
|
:tags tags
|
||||||
:stack-undo? stack-undo?})
|
:stack-undo? stack-undo?})
|
||||||
|
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
|
@ -241,5 +243,6 @@
|
||||||
(when (and save-undo? (seq undo-changes))
|
(when (and save-undo? (seq undo-changes))
|
||||||
(let [entry {:undo-changes undo-changes
|
(let [entry {:undo-changes undo-changes
|
||||||
:redo-changes redo-changes
|
:redo-changes redo-changes
|
||||||
:undo-group undo-group}]
|
:undo-group undo-group
|
||||||
|
:tags tags}]
|
||||||
(rx/of (dwu/append-undo entry stack-undo?)))))))))))
|
(rx/of (dwu/append-undo entry stack-undo?)))))))))))
|
||||||
|
|
|
@ -575,7 +575,7 @@
|
||||||
(defn duplicate-selected
|
(defn duplicate-selected
|
||||||
([move-delta?]
|
([move-delta?]
|
||||||
(duplicate-selected move-delta? false))
|
(duplicate-selected move-delta? false))
|
||||||
([move-delta? add-undo-group?]
|
([move-delta? alt-duplication?]
|
||||||
(ptk/reify ::duplicate-selected
|
(ptk/reify ::duplicate-selected
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [it state _]
|
(watch [it state _]
|
||||||
|
@ -596,7 +596,9 @@
|
||||||
changes (->> (prepare-duplicate-changes objects page selected delta it libraries library-data)
|
changes (->> (prepare-duplicate-changes objects page selected delta it libraries library-data)
|
||||||
(duplicate-changes-update-indices objects selected))
|
(duplicate-changes-update-indices objects selected))
|
||||||
|
|
||||||
changes (cond-> changes add-undo-group? (assoc :undo-group (uuid/random)))
|
tags (or (:tags changes) #{})
|
||||||
|
|
||||||
|
changes (cond-> changes alt-duplication? (assoc :tags (conj tags :alt-duplication)))
|
||||||
|
|
||||||
id-original (first selected)
|
id-original (first selected)
|
||||||
|
|
||||||
|
|
|
@ -67,11 +67,12 @@
|
||||||
(add-undo-entry state entry))))
|
(add-undo-entry state entry))))
|
||||||
|
|
||||||
(defn- accumulate-undo-entry
|
(defn- accumulate-undo-entry
|
||||||
[state {:keys [undo-changes redo-changes undo-group]}]
|
[state {:keys [undo-changes redo-changes undo-group tags]}]
|
||||||
(-> state
|
(-> state
|
||||||
(update-in [:workspace-undo :transaction :undo-changes] #(into undo-changes %))
|
(update-in [:workspace-undo :transaction :undo-changes] #(into undo-changes %))
|
||||||
(update-in [:workspace-undo :transaction :redo-changes] #(into % redo-changes))
|
(update-in [:workspace-undo :transaction :redo-changes] #(into % redo-changes))
|
||||||
(assoc-in [:workspace-undo :transaction :undo-group] undo-group)))
|
(assoc-in [:workspace-undo :transaction :undo-group] undo-group)
|
||||||
|
(assoc-in [:workspace-undo :transaction :tags] tags)))
|
||||||
|
|
||||||
(defn append-undo
|
(defn append-undo
|
||||||
[entry stack?]
|
[entry stack?]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue