0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-11 23:31:21 -05:00
This commit is contained in:
Andrey Antukh 2024-12-27 12:52:33 +01:00
parent 1a05cd0238
commit aa7d2fdc17
5 changed files with 50 additions and 60 deletions

View file

@ -43,7 +43,7 @@
(let [file-id (:current-file-id state)]
(lookup-page state file-id page-id)))
([state file-id page-id]
(dm/get-in state [:files file-id :pages-index page-id])))
(dm/get-in state [:files file-id :data :pages-index page-id])))
(defn lookup-page-objects
([state]

View file

@ -23,7 +23,7 @@
[app.main.ui.hooks.resize :refer [use-resize-observer]]
[app.main.ui.modal :refer [modal-container*]]
[app.main.ui.workspace.colorpicker]
[app.main.ui.workspace.context-menu :refer [context-menu]]
[app.main.ui.workspace.context-menu :refer [context-menu*]]
[app.main.ui.workspace.coordinates :as coordinates]
[app.main.ui.workspace.libraries]
[app.main.ui.workspace.nudge]
@ -34,7 +34,7 @@
[app.main.ui.workspace.sidebar.history :refer [history-toolbox]]
[app.main.ui.workspace.tokens.modals]
[app.main.ui.workspace.tokens.modals.themes]
[app.main.ui.workspace.viewport :refer [viewport]]
[app.main.ui.workspace.viewport :refer [viewport*]]
[app.util.debug :as dbg]
[app.util.dom :as dom]
[app.util.globals :as globals]
@ -43,25 +43,19 @@
[okulary.core :as l]
[rumext.v2 :as mf]))
(defn- make-file-ready-ref
(defn- make-workspace-ready-ref
[file-id]
(l/derived (fn [state]
(and (= file-id (:workspace-ready state))
(some? (dsh/lookup-file-data state file-id))))
st/state))
(defn- make-page-ready-ref
[page-id]
(l/derived (fn [state]
(and (some? page-id)
(= page-id (:current-page-id state))))
st/state))
(mf/defc workspace-content
{::mf/wrap-props false}
[{:keys [file layout page-id wglobal]}]
(mf/defc workspace-content*
{::mf/private true}
[{:keys [file layout page wglobal]}]
(let [palete-size (mf/use-state nil)
selected (mf/deref refs/selected-shapes)
page-id (:id page)
{:keys [vport] :as wlocal} (mf/deref refs/workspace-local)
{:keys [options-mode]} wglobal
@ -102,7 +96,9 @@
[:button {:on-click #(st/emit! dw/reinitialize-undo)} "CLEAR"]
[:& history-toolbox]])
[:& viewport {:file file
[:> viewport*
{:file file
:page page
:wlocal wlocal
:wglobal wglobal
:selected selected
@ -125,21 +121,17 @@
:page-id page-id}]])]))
(mf/defc workspace-loader*
{::mf/props :obj
::mf/private true}
{::mf/private true}
[]
[:> loader* {:title (tr "labels.loading")
:class (stl/css :workspace-loader)
:overlay true}])
(mf/defc workspace-page*
{::mf/props :obj
::mf/private true}
{::mf/private true}
[{:keys [page-id file layout wglobal]}]
(let [page-id (hooks/use-equal-memo page-id)
page-ready* (mf/with-memo [page-id]
(make-page-ready-ref page-id))
page-ready? (mf/deref page-ready*)]
page (mf/deref refs/workspace-page)]
(mf/with-effect []
(let [focus-out #(st/emit! (dw/workspace-focus-lost))
@ -150,13 +142,14 @@
(if (some? page-id)
(st/emit! (dw/initialize-page page-id))
(st/emit! (dcm/go-to-workspace ::rt/replace true)))
(fn []
(when (some? page-id)
(st/emit! (dw/finalize-page page-id)))))
(if ^boolean page-ready?
[:& workspace-content {:page-id page-id
:file file
(if (some? page)
[:> workspace-content* {:file file
:page page
:wglobal wglobal
:layout layout}]
[:& workspace-loader*])))
@ -185,11 +178,10 @@
read-only? (mf/deref refs/workspace-read-only?)
read-only? (or read-only? (not (:can-edit permissions)))
file-ready* (mf/with-memo [file-id]
(make-file-ready-ref file-id))
file-ready? (mf/deref file-ready*)
ready* (mf/with-memo [file-id]
(make-workspace-ready-ref file-id))
ready? (mf/deref ready*)
components-v2? (features/use-feature "components/v2")
design-tokens? (features/use-feature "design-tokens/v1")
background-color (:background-color wglobal)]
@ -212,21 +204,21 @@
(st/emit! ::dps/force-persist
(dw/finalize-workspace file-id))))
[:& (mf/provider ctx/current-project-id) {:value project-id}
[:& (mf/provider ctx/current-file-id) {:value file-id}
[:& (mf/provider ctx/current-page-id) {:value page-id}
[:& (mf/provider ctx/components-v2) {:value components-v2?}
[:& (mf/provider ctx/design-tokens) {:value design-tokens?}
[:& (mf/provider ctx/workspace-read-only?) {:value read-only?}
[:> (mf/provider ctx/current-project-id) {:value project-id}
[:> (mf/provider ctx/current-file-id) {:value file-id}
[:> (mf/provider ctx/current-page-id) {:value page-id}
[:> (mf/provider ctx/components-v2) {:value true}
[:> (mf/provider ctx/design-tokens) {:value design-tokens?}
[:> (mf/provider ctx/workspace-read-only?) {:value read-only?}
[:> modal-container*]
[:section {:class (stl/css :workspace)
:style {:background-color background-color
:touch-action "none"}}
[:& context-menu]
[:> context-menu*]
(if ^boolean file-ready?
(if ^boolean ready?
[:> workspace-page* {:page-id page-id
:file file
:wglobal wglobal
:layout layout}]
[:> workspace-loader* {}])]]]]]]]))
[:> workspace-loader*])]]]]]]]))

View file

@ -698,7 +698,7 @@
;; FIXME: optimize because it is rendered always
(mf/defc context-menu
(mf/defc context-menu*
[]
(let [mdata (mf/deref menu-ref)
top (- (get-in mdata [:position :y]) 20)

View file

@ -74,8 +74,8 @@
objects
selected))
(mf/defc viewport-classic
[{:keys [selected wglobal wlocal layout file palete-size] :as props}]
(mf/defc viewport-classic*
[{:keys [selected wglobal wlocal layout file page palete-size]}]
(let [;; When adding data from workspace-local revisit `app.main.ui.workspace` to check
;; that the new parameter is sent
{:keys [edit-path
@ -104,7 +104,6 @@
drawing (mf/deref refs/workspace-drawing)
focus (mf/deref refs/workspace-focus-selected)
page (mf/deref refs/workspace-page)
objects (get page :objects)
page-id (get page :id)
background (get page :background clr/canvas)
@ -158,7 +157,6 @@
drawing-tool (:tool drawing)
drawing-obj (:object drawing)
selected-frames (into #{} (map :frame-id) selected-shapes)
;; Only when we have all the selected shapes in one frame
@ -649,6 +647,7 @@
:modifiers modifiers
:shape frame
:view-only true}]))]
[:g.scrollbar-wrapper {:clipPath "url(#clip-handlers)"}
[:& scroll-bars/viewport-scrollbars
{:objects base-objects
@ -656,9 +655,9 @@
:vbox vbox
:bottom-padding (when palete-size (+ palete-size 8))}]]]]]))
(mf/defc viewport
(mf/defc viewport*
[props]
(let [wasm-renderer-enabled? (features/use-feature "render-wasm/v1")]
(if ^boolean wasm-renderer-enabled?
[:& viewport.wasm/viewport props]
[:& viewport-classic props])))
[:> viewport.wasm/viewport* props]
[:> viewport-classic* props])))

View file

@ -74,8 +74,8 @@
objects
selected))
(mf/defc viewport
[{:keys [selected wglobal wlocal layout file palete-size] :as props}]
(mf/defc viewport*
[{:keys [selected wglobal wlocal layout file page palete-size]}]
(let [;; When adding data from workspace-local revisit `app.main.ui.workspace` to check
;; that the new parameter is sent
{:keys [edit-path
@ -102,7 +102,6 @@
drawing (mf/deref refs/workspace-drawing)
focus (mf/deref refs/workspace-focus-selected)
page (mf/deref refs/workspace-page)
objects (get page :objects)
page-id (get page :id)
background (get page :background clr/canvas)