🐛 Fix problem when ctrl+d when moving

This commit is contained in:
alonso.torres 2021-10-08 13:37:06 +02:00
parent 350c44f56f
commit 4bf5434e8f
2 changed files with 32 additions and 25 deletions

View file

@ -73,9 +73,15 @@
(fn [subpaths current] (fn [subpaths current]
(let [is-move? (= :move-to (:command current)) (let [is-move? (= :move-to (:command current))
last-idx (dec (count subpaths))] last-idx (dec (count subpaths))]
(if is-move? (cond
is-move?
(conj subpaths (make-subpath current)) (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 (->> content
(reduce reduce-subpath [])))) (reduce reduce-subpath []))))

View file

@ -432,36 +432,37 @@
(ptk/reify ::duplicate-selected (ptk/reify ::duplicate-selected
ptk/WatchEvent ptk/WatchEvent
(watch [it state _] (watch [it state _]
(let [page-id (:current-page-id state) (when (nil? (get-in state [:workspace-local :transform]))
objects (wsh/lookup-page-objects state page-id) (let [page-id (:current-page-id state)
selected (wsh/lookup-selected state) objects (wsh/lookup-page-objects state page-id)
delta (if (and move-delta? (= (count selected) 1)) selected (wsh/lookup-selected state)
(let [obj (get objects (first selected))] delta (if (and move-delta? (= (count selected) 1))
(calc-duplicate-delta obj state objects)) (let [obj (get objects (first selected))]
(gpt/point 0 0)) (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) rchanges (->> (prepare-duplicate-changes objects page-id unames selected delta)
(duplicate-changes-update-indices objects selected)) (duplicate-changes-update-indices objects selected))
uchanges (mapv #(array-map :type :del-obj :page-id page-id :id (:id %)) uchanges (mapv #(array-map :type :del-obj :page-id page-id :id (:id %))
(reverse rchanges)) (reverse rchanges))
id-original (when (= (count selected) 1) (first selected)) id-original (when (= (count selected) 1) (first selected))
selected (->> rchanges selected (->> rchanges
(filter #(selected (:old-id %))) (filter #(selected (:old-id %)))
(map #(get-in % [:obj :id])) (map #(get-in % [:obj :id]))
(into (d/ordered-set))) (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 (rx/of (dch/commit-changes {:redo-changes rchanges
:undo-changes uchanges :undo-changes uchanges
:origin it}) :origin it})
(select-shapes selected) (select-shapes selected)
(memorize-duplicated id-original id-duplicated)))))) (memorize-duplicated id-original id-duplicated)))))))
(defn change-hover-state (defn change-hover-state
[id value] [id value]