diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 27fb5de7f..d9f445bfb 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -190,7 +190,10 @@ (ptk/reify ::initialize-page ptk/UpdateEvent (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]) (select-keys [:id :name]))] (assoc state @@ -311,7 +314,7 @@ objects (dwc/lookup-page-objects state page-id) shapes (cph/select-toplevel-shapes objects {:include-frames? true}) srect (geom/selection-rect shapes) - local (assoc local :vport size)] + local (assoc local :vport size :zoom 1)] (cond (or (not (mth/finite? (:width srect))) (not (mth/finite? (:height srect)))) diff --git a/frontend/src/app/main/ui/workspace.cljs b/frontend/src/app/main/ui/workspace.cljs index 9ffd35b51..aa3cb8023 100644 --- a/frontend/src/app/main/ui/workspace.cljs +++ b/frontend/src/app/main/ui/workspace.cljs @@ -88,7 +88,10 @@ (st/emitf (dw/finalize-page page-id)))) (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 [] diff --git a/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs b/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs index a9e178b3d..dc3ec8b11 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs @@ -34,7 +34,7 @@ id (:id page) 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))) on-double-click diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs index 914b9437e..88290eafb 100644 --- a/frontend/src/app/main/ui/workspace/viewport.cljs +++ b/frontend/src/app/main/ui/workspace/viewport.cljs @@ -461,8 +461,10 @@ on-resize (fn [event] (let [node (mf/ref-val viewport-ref) - prnt (dom/get-parent node)] - (st/emit! (dw/update-viewport-size (dom/get-client-size prnt))))) + 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/update-viewport-size size))))) options (mf/deref refs/workspace-page-options)] @@ -471,20 +473,26 @@ (let [node (mf/ref-val viewport-ref) prnt (dom/get-parent node) - key1 (events/listen (dom/get-root) EventType.KEYDOWN on-key-down) - key2 (events/listen (dom/get-root) EventType.KEYUP on-key-up) - key3 (events/listen node EventType.MOUSEMOVE on-mouse-move) - ;; bind with passive=false to allow the event to be cancelled - ;; https://stackoverflow.com/a/57582286/3219895 - key4 (events/listen js/window EventType.WHEEL on-mouse-wheel #js {:passive false}) - key5 (events/listen js/window EventType.RESIZE on-resize)] - (st/emit! (dw/initialize-viewport (dom/get-client-size prnt))) + keys [(events/listen (dom/get-root) EventType.KEYDOWN on-key-down) + (events/listen (dom/get-root) EventType.KEYUP on-key-up) + (events/listen node EventType.MOUSEMOVE on-mouse-move) + ;; bind with passive=false to allow the event to be cancelled + ;; https://stackoverflow.com/a/57582286/3219895 + (events/listen js/window EventType.WHEEL on-mouse-wheel #js {:passive false}) + (events/listen js/window EventType.RESIZE on-resize)]] + (fn [] - (events/unlistenByKey key1) - (events/unlistenByKey key2) - (events/unlistenByKey key3) - (events/unlistenByKey key4) - (events/unlistenByKey key5))))) + (doseq [key keys] + (events/unlistenByKey key)))))) + + (mf/use-layout-effect + (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)