mirror of
https://github.com/penpot/penpot.git
synced 2025-05-07 18:15:54 +02:00
🐛 Fixes problems with pages in workspace.
This commit is contained in:
parent
c5e617271c
commit
aaaf099a3f
4 changed files with 33 additions and 19 deletions
|
@ -190,7 +190,10 @@
|
||||||
(ptk/reify ::initialize-page
|
(ptk/reify ::initialize-page
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(let [local (get-in state [:workspace-cache page-id] workspace-local-default)
|
(let [prev-local (get state :workspace-local)
|
||||||
|
local (-> state
|
||||||
|
(get-in [:workspace-cache page-id] workspace-local-default)
|
||||||
|
(merge (select-keys prev-local [:vbox :vport :zoom])))
|
||||||
page (-> (get-in state [:workspace-data :pages-index page-id])
|
page (-> (get-in state [:workspace-data :pages-index page-id])
|
||||||
(select-keys [:id :name]))]
|
(select-keys [:id :name]))]
|
||||||
(assoc state
|
(assoc state
|
||||||
|
@ -311,7 +314,7 @@
|
||||||
objects (dwc/lookup-page-objects state page-id)
|
objects (dwc/lookup-page-objects state page-id)
|
||||||
shapes (cph/select-toplevel-shapes objects {:include-frames? true})
|
shapes (cph/select-toplevel-shapes objects {:include-frames? true})
|
||||||
srect (geom/selection-rect shapes)
|
srect (geom/selection-rect shapes)
|
||||||
local (assoc local :vport size)]
|
local (assoc local :vport size :zoom 1)]
|
||||||
(cond
|
(cond
|
||||||
(or (not (mth/finite? (:width srect)))
|
(or (not (mth/finite? (:width srect)))
|
||||||
(not (mth/finite? (:height srect))))
|
(not (mth/finite? (:height srect))))
|
||||||
|
|
|
@ -88,7 +88,10 @@
|
||||||
(st/emitf (dw/finalize-page page-id))))
|
(st/emitf (dw/finalize-page page-id))))
|
||||||
|
|
||||||
(when page
|
(when page
|
||||||
[:& workspace-content {:file file :layout layout :local local}])))
|
[:& workspace-content {:key page-id
|
||||||
|
:file file
|
||||||
|
:layout layout
|
||||||
|
:local local}])))
|
||||||
|
|
||||||
(mf/defc workspace-loader
|
(mf/defc workspace-loader
|
||||||
[]
|
[]
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
id (:id page)
|
id (:id page)
|
||||||
|
|
||||||
delete-fn (mf/use-callback (mf/deps id) #(st/emit! (dw/delete-page id)))
|
delete-fn (mf/use-callback (mf/deps id) #(st/emit! (dw/delete-page id)))
|
||||||
on-delete (mf/use-callback (mf/deps id) #(modal/show! :confirm-dialog {:on-accept delete-fn}))
|
on-delete (mf/use-callback (mf/deps id) #(modal/show! :confirm {:on-accept delete-fn}))
|
||||||
navigate-fn (mf/use-callback (mf/deps id) #(st/emit! (dw/go-to-page id)))
|
navigate-fn (mf/use-callback (mf/deps id) #(st/emit! (dw/go-to-page id)))
|
||||||
|
|
||||||
on-double-click
|
on-double-click
|
||||||
|
|
|
@ -461,8 +461,10 @@
|
||||||
on-resize
|
on-resize
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(let [node (mf/ref-val viewport-ref)
|
(let [node (mf/ref-val viewport-ref)
|
||||||
prnt (dom/get-parent node)]
|
prnt (dom/get-parent node)
|
||||||
(st/emit! (dw/update-viewport-size (dom/get-client-size prnt)))))
|
size (dom/get-client-size prnt)]
|
||||||
|
;; We schedule the event so it fires after `initialize-page` event
|
||||||
|
(timers/schedule #(st/emit! (dw/update-viewport-size size)))))
|
||||||
|
|
||||||
options (mf/deref refs/workspace-page-options)]
|
options (mf/deref refs/workspace-page-options)]
|
||||||
|
|
||||||
|
@ -471,20 +473,26 @@
|
||||||
(let [node (mf/ref-val viewport-ref)
|
(let [node (mf/ref-val viewport-ref)
|
||||||
prnt (dom/get-parent node)
|
prnt (dom/get-parent node)
|
||||||
|
|
||||||
key1 (events/listen (dom/get-root) EventType.KEYDOWN on-key-down)
|
keys [(events/listen (dom/get-root) EventType.KEYDOWN on-key-down)
|
||||||
key2 (events/listen (dom/get-root) EventType.KEYUP on-key-up)
|
(events/listen (dom/get-root) EventType.KEYUP on-key-up)
|
||||||
key3 (events/listen node EventType.MOUSEMOVE on-mouse-move)
|
(events/listen node EventType.MOUSEMOVE on-mouse-move)
|
||||||
;; bind with passive=false to allow the event to be cancelled
|
;; bind with passive=false to allow the event to be cancelled
|
||||||
;; https://stackoverflow.com/a/57582286/3219895
|
;; https://stackoverflow.com/a/57582286/3219895
|
||||||
key4 (events/listen js/window EventType.WHEEL on-mouse-wheel #js {:passive false})
|
(events/listen js/window EventType.WHEEL on-mouse-wheel #js {:passive false})
|
||||||
key5 (events/listen js/window EventType.RESIZE on-resize)]
|
(events/listen js/window EventType.RESIZE on-resize)]]
|
||||||
(st/emit! (dw/initialize-viewport (dom/get-client-size prnt)))
|
|
||||||
(fn []
|
(fn []
|
||||||
(events/unlistenByKey key1)
|
(doseq [key keys]
|
||||||
(events/unlistenByKey key2)
|
(events/unlistenByKey key))))))
|
||||||
(events/unlistenByKey key3)
|
|
||||||
(events/unlistenByKey key4)
|
(mf/use-layout-effect
|
||||||
(events/unlistenByKey key5)))))
|
(fn []
|
||||||
|
(mf/deps page-id)
|
||||||
|
(let [node (mf/ref-val viewport-ref)
|
||||||
|
prnt (dom/get-parent node)
|
||||||
|
size (dom/get-client-size prnt)]
|
||||||
|
;; We schedule the event so it fires after `initialize-page` event
|
||||||
|
(timers/schedule #(st/emit! (dw/initialize-viewport size))))))
|
||||||
|
|
||||||
(mf/use-layout-effect (mf/deps layout) on-resize)
|
(mf/use-layout-effect (mf/deps layout) on-resize)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue