mirror of
https://github.com/penpot/penpot.git
synced 2025-05-25 12:26:12 +02:00
🐛 Fix shape hidden/blocked attrs handling.
This commit is contained in:
parent
d6d38283e7
commit
e056da04c3
3 changed files with 30 additions and 98 deletions
|
@ -1851,62 +1851,10 @@
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(let [page-id (::page-id state)]
|
(let [page-id (::page-id state)]
|
||||||
(update-in state [:workspace-data page-id :objects id :segments index] gpt/add delta)))))
|
(update-in state [:workspace-data page-id :objects id :segments index]
|
||||||
|
gpt/add delta)))))
|
||||||
|
|
||||||
;; --- Shape Visibility
|
|
||||||
|
|
||||||
(declare impl-update-shape-hidden)
|
|
||||||
|
|
||||||
(defn hide-shape
|
|
||||||
[id]
|
|
||||||
(us/verify ::us/uuid id)
|
|
||||||
(ptk/reify ::hide-shape
|
|
||||||
IBatchedChange
|
|
||||||
ptk/UpdateEvent
|
|
||||||
(update [_ state]
|
|
||||||
(impl-update-shape-hidden state id true))))
|
|
||||||
|
|
||||||
(defn show-shape
|
|
||||||
[id]
|
|
||||||
(us/verify ::us/uuid id)
|
|
||||||
(ptk/reify ::show-shape
|
|
||||||
IBatchedChange
|
|
||||||
ptk/UpdateEvent
|
|
||||||
(update [_ state]
|
|
||||||
(impl-update-shape-hidden state id false))))
|
|
||||||
|
|
||||||
(defn hide-frame
|
|
||||||
[id]
|
|
||||||
(us/verify ::us/uuid id)
|
|
||||||
(ptk/reify ::hide-shape
|
|
||||||
IBatchedChange
|
|
||||||
ptk/UpdateEvent
|
|
||||||
(update [_ state]
|
|
||||||
(let [hide #(impl-update-shape-hidden %1 %2 true)
|
|
||||||
page-id (::page-id state)
|
|
||||||
objects (get-in state [:workspace-data page-id :objects])
|
|
||||||
frame (get objects id)]
|
|
||||||
(reduce hide state (cons id (:shapes frame)))))))
|
|
||||||
|
|
||||||
(defn show-frame
|
|
||||||
[id]
|
|
||||||
(us/verify ::us/uuid id)
|
|
||||||
(ptk/reify ::hide-shape
|
|
||||||
IBatchedChange
|
|
||||||
ptk/UpdateEvent
|
|
||||||
(update [_ state]
|
|
||||||
(let [show #(impl-update-shape-hidden %1 %2 false)
|
|
||||||
page-id (::page-id state)
|
|
||||||
objects (get-in state [:workspace-data page-id :objects])
|
|
||||||
frame (get objects id)]
|
|
||||||
(reduce show state (cons id (:shapes frame)))))))
|
|
||||||
|
|
||||||
(defn- impl-update-shape-hidden
|
|
||||||
[state id hidden?]
|
|
||||||
(let [page-id (::page-id state)]
|
|
||||||
(assoc-in state [:workspace-data page-id :objects id :hidden] hidden?)))
|
|
||||||
|
|
||||||
|
;; --- Shape attrs (Layers Sidebar)
|
||||||
|
|
||||||
(defn toggle-collapse
|
(defn toggle-collapse
|
||||||
[id]
|
[id]
|
||||||
|
@ -1921,38 +1869,21 @@
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(update state :workspace-local dissoc :expanded))))
|
(update state :workspace-local dissoc :expanded))))
|
||||||
|
|
||||||
;; --- Shape Blocking
|
(defn recursive-assign
|
||||||
|
"A helper for assign recursively a shape attr."
|
||||||
(declare impl-update-shape-blocked)
|
[id attr value]
|
||||||
|
(ptk/reify ::recursive-assign
|
||||||
(defn block-shape
|
|
||||||
[id]
|
|
||||||
(us/verify ::us/uuid id)
|
|
||||||
(ptk/reify ::hide-shape
|
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(impl-update-shape-blocked state id true))))
|
(let [page-id (get-in state [:workspace-page :id])
|
||||||
|
objects (get-in state [:workspace-data page-id :objects])
|
||||||
(defn unblock-shape
|
childs (helpers/get-children id objects)]
|
||||||
[id]
|
(update-in state [:workspace-data page-id :objects]
|
||||||
(us/verify ::us/uuid id)
|
(fn [objects]
|
||||||
(ptk/reify ::hide-shape
|
(reduce (fn [objects id]
|
||||||
ptk/UpdateEvent
|
(assoc-in objects [id attr] value))
|
||||||
(update [_ state]
|
objects
|
||||||
(impl-update-shape-blocked state id false))))
|
(conj childs id))))))))
|
||||||
|
|
||||||
(defn- impl-update-shape-blocked
|
|
||||||
[state id blocked?]
|
|
||||||
(let [page-id (::page-id state)
|
|
||||||
obj (get-in state [:workspace-data page-id :objects id])
|
|
||||||
obj (assoc obj :blocked blocked?)
|
|
||||||
state (assoc-in state [:workspace-data page-id :objects id] obj)]
|
|
||||||
(if (= :frame (:type obj))
|
|
||||||
(update-in state [:workspace-data page-id :objects]
|
|
||||||
(fn [objects]
|
|
||||||
(reduce #(update %1 %2 assoc :blocked blocked?) objects (:shapes obj))))
|
|
||||||
state)))
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Navigation
|
;; Navigation
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
|
|
||||||
(mf/defc shape-context-menu
|
(mf/defc shape-context-menu
|
||||||
[{:keys [mdata] :as props}]
|
[{:keys [mdata] :as props}]
|
||||||
(let [shape (:shape mdata)
|
(let [{:keys [id] :as shape} (:shape mdata)
|
||||||
selected (:selected mdata)
|
selected (:selected mdata)
|
||||||
|
|
||||||
do-duplicate #(st/emit! dw/duplicate-selected)
|
do-duplicate #(st/emit! dw/duplicate-selected)
|
||||||
|
@ -54,10 +54,10 @@
|
||||||
do-bring-to-front #(st/emit! (dw/vertical-order-selected :top))
|
do-bring-to-front #(st/emit! (dw/vertical-order-selected :top))
|
||||||
do-send-backward #(st/emit! (dw/vertical-order-selected :down))
|
do-send-backward #(st/emit! (dw/vertical-order-selected :down))
|
||||||
do-send-to-back #(st/emit! (dw/vertical-order-selected :bottom))
|
do-send-to-back #(st/emit! (dw/vertical-order-selected :bottom))
|
||||||
do-show-shape #(st/emit! (dw/show-shape (:id shape)))
|
do-show-shape #(st/emit! (dw/recursive-assign id :hidden false))
|
||||||
do-hide-shape #(st/emit! (dw/hide-shape (:id shape)))
|
do-hide-shape #(st/emit! (dw/recursive-assign id :hidden true))
|
||||||
do-lock-shape #(st/emit! (dw/block-shape (:id shape)))
|
do-lock-shape #(st/emit! (dw/recursive-assign id :blocked true))
|
||||||
do-unlock-shape #(st/emit! (dw/unblock-shape (:id shape)))
|
do-unlock-shape #(st/emit! (dw/recursive-assign id :blocked false))
|
||||||
do-create-group #(st/emit! dw/create-group)
|
do-create-group #(st/emit! dw/create-group)
|
||||||
do-remove-group #(st/emit! dw/remove-group)]
|
do-remove-group #(st/emit! dw/remove-group)]
|
||||||
[:*
|
[:*
|
||||||
|
|
|
@ -83,11 +83,12 @@
|
||||||
|
|
||||||
(mf/defc layer-item
|
(mf/defc layer-item
|
||||||
[{:keys [index item selected objects] :as props}]
|
[{:keys [index item selected objects] :as props}]
|
||||||
(let [selected? (contains? selected (:id item))
|
(let [id (:id item)
|
||||||
|
selected? (contains? selected id)
|
||||||
|
|
||||||
expanded-iref (mf/use-memo
|
expanded-iref (mf/use-memo
|
||||||
(mf/deps (:id item))
|
(mf/deps id)
|
||||||
(make-collapsed-iref (:id item)))
|
(make-collapsed-iref id))
|
||||||
|
|
||||||
expanded? (mf/deref expanded-iref)
|
expanded? (mf/deref expanded-iref)
|
||||||
|
|
||||||
|
@ -96,21 +97,21 @@
|
||||||
(dom/stop-propagation event)
|
(dom/stop-propagation event)
|
||||||
(if (and expanded? (kbd/shift? event))
|
(if (and expanded? (kbd/shift? event))
|
||||||
(st/emit! dw/collapse-all)
|
(st/emit! dw/collapse-all)
|
||||||
(st/emit! (dw/toggle-collapse (:id item)))))
|
(st/emit! (dw/toggle-collapse id))))
|
||||||
|
|
||||||
toggle-blocking
|
toggle-blocking
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(dom/stop-propagation event)
|
(dom/stop-propagation event)
|
||||||
(if (:blocked item)
|
(if (:blocked item)
|
||||||
(st/emit! (dw/unblock-shape (:id item)))
|
(st/emit! (dw/recursive-assign id :blocked false))
|
||||||
(st/emit! (dw/block-shape (:id item)))))
|
(st/emit! (dw/recursive-assign id :blocked true))))
|
||||||
|
|
||||||
toggle-visibility
|
toggle-visibility
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(dom/stop-propagation event)
|
(dom/stop-propagation event)
|
||||||
(if (:hidden item)
|
(if (:hidden item)
|
||||||
(st/emit! (dw/show-shape (:id item)))
|
(st/emit! (dw/recursive-assign id :hidden false))
|
||||||
(st/emit! (dw/hide-shape (:id item)))))
|
(st/emit! (dw/recursive-assign id :hidden true))))
|
||||||
|
|
||||||
select-shape
|
select-shape
|
||||||
(fn [event]
|
(fn [event]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue