♻️ Minor fixes on viewer role on workspace

This commit is contained in:
Pablo Alba 2024-10-17 16:12:05 +02:00
parent 536c25c206
commit 66530ca868
4 changed files with 68 additions and 62 deletions

View file

@ -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

View file

@ -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}]))]]]))

View file

@ -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

View file

@ -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?]