0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-27 00:49:28 -05:00

🐛 Fixes problem when moving child

This commit is contained in:
alonso.torres 2020-04-07 14:33:05 +02:00
parent 185b1f9ee1
commit 20c6ae867b
3 changed files with 29 additions and 6 deletions

View file

@ -37,6 +37,23 @@
(:id shape)))] (:id shape)))]
(some check-parenthood (vals objects)))) (some check-parenthood (vals objects))))
(defn calculate-child-parent-map
[objects]
(let [red-fn
(fn [acc {:keys [id shapes]}]
;; Insert every pair shape -> parent into accumulated value
(into acc (map #(vector % id) (or shapes []))))]
(reduce red-fn {} (vals objects))))
(defn get-all-parents
[shape-id objects]
(let [child->parent (calculate-child-parent-map objects)
rec-fn (fn [cur result]
(if-let [parent (child->parent cur)]
(recur parent (conj result parent))
(vec (reverse result))))]
(rec-fn shape-id [])))
(defn replace-shapes (defn replace-shapes
"Replace inside shapes the value `to-replace-id` for the value in items keeping the same order. "Replace inside shapes the value `to-replace-id` for the value in items keeping the same order.
`to-replace-id` can be a set, a sequable or a single value. Any of these will be changed into a `to-replace-id` can be a set, a sequable or a single value. Any of these will be changed into a

View file

@ -1502,20 +1502,21 @@
(let [page-id (::page-id state) (let [page-id (::page-id state)
objects (get-in state [:workspace-data page-id :objects]) objects (get-in state [:workspace-data page-id :objects])
groups-to-adjust (->> ids groups-to-adjust (->> ids
(map #(helpers/get-parent % objects)) (mapcat #(reverse (helpers/get-all-parents % objects)))
(map #(get objects %)) (map #(get objects %))
(filter #(= (:type %) :group)) (filter #(= (:type %) :group))
(map #(:id %)) (map #(:id %))
distinct) distinct)
update-group update-group
(fn [group] (fn [state group]
(let [group-objects (map #(get objects %) (:shapes group)) (let [objects (get-in state [:workspace-data page-id :objects])
group-objects (map #(get objects %) (:shapes group))
selrect (geom/selection-rect group-objects)] selrect (geom/selection-rect group-objects)]
(merge group (select-keys selrect [:x :y :width :height])))) (merge group (select-keys selrect [:x :y :width :height]))))
reduce-fn reduce-fn
#(update-in %1 [:workspace-data page-id :objects %2] update-group)] #(update-in %1 [:workspace-data page-id :objects %2] (partial update-group %1))]
(reduce reduce-fn state groups-to-adjust))) (reduce reduce-fn state groups-to-adjust)))

View file

@ -250,10 +250,15 @@
[{:keys [shapes selected zoom] :as props}] [{:keys [shapes selected zoom] :as props}]
(let [shape (geom/selection-rect shapes) (let [shape (geom/selection-rect shapes)
on-resize #(do (dom/stop-propagation %2) on-resize #(do (dom/stop-propagation %2)
(st/emit! (start-resize %1 selected shape)))] (st/emit! (start-resize %1 selected shape)))
on-rotate #(do (dom/stop-propagation %)
(println "ROTATE!"))]
[:& controls {:shape shape [:& controls {:shape shape
:zoom zoom :zoom zoom
:on-resize on-resize}])) :on-resize on-resize
:on-rotate on-rotate}]))
(mf/defc single-selection-handlers (mf/defc single-selection-handlers
[{:keys [shape zoom objects] :as props}] [{:keys [shape zoom objects] :as props}]