0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-08 16:00:19 -05:00

🐛 Remove interactions when the destination artboard is deleted

This commit is contained in:
Andrés Moya 2021-05-05 17:04:02 +02:00 committed by Andrey Antukh
parent e241273a1e
commit af23d62568
4 changed files with 47 additions and 4 deletions

View file

@ -4,6 +4,9 @@
### :sparkles: New features
### :bug: Bugs fixed
- Remove interactions when the destination artboard is deleted [Taiga #1656](https://tree.taiga.io/project/penpot/issue/1656)
### :arrow_up: Deps updates
### :boom: Breaking changes
### :heart: Community contributions by (Thank you!)

View file

@ -8,7 +8,7 @@
(:require
[app.common.uuid :as uuid]))
(def file-version 6)
(def file-version 7)
(def default-color "#b1b2b5") ;; $color-gray-20
(def root uuid/zero)

View file

@ -163,3 +163,19 @@
(-> data
(update :components #(d/mapm update-container %))
(update :pages-index #(d/mapm update-container %)))))
;; Remove interactions pointing to deleted frames
(defmethod migrate 7
[data]
(letfn [(update-object [page _ object]
(d/update-when object :interactions
(fn [interactions]
(filterv #(get-in page [:objects (:destination %)])
interactions))))
(update-page [_ page]
(update page :objects #(d/mapm (partial update-object page) %)))]
(update data :pages-index #(d/mapm update-page %))))

View file

@ -331,7 +331,6 @@
:shapes [shape-id]})))]
(rx/of (dch/commit-changes rchanges uchanges {:commit-local? true}))))))
(defn delete-shapes
[ids]
(us/assert (s/coll-of ::us/uuid) ids)
@ -366,6 +365,12 @@
#{}
ids)
interacting-shapes
(filter (fn [shape]
(let [interactions (:interactions shape)]
(some ids (map :destination interactions))))
(vals objects))
rchanges
(d/concat
(reduce (fn [res id]
@ -391,7 +396,18 @@
:operations [{:type :set
:attr :masked-group?
:val false}])
groups-to-unmask))
groups-to-unmask)
(map #(array-map
:type :mod-obj
:page-id page-id
:id (:id %)
:operations [{:type :set
:attr :interactions
:val (vec (remove (fn [interaction]
(contains? ids (:destination interaction)))
(:interactions %)))}])
interacting-shapes))
uchanges
(d/concat
@ -430,7 +446,15 @@
:operations [{:type :set
:attr :masked-group?
:val true}])
groups-to-unmask))]
groups-to-unmask)
(map #(array-map
:type :mod-obj
:page-id page-id
:id (:id %)
:operations [{:type :set
:attr :interactions
:val (:interactions %)}])
interacting-shapes))]
;; (println "================ rchanges")
;; (cljs.pprint/pprint rchanges)