mirror of
https://github.com/penpot/penpot.git
synced 2025-03-10 14:51:37 -05:00
🐛 Fix copy paste a very nested boards inside itself
This commit is contained in:
parent
47481986a1
commit
8f2e3d5fe4
2 changed files with 53 additions and 39 deletions
|
@ -1,4 +1,9 @@
|
||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
## 1.17.3
|
||||||
|
|
||||||
|
### :bug: Bugs fixed
|
||||||
|
- Fix copy and paste very nested inside itself [Taiga #4848](https://tree.taiga.io/project/penpot/issue/4848)
|
||||||
|
|
||||||
## 1.17.2
|
## 1.17.2
|
||||||
|
|
||||||
### :bug: Bugs fixed
|
### :bug: Bugs fixed
|
||||||
|
@ -8,10 +13,6 @@
|
||||||
- Fix correct behaviour for space-around and added space-evenly option
|
- Fix correct behaviour for space-around and added space-evenly option
|
||||||
- Fix duplicate with alt and undo only undo one step [Taiga #4746](https://tree.taiga.io/project/penpot/issue/4746)
|
- Fix duplicate with alt and undo only undo one step [Taiga #4746](https://tree.taiga.io/project/penpot/issue/4746)
|
||||||
- Fix problem creating frames inside layout [Taiga #4844](https://tree.taiga.io/project/penpot/issue/4844)
|
- Fix problem creating frames inside layout [Taiga #4844](https://tree.taiga.io/project/penpot/issue/4844)
|
||||||
|
|
||||||
## 1.17.2
|
|
||||||
|
|
||||||
### :bug: Bugs fixed
|
|
||||||
- Fix paste board inside itself [Taiga #4775](https://tree.taiga.io/project/penpot/issue/4775)
|
- Fix paste board inside itself [Taiga #4775](https://tree.taiga.io/project/penpot/issue/4775)
|
||||||
- Fix middle button panning can drag guides [Taiga #4266](https://tree.taiga.io/project/penpot/issue/4266)
|
- Fix middle button panning can drag guides [Taiga #4266](https://tree.taiga.io/project/penpot/issue/4266)
|
||||||
|
|
||||||
|
|
|
@ -429,7 +429,7 @@
|
||||||
name (cp/generate-unique-name unames (:name page))
|
name (cp/generate-unique-name unames (:name page))
|
||||||
|
|
||||||
no_thumbnails_objects (->> (:objects page)
|
no_thumbnails_objects (->> (:objects page)
|
||||||
(d/mapm (fn [_ val] (dissoc val :use-for-thumbnail?))))
|
(d/mapm (fn [_ val] (dissoc val :use-for-thumbnail?))))
|
||||||
|
|
||||||
page (-> page (assoc :name name :id id :objects no_thumbnails_objects))
|
page (-> page (assoc :name name :id id :objects no_thumbnails_objects))
|
||||||
|
|
||||||
|
@ -1099,13 +1099,13 @@
|
||||||
qparams {:page-id page-id}]
|
qparams {:page-id page-id}]
|
||||||
;; qparams {:page-id page-id :layout :assets}]
|
;; qparams {:page-id page-id :layout :assets}]
|
||||||
(rx/merge
|
(rx/merge
|
||||||
(rx/of (rt/nav :workspace pparams qparams))
|
(rx/of (rt/nav :workspace pparams qparams))
|
||||||
(->> stream
|
(->> stream
|
||||||
(rx/filter (ptk/type? ::dwv/initialize-viewport))
|
(rx/filter (ptk/type? ::dwv/initialize-viewport))
|
||||||
(rx/take 1)
|
(rx/take 1)
|
||||||
(rx/mapcat #(do
|
(rx/mapcat #(do
|
||||||
(on-page-selected)
|
(on-page-selected)
|
||||||
(rx/of (dws/select-shapes (lks/set shape-id)))))))))))))
|
(rx/of (dws/select-shapes (lks/set shape-id)))))))))))))
|
||||||
|
|
||||||
(defn go-to-component
|
(defn go-to-component
|
||||||
[component-id]
|
[component-id]
|
||||||
|
@ -1440,9 +1440,17 @@
|
||||||
(and (= 1 (count selected))
|
(and (= 1 (count selected))
|
||||||
(= :frame (get-in objects [(first selected) :type])))))
|
(= :frame (get-in objects [(first selected) :type])))))
|
||||||
|
|
||||||
(defn same-frame-from-selected? [state frame-id]
|
(defn get-tree-root-shapes [tree]
|
||||||
(let [selected (wsh/lookup-selected state)]
|
;; This fn gets a map of shapes and finds what shapes are parent of the rest
|
||||||
(contains? frame-id (first selected))))
|
(let [shapes-in-tree (vals tree)
|
||||||
|
shape-ids (keys tree)
|
||||||
|
parent-ids (set (map #(:parent-id %) shapes-in-tree))]
|
||||||
|
(->> shape-ids
|
||||||
|
(filter #(contains? parent-ids %)))))
|
||||||
|
|
||||||
|
(defn any-same-frame-from-selected? [state frame-ids]
|
||||||
|
(let [selected (first (wsh/lookup-selected state))]
|
||||||
|
(< 0 (count (filter #(= % selected) frame-ids)))))
|
||||||
|
|
||||||
(defn frame-same-size?
|
(defn frame-same-size?
|
||||||
[paste-obj frame-obj]
|
[paste-obj frame-obj]
|
||||||
|
@ -1491,22 +1499,27 @@
|
||||||
item))
|
item))
|
||||||
|
|
||||||
(calculate-paste-position [state mouse-pos in-viewport?]
|
(calculate-paste-position [state mouse-pos in-viewport?]
|
||||||
(let [page-objects (wsh/lookup-page-objects state)
|
(let [page-objects (wsh/lookup-page-objects state)
|
||||||
selected-objs (map #(get paste-objects %) selected)
|
selected-objs (map #(get paste-objects %) selected)
|
||||||
first-selected-obj (first selected-objs)
|
first-selected-obj (first selected-objs)
|
||||||
page-selected (wsh/lookup-selected state)
|
page-selected (wsh/lookup-selected state)
|
||||||
wrapper (gsh/selection-rect selected-objs)
|
wrapper (gsh/selection-rect selected-objs)
|
||||||
orig-pos (gpt/point (:x1 wrapper) (:y1 wrapper))
|
orig-pos (gpt/point (:x1 wrapper) (:y1 wrapper))
|
||||||
frame-id (first page-selected)
|
frame-id (first page-selected)
|
||||||
frame-object (get page-objects frame-id)
|
frame-object (get page-objects frame-id)
|
||||||
base (cph/get-base-shape page-objects page-selected)
|
base (cph/get-base-shape page-objects page-selected)
|
||||||
index (cph/get-position-on-parent page-objects (:id base))]
|
index (cph/get-position-on-parent page-objects (:id base))
|
||||||
|
tree-root (get-tree-root-shapes paste-objects)
|
||||||
|
only-one-root-shape? (and
|
||||||
|
(< 1 (count paste-objects))
|
||||||
|
(= 1 (count tree-root)))]
|
||||||
|
|
||||||
(cond
|
(cond
|
||||||
(selected-frame? state)
|
(selected-frame? state)
|
||||||
|
|
||||||
(if (or (same-frame-from-selected? state (first (vals paste-objects)))
|
(if (or (any-same-frame-from-selected? state (keys paste-objects))
|
||||||
(frame-same-size? paste-objects frame-object))
|
(and only-one-root-shape?
|
||||||
|
(frame-same-size? paste-objects (first tree-root))))
|
||||||
;; Paste next to selected frame, if selected is itself or of the same size as the copied
|
;; Paste next to selected frame, if selected is itself or of the same size as the copied
|
||||||
(let [selected-frame-obj (get page-objects (first page-selected))
|
(let [selected-frame-obj (get page-objects (first page-selected))
|
||||||
parent-id (:parent-id base)
|
parent-id (:parent-id base)
|
||||||
|
@ -1837,8 +1850,8 @@
|
||||||
(dwm/create-shapes-img pos media-obj))]
|
(dwm/create-shapes-img pos media-obj))]
|
||||||
|
|
||||||
(->> (rx/concat
|
(->> (rx/concat
|
||||||
(rx/of (update-remove-graphics index))
|
(rx/of (update-remove-graphics index))
|
||||||
(rx/map process-shapes shapes))
|
(rx/map process-shapes shapes))
|
||||||
(rx/catch #(do
|
(rx/catch #(do
|
||||||
(log/error :msg (str "Error removing " (:name media-obj))
|
(log/error :msg (str "Error removing " (:name media-obj))
|
||||||
:hint (ex-message %)
|
:hint (ex-message %)
|
||||||
|
@ -1872,15 +1885,15 @@
|
||||||
(ctst/generate-shape-grid media-points start-pos grid-gap)]
|
(ctst/generate-shape-grid media-points start-pos grid-gap)]
|
||||||
|
|
||||||
(rx/concat
|
(rx/concat
|
||||||
(rx/of (modal/show {:type :remove-graphics-dialog :file-name file-name})
|
(rx/of (modal/show {:type :remove-graphics-dialog :file-name file-name})
|
||||||
(initialize-remove-graphics (count media)))
|
(initialize-remove-graphics (count media)))
|
||||||
(when new-page?
|
(when new-page?
|
||||||
(rx/of (dch/commit-changes (-> (pcb/empty-changes it)
|
(rx/of (dch/commit-changes (-> (pcb/empty-changes it)
|
||||||
(pcb/set-save-undo? false)
|
(pcb/set-save-undo? false)
|
||||||
(pcb/add-page (:id page) page)))))
|
(pcb/add-page (:id page) page)))))
|
||||||
(rx/mapcat (partial remove-graphic it file-data' page)
|
(rx/mapcat (partial remove-graphic it file-data' page)
|
||||||
(rx/from (d/enumerate (d/zip media shape-grid))))
|
(rx/from (d/enumerate (d/zip media shape-grid))))
|
||||||
(rx/of (complete-remove-graphics)))))))
|
(rx/of (complete-remove-graphics)))))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Read only
|
;; Read only
|
||||||
|
|
Loading…
Add table
Reference in a new issue