mirror of
https://github.com/penpot/penpot.git
synced 2025-07-26 04:07:21 +02:00
♻️ Minor fixes on viewer role on workspace
This commit is contained in:
parent
536c25c206
commit
66530ca868
4 changed files with 68 additions and 62 deletions
|
@ -328,7 +328,7 @@
|
||||||
:toggle-focus-mode {:command "f"
|
:toggle-focus-mode {:command "f"
|
||||||
:tooltip "F"
|
:tooltip "F"
|
||||||
:subsections [:basics :tools]
|
:subsections [:basics :tools]
|
||||||
:fn #(emit-when-no-readonly (dw/toggle-focus-mode))}
|
:fn #(st/emit! (dw/toggle-focus-mode))}
|
||||||
|
|
||||||
;; ITEM ALIGNMENT
|
;; ITEM ALIGNMENT
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
[app.main.store :as st]
|
[app.main.store :as st]
|
||||||
[app.main.ui.components.dropdown :refer [dropdown]]
|
[app.main.ui.components.dropdown :refer [dropdown]]
|
||||||
[app.main.ui.components.shape-icon :as sic]
|
[app.main.ui.components.shape-icon :as sic]
|
||||||
|
[app.main.ui.context :as ctx]
|
||||||
[app.main.ui.icons :as i]
|
[app.main.ui.icons :as i]
|
||||||
[app.main.ui.workspace.sidebar.assets.common :as cmm]
|
[app.main.ui.workspace.sidebar.assets.common :as cmm]
|
||||||
[app.util.dom :as dom]
|
[app.util.dom :as dom]
|
||||||
|
@ -534,16 +535,17 @@
|
||||||
:on-click do-duplicate}]]))
|
:on-click do-duplicate}]]))
|
||||||
|
|
||||||
(mf/defc viewport-context-menu
|
(mf/defc viewport-context-menu
|
||||||
[]
|
[{:keys [read-only?]}]
|
||||||
(let [focus (mf/deref refs/workspace-focus-selected)
|
(let [focus (mf/deref refs/workspace-focus-selected)
|
||||||
do-paste #(st/emit! (dw/paste-from-clipboard))
|
do-paste #(st/emit! (dw/paste-from-clipboard))
|
||||||
do-hide-ui #(st/emit! (-> (dw/toggle-layout-flag :hide-ui)
|
do-hide-ui #(st/emit! (-> (dw/toggle-layout-flag :hide-ui)
|
||||||
(vary-meta assoc ::ev/origin "workspace-context-menu")))
|
(vary-meta assoc ::ev/origin "workspace-context-menu")))
|
||||||
do-toggle-focus-mode #(st/emit! (dw/toggle-focus-mode))]
|
do-toggle-focus-mode #(st/emit! (dw/toggle-focus-mode))]
|
||||||
[:*
|
[:*
|
||||||
|
(when-not read-only?
|
||||||
[:& menu-entry {:title (tr "workspace.shape.menu.paste")
|
[:& menu-entry {:title (tr "workspace.shape.menu.paste")
|
||||||
:shortcut (sc/get-tooltip :paste)
|
:shortcut (sc/get-tooltip :paste)
|
||||||
:on-click do-paste}]
|
:on-click do-paste}])
|
||||||
[:& menu-entry {:title (tr "workspace.shape.menu.hide-ui")
|
[:& menu-entry {:title (tr "workspace.shape.menu.hide-ui")
|
||||||
:shortcut (sc/get-tooltip :hide-ui)
|
:shortcut (sc/get-tooltip :hide-ui)
|
||||||
:on-click do-hide-ui}]
|
:on-click do-hide-ui}]
|
||||||
|
@ -643,7 +645,8 @@
|
||||||
(let [mdata (mf/deref menu-ref)
|
(let [mdata (mf/deref menu-ref)
|
||||||
top (- (get-in mdata [:position :y]) 20)
|
top (- (get-in mdata [:position :y]) 20)
|
||||||
left (get-in mdata [:position :x])
|
left (get-in mdata [:position :x])
|
||||||
dropdown-ref (mf/use-ref)]
|
dropdown-ref (mf/use-ref)
|
||||||
|
read-only? (mf/use-ctx ctx/workspace-read-only?)]
|
||||||
|
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
(mf/deps mdata)
|
(mf/deps mdata)
|
||||||
|
@ -666,9 +669,11 @@
|
||||||
:on-context-menu prevent-default}
|
:on-context-menu prevent-default}
|
||||||
|
|
||||||
[:ul {:class (stl/css :context-list)}
|
[:ul {:class (stl/css :context-list)}
|
||||||
|
(if read-only?
|
||||||
|
[:& viewport-context-menu {:mdata mdata :read-only? read-only?}]
|
||||||
(case (:kind mdata)
|
(case (:kind mdata)
|
||||||
:shape [:& shape-context-menu {:mdata mdata}]
|
:shape [:& shape-context-menu {:mdata mdata}]
|
||||||
:page [:& page-item-context-menu {:mdata mdata}]
|
:page [:& page-item-context-menu {:mdata mdata}]
|
||||||
:grid-track [:& grid-track-context-menu {:mdata mdata}]
|
:grid-track [:& grid-track-context-menu {:mdata mdata}]
|
||||||
:grid-cells [:& grid-cells-context-menu {:mdata mdata}]
|
:grid-cells [:& grid-cells-context-menu {:mdata mdata}]
|
||||||
[:& viewport-context-menu {:mdata mdata}])]]]))
|
[:& viewport-context-menu {:mdata mdata}]))]]]))
|
||||||
|
|
|
@ -414,7 +414,7 @@
|
||||||
(mf/defc edit-menu
|
(mf/defc edit-menu
|
||||||
{::mf/wrap-props false
|
{::mf/wrap-props false
|
||||||
::mf/wrap [mf/memo]}
|
::mf/wrap [mf/memo]}
|
||||||
[{:keys [on-close]}]
|
[{:keys [on-close user-viewer?]}]
|
||||||
(let [select-all (mf/use-fn #(st/emit! (dw/select-all)))
|
(let [select-all (mf/use-fn #(st/emit! (dw/select-all)))
|
||||||
undo (mf/use-fn #(st/emit! dwu/undo))
|
undo (mf/use-fn #(st/emit! dwu/undo))
|
||||||
redo (mf/use-fn #(st/emit! dwu/redo))]
|
redo (mf/use-fn #(st/emit! dwu/redo))]
|
||||||
|
@ -438,6 +438,7 @@
|
||||||
:key sc}
|
:key sc}
|
||||||
sc])]]
|
sc])]]
|
||||||
|
|
||||||
|
(when-not :user-viewer? user-viewer?
|
||||||
[:> dropdown-menu-item* {:class (stl/css :submenu-item)
|
[:> dropdown-menu-item* {:class (stl/css :submenu-item)
|
||||||
:on-click undo
|
:on-click undo
|
||||||
:on-key-down (fn [event]
|
:on-key-down (fn [event]
|
||||||
|
@ -449,8 +450,9 @@
|
||||||
(for [sc (scd/split-sc (sc/get-tooltip :undo))]
|
(for [sc (scd/split-sc (sc/get-tooltip :undo))]
|
||||||
[:span {:class (stl/css :shortcut-key)
|
[:span {:class (stl/css :shortcut-key)
|
||||||
:key sc}
|
:key sc}
|
||||||
sc])]]
|
sc])]])
|
||||||
|
|
||||||
|
(when-not :user-viewer? user-viewer?
|
||||||
[:> dropdown-menu-item* {:class (stl/css :submenu-item)
|
[:> dropdown-menu-item* {:class (stl/css :submenu-item)
|
||||||
:on-click redo
|
:on-click redo
|
||||||
:on-key-down (fn [event]
|
:on-key-down (fn [event]
|
||||||
|
@ -463,7 +465,7 @@
|
||||||
(for [sc (scd/split-sc (sc/get-tooltip :redo))]
|
(for [sc (scd/split-sc (sc/get-tooltip :redo))]
|
||||||
[:span {:class (stl/css :shortcut-key)
|
[:span {:class (stl/css :shortcut-key)
|
||||||
:key sc}
|
:key sc}
|
||||||
sc])]]]))
|
sc])]])]))
|
||||||
|
|
||||||
(mf/defc file-menu
|
(mf/defc file-menu
|
||||||
{::mf/wrap-props false}
|
{::mf/wrap-props false}
|
||||||
|
@ -748,7 +750,6 @@
|
||||||
[:span {:class (stl/css :item-name)} (tr "workspace.header.menu.option.file")]
|
[:span {:class (stl/css :item-name)} (tr "workspace.header.menu.option.file")]
|
||||||
[:span {:class (stl/css :open-arrow)} i/arrow]]
|
[:span {:class (stl/css :open-arrow)} i/arrow]]
|
||||||
|
|
||||||
(when-not user-viewer?
|
|
||||||
[:> dropdown-menu-item* {:class (stl/css :menu-item)
|
[:> dropdown-menu-item* {:class (stl/css :menu-item)
|
||||||
:on-click on-menu-click
|
:on-click on-menu-click
|
||||||
:on-key-down (fn [event]
|
:on-key-down (fn [event]
|
||||||
|
@ -758,7 +759,7 @@
|
||||||
:data-testid "edit"
|
:data-testid "edit"
|
||||||
:id "file-menu-edit"}
|
:id "file-menu-edit"}
|
||||||
[:span {:class (stl/css :item-name)} (tr "workspace.header.menu.option.edit")]
|
[:span {:class (stl/css :item-name)} (tr "workspace.header.menu.option.edit")]
|
||||||
[:span {:class (stl/css :open-arrow)} i/arrow]])
|
[:span {:class (stl/css :open-arrow)} i/arrow]]
|
||||||
|
|
||||||
[:> dropdown-menu-item* {:class (stl/css :menu-item)
|
[:> dropdown-menu-item* {:class (stl/css :menu-item)
|
||||||
:on-click on-menu-click
|
:on-click on-menu-click
|
||||||
|
@ -815,7 +816,8 @@
|
||||||
|
|
||||||
:edit
|
:edit
|
||||||
[:& edit-menu
|
[:& edit-menu
|
||||||
{:on-close close-sub-menu}]
|
{:on-close close-sub-menu
|
||||||
|
:user-viewer? user-viewer?}]
|
||||||
|
|
||||||
:view
|
:view
|
||||||
[:& view-menu
|
[:& view-menu
|
||||||
|
|
|
@ -240,20 +240,19 @@
|
||||||
(mf/deps @hover @hover-ids workspace-read-only?)
|
(mf/deps @hover @hover-ids workspace-read-only?)
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(dom/prevent-default event)
|
(dom/prevent-default event)
|
||||||
(when-not workspace-read-only?
|
;;(when-not workspace-read-only?
|
||||||
(when (or (dom/class? (dom/get-target event) "viewport-controls")
|
(when (or (dom/class? (dom/get-target event) "viewport-controls")
|
||||||
(dom/child? (dom/get-target event) (dom/query ".grid-layout-editor"))
|
(dom/child? (dom/get-target event) (dom/query ".grid-layout-editor"))
|
||||||
(dom/class? (dom/get-target event) "viewport-selrect")
|
(dom/class? (dom/get-target event) "viewport-selrect"))
|
||||||
workspace-read-only?)
|
|
||||||
(let [position (dom/get-client-position event)]
|
(let [position (dom/get-client-position event)]
|
||||||
;; Delayed callback because we need to wait to the previous context menu to be closed
|
;; Delayed callback because we need to wait to the previous context menu to be closed
|
||||||
(ts/schedule
|
(ts/schedule
|
||||||
#(st/emit!
|
#(st/emit!
|
||||||
(if (some? @hover)
|
(if (and (not workspace-read-only?) (some? @hover))
|
||||||
(dw/show-shape-context-menu {:position position
|
(dw/show-shape-context-menu {:position position
|
||||||
:shape @hover
|
:shape @hover
|
||||||
:hover-ids @hover-ids})
|
:hover-ids @hover-ids})
|
||||||
(dw/show-context-menu {:position position}))))))))))
|
(dw/show-context-menu {:position position})))))))))
|
||||||
|
|
||||||
(defn on-menu-selected
|
(defn on-menu-selected
|
||||||
[hover hover-ids selected workspace-read-only?]
|
[hover hover-ids selected workspace-read-only?]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue