From 66530ca86850af8b77f7483b06bed77936b7521f Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Thu, 17 Oct 2024 16:12:05 +0200 Subject: [PATCH] :recycle: Minor fixes on viewer role on workspace --- .../app/main/data/workspace/shortcuts.cljs | 2 +- .../app/main/ui/workspace/context_menu.cljs | 27 ++++--- .../src/app/main/ui/workspace/main_menu.cljs | 76 ++++++++++--------- .../main/ui/workspace/viewport/actions.cljs | 25 +++--- 4 files changed, 68 insertions(+), 62 deletions(-) diff --git a/frontend/src/app/main/data/workspace/shortcuts.cljs b/frontend/src/app/main/data/workspace/shortcuts.cljs index 444ed499e1..99ecf28fe6 100644 --- a/frontend/src/app/main/data/workspace/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/shortcuts.cljs @@ -328,7 +328,7 @@ :toggle-focus-mode {:command "f" :tooltip "F" :subsections [:basics :tools] - :fn #(emit-when-no-readonly (dw/toggle-focus-mode))} + :fn #(st/emit! (dw/toggle-focus-mode))} ;; ITEM ALIGNMENT diff --git a/frontend/src/app/main/ui/workspace/context_menu.cljs b/frontend/src/app/main/ui/workspace/context_menu.cljs index d64b6589ed..c5c5599f9f 100644 --- a/frontend/src/app/main/ui/workspace/context_menu.cljs +++ b/frontend/src/app/main/ui/workspace/context_menu.cljs @@ -31,6 +31,7 @@ [app.main.store :as st] [app.main.ui.components.dropdown :refer [dropdown]] [app.main.ui.components.shape-icon :as sic] + [app.main.ui.context :as ctx] [app.main.ui.icons :as i] [app.main.ui.workspace.sidebar.assets.common :as cmm] [app.util.dom :as dom] @@ -534,16 +535,17 @@ :on-click do-duplicate}]])) (mf/defc viewport-context-menu - [] + [{:keys [read-only?]}] (let [focus (mf/deref refs/workspace-focus-selected) do-paste #(st/emit! (dw/paste-from-clipboard)) do-hide-ui #(st/emit! (-> (dw/toggle-layout-flag :hide-ui) (vary-meta assoc ::ev/origin "workspace-context-menu"))) do-toggle-focus-mode #(st/emit! (dw/toggle-focus-mode))] [:* - [:& menu-entry {:title (tr "workspace.shape.menu.paste") - :shortcut (sc/get-tooltip :paste) - :on-click do-paste}] + (when-not read-only? + [:& menu-entry {:title (tr "workspace.shape.menu.paste") + :shortcut (sc/get-tooltip :paste) + :on-click do-paste}]) [:& menu-entry {:title (tr "workspace.shape.menu.hide-ui") :shortcut (sc/get-tooltip :hide-ui) :on-click do-hide-ui}] @@ -643,7 +645,8 @@ (let [mdata (mf/deref menu-ref) top (- (get-in mdata [:position :y]) 20) 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/deps mdata) @@ -666,9 +669,11 @@ :on-context-menu prevent-default} [:ul {:class (stl/css :context-list)} - (case (:kind mdata) - :shape [:& shape-context-menu {:mdata mdata}] - :page [:& page-item-context-menu {:mdata mdata}] - :grid-track [:& grid-track-context-menu {:mdata mdata}] - :grid-cells [:& grid-cells-context-menu {:mdata mdata}] - [:& viewport-context-menu {:mdata mdata}])]]])) + (if read-only? + [:& viewport-context-menu {:mdata mdata :read-only? read-only?}] + (case (:kind mdata) + :shape [:& shape-context-menu {:mdata mdata}] + :page [:& page-item-context-menu {:mdata mdata}] + :grid-track [:& grid-track-context-menu {:mdata mdata}] + :grid-cells [:& grid-cells-context-menu {:mdata mdata}] + [:& viewport-context-menu {:mdata mdata}]))]]])) diff --git a/frontend/src/app/main/ui/workspace/main_menu.cljs b/frontend/src/app/main/ui/workspace/main_menu.cljs index 019d0a1975..83c4fe53d1 100644 --- a/frontend/src/app/main/ui/workspace/main_menu.cljs +++ b/frontend/src/app/main/ui/workspace/main_menu.cljs @@ -414,7 +414,7 @@ (mf/defc edit-menu {::mf/wrap-props false ::mf/wrap [mf/memo]} - [{:keys [on-close]}] + [{:keys [on-close user-viewer?]}] (let [select-all (mf/use-fn #(st/emit! (dw/select-all))) undo (mf/use-fn #(st/emit! dwu/undo)) redo (mf/use-fn #(st/emit! dwu/redo))] @@ -438,32 +438,34 @@ :key sc} sc])]] - [:> dropdown-menu-item* {:class (stl/css :submenu-item) - :on-click undo - :on-key-down (fn [event] - (when (kbd/enter? event) - (undo event))) - :id "file-menu-undo"} - [:span {:class (stl/css :item-name)} (tr "workspace.header.menu.undo")] - [:span {:class (stl/css :shortcut)} - (for [sc (scd/split-sc (sc/get-tooltip :undo))] - [:span {:class (stl/css :shortcut-key) - :key sc} - sc])]] + (when-not :user-viewer? user-viewer? + [:> dropdown-menu-item* {:class (stl/css :submenu-item) + :on-click undo + :on-key-down (fn [event] + (when (kbd/enter? event) + (undo event))) + :id "file-menu-undo"} + [:span {:class (stl/css :item-name)} (tr "workspace.header.menu.undo")] + [:span {:class (stl/css :shortcut)} + (for [sc (scd/split-sc (sc/get-tooltip :undo))] + [:span {:class (stl/css :shortcut-key) + :key sc} + sc])]]) - [:> dropdown-menu-item* {:class (stl/css :submenu-item) - :on-click redo - :on-key-down (fn [event] - (when (kbd/enter? event) - (redo event))) - :id "file-menu-redo"} - [:span {:class (stl/css :item-name)} (tr "workspace.header.menu.redo")] - [:span {:class (stl/css :shortcut)} + (when-not :user-viewer? user-viewer? + [:> dropdown-menu-item* {:class (stl/css :submenu-item) + :on-click redo + :on-key-down (fn [event] + (when (kbd/enter? event) + (redo event))) + :id "file-menu-redo"} + [:span {:class (stl/css :item-name)} (tr "workspace.header.menu.redo")] + [:span {:class (stl/css :shortcut)} - (for [sc (scd/split-sc (sc/get-tooltip :redo))] - [:span {:class (stl/css :shortcut-key) - :key sc} - sc])]]])) + (for [sc (scd/split-sc (sc/get-tooltip :redo))] + [:span {:class (stl/css :shortcut-key) + :key sc} + sc])]])])) (mf/defc file-menu {::mf/wrap-props false} @@ -748,17 +750,16 @@ [:span {:class (stl/css :item-name)} (tr "workspace.header.menu.option.file")] [:span {:class (stl/css :open-arrow)} i/arrow]] - (when-not user-viewer? - [:> dropdown-menu-item* {:class (stl/css :menu-item) - :on-click on-menu-click - :on-key-down (fn [event] - (when (kbd/enter? event) - (on-menu-click event))) - :on-pointer-enter on-menu-click - :data-testid "edit" - :id "file-menu-edit"} - [:span {:class (stl/css :item-name)} (tr "workspace.header.menu.option.edit")] - [:span {:class (stl/css :open-arrow)} i/arrow]]) + [:> dropdown-menu-item* {:class (stl/css :menu-item) + :on-click on-menu-click + :on-key-down (fn [event] + (when (kbd/enter? event) + (on-menu-click event))) + :on-pointer-enter on-menu-click + :data-testid "edit" + :id "file-menu-edit"} + [:span {:class (stl/css :item-name)} (tr "workspace.header.menu.option.edit")] + [:span {:class (stl/css :open-arrow)} i/arrow]] [:> dropdown-menu-item* {:class (stl/css :menu-item) :on-click on-menu-click @@ -815,7 +816,8 @@ :edit [:& edit-menu - {:on-close close-sub-menu}] + {:on-close close-sub-menu + :user-viewer? user-viewer?}] :view [:& view-menu diff --git a/frontend/src/app/main/ui/workspace/viewport/actions.cljs b/frontend/src/app/main/ui/workspace/viewport/actions.cljs index 8aaef6be1c..6f104dedff 100644 --- a/frontend/src/app/main/ui/workspace/viewport/actions.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/actions.cljs @@ -240,20 +240,19 @@ (mf/deps @hover @hover-ids workspace-read-only?) (fn [event] (dom/prevent-default event) - (when-not workspace-read-only? - (when (or (dom/class? (dom/get-target event) "viewport-controls") - (dom/child? (dom/get-target event) (dom/query ".grid-layout-editor")) - (dom/class? (dom/get-target event) "viewport-selrect") - workspace-read-only?) - (let [position (dom/get-client-position event)] + ;;(when-not workspace-read-only? + (when (or (dom/class? (dom/get-target event) "viewport-controls") + (dom/child? (dom/get-target event) (dom/query ".grid-layout-editor")) + (dom/class? (dom/get-target event) "viewport-selrect")) + (let [position (dom/get-client-position event)] ;; Delayed callback because we need to wait to the previous context menu to be closed - (ts/schedule - #(st/emit! - (if (some? @hover) - (dw/show-shape-context-menu {:position position - :shape @hover - :hover-ids @hover-ids}) - (dw/show-context-menu {:position position})))))))))) + (ts/schedule + #(st/emit! + (if (and (not workspace-read-only?) (some? @hover)) + (dw/show-shape-context-menu {:position position + :shape @hover + :hover-ids @hover-ids}) + (dw/show-context-menu {:position position}))))))))) (defn on-menu-selected [hover hover-ids selected workspace-read-only?]