🐛 Add function to reparent orphan shapes

This commit is contained in:
Pablo Alba 2022-12-27 07:03:12 +01:00
parent 83c8e7f03a
commit 4fc3f316e0
3 changed files with 35 additions and 4 deletions

View file

@ -696,7 +696,7 @@
(pcb/resize-parents parents)))) (pcb/resize-parents parents))))
(defn relocate-shapes (defn relocate-shapes
[ids parent-id to-index] [ids parent-id to-index & [ignore-parents?]]
(us/verify (s/coll-of ::us/uuid) ids) (us/verify (s/coll-of ::us/uuid) ids)
(us/verify ::us/uuid parent-id) (us/verify ::us/uuid parent-id)
(us/verify number? to-index) (us/verify number? to-index)
@ -712,7 +712,9 @@
;; If we try to move a parent into a child we remove it ;; If we try to move a parent into a child we remove it
ids (filter #(not (cph/is-parent? objects parent-id %)) ids) ids (filter #(not (cph/is-parent? objects parent-id %)) ids)
parents (into #{parent-id} (map #(cph/get-parent-id objects %)) ids) parents (if ignore-parents?
#{parent-id}
(into #{parent-id} (map #(cph/get-parent-id objects %)) ids))
groups-to-delete groups-to-delete
(loop [current-id (first parents) (loop [current-id (first parents)
@ -1832,6 +1834,21 @@
(rx/empty))))) (rx/empty)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Orphan Shapes
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn fix-orphan-shapes
[]
(ptk/reify ::fix-orphan-shapes
ptk/WatchEvent
(watch [_ state _]
(let [orphans (set (into [] (keys (wsh/find-orphan-shapes state))))]
(rx/of (relocate-shapes orphans uuid/zero 0 true))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Inspect ;; Inspect
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View file

@ -11,7 +11,8 @@
[app.common.geom.point :as gpt] [app.common.geom.point :as gpt]
[app.common.geom.shapes :as gsh] [app.common.geom.shapes :as gsh]
[app.common.pages.helpers :as cph] [app.common.pages.helpers :as cph]
[app.common.path.commands :as upc])) [app.common.path.commands :as upc]
[app.common.uuid :as uuid]))
(defn lookup-page (defn lookup-page
([state] ([state]
@ -146,4 +147,14 @@
(let [{:keys [x y width height]} (get-in state [:workspace-local :vbox])] (let [{:keys [x y width height]} (get-in state [:workspace-local :vbox])]
(gpt/point (+ x (/ width 2)) (+ y (/ height 2))))) (gpt/point (+ x (/ width 2)) (+ y (/ height 2)))))
(defn find-orphan-shapes
([state]
(find-orphan-shapes state (:current-page-id state)))
([state page-id]
(let [objects (lookup-page-objects state page-id)
objects (filter (fn [item]
(and
(not= (key item) uuid/zero)
(not (contains? objects (:parent-id (val item))))))
objects)]
objects)))

View file

@ -346,3 +346,6 @@
[read-only?] [read-only?]
(st/emit! (dw/set-workspace-read-only read-only?))) (st/emit! (dw/set-workspace-read-only read-only?)))
(defn ^:export fix-orphan-shapes
[]
(st/emit! (dw/fix-orphan-shapes)))