From 771bb2097620d56d7b55f985004af4b3d682d860 Mon Sep 17 00:00:00 2001 From: eva Date: Fri, 10 Dec 2021 11:56:13 +0100 Subject: [PATCH] :sparkles: Add shortcuts for dashboard viewer and path --- frontend/src/app/main/data/dashboard.cljs | 43 +++++++++++++ .../app/main/data/dashboard/shortcuts.cljs | 33 ++++++++++ frontend/src/app/main/data/viewer.cljs | 21 +++--- .../src/app/main/data/viewer/shortcuts.cljs | 64 ++++++++++--------- frontend/src/app/main/data/workspace.cljs | 20 ++++-- .../src/app/main/data/workspace/changes.cljs | 2 +- .../main/data/workspace/path/shortcuts.cljs | 12 ++-- frontend/src/app/main/ui/dashboard.cljs | 4 ++ 8 files changed, 145 insertions(+), 54 deletions(-) create mode 100644 frontend/src/app/main/data/dashboard/shortcuts.cljs diff --git a/frontend/src/app/main/data/dashboard.cljs b/frontend/src/app/main/data/dashboard.cljs index 18399a582..8163c118f 100644 --- a/frontend/src/app/main/data/dashboard.cljs +++ b/frontend/src/app/main/data/dashboard.cljs @@ -790,3 +790,46 @@ (watch [_ state _] (let [team-id (:current-team-id state)] (rx/of (rt/nav :dashboard-team-settings {:team-id team-id})))))) + +(defn go-to-drafts + [] + (ptk/reify ::go-to-drafts + ptk/WatchEvent + (watch [_ state _] + (let [team-id (:current-team-id state) + projects (:dashboard-projects state) + default-project (d/seek :is-default (vals projects))] + (when default-project + (rx/of (rt/nav :dashboard-files {:team-id team-id + :project-id (:id default-project)}))))))) + +(defn go-to-libs + [] + (ptk/reify ::go-to-libs + ptk/WatchEvent + (watch [_ state _] + (let [team-id (:current-team-id state)] + (rx/of (rt/nav :dashboard-libraries {:team-id team-id})))))) + +(defn create-element + [] + (ptk/reify ::create-element + ptk/WatchEvent + (watch [_ state _] + (let [team-id (:current-team-id state) + route (:route state) + pparams (:path-params route) + in-project? (contains? pparams :project-id) + name (if in-project? + (name (gensym (str (tr "dashboard.new-file-prefix") " "))) + (name (gensym (str (tr "dashboard.new-project-prefix") " ")))) + params (if in-project? + {:project-id (:project-id pparams) + :name name} + {:name name + :team-id team-id}) + action-name (if in-project? :create-file :create-project) + action (if in-project? file-created project-created)] + + (->> (rp/mutation! action-name params) + (rx/map action)))))) \ No newline at end of file diff --git a/frontend/src/app/main/data/dashboard/shortcuts.cljs b/frontend/src/app/main/data/dashboard/shortcuts.cljs new file mode 100644 index 000000000..fc1035996 --- /dev/null +++ b/frontend/src/app/main/data/dashboard/shortcuts.cljs @@ -0,0 +1,33 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) UXBOX Labs SL + +(ns app.main.data.dashboard.shortcuts + (:require + [app.main.data.dashboard :as dd] + [app.main.data.shortcuts :as ds] + [app.main.store :as st] + )) + +(def shortcuts + {:go-to-search {:tooltip (ds/meta "F") + :command (ds/c-mod "f") + :fn (st/emitf (dd/go-to-search))} + + :go-to-drafts {:tooltip "G D" + :command "g d" + :fn (st/emitf (dd/go-to-drafts))} + + :go-to-libs {:tooltip "G L" + :command "g l" + :fn (st/emitf (dd/go-to-libs))} + + :create-new-project {:tooltip "+" + :command "+" + :fn (st/emitf (dd/create-element))}}) + +(defn get-tooltip [shortcut] + (assert (contains? shortcuts shortcut) (str shortcut)) + (get-in shortcuts [shortcut :tooltip])) diff --git a/frontend/src/app/main/data/viewer.cljs b/frontend/src/app/main/data/viewer.cljs index 56ee0c0df..81fc28b4b 100644 --- a/frontend/src/app/main/data/viewer.cljs +++ b/frontend/src/app/main/data/viewer.cljs @@ -544,18 +544,17 @@ (rx/of (rt/nav rname pparams qparams)))))) (defn go-to-workspace - [page-id] - (ptk/reify ::go-to-workspace - ptk/WatchEvent - (watch [_ state _] - (let [project-id (get-in state [:viewer :project :id]) - file-id (get-in state [:viewer :file :id]) - pparams {:project-id project-id :file-id file-id} - qparams {:page-id page-id}] + ([] (go-to-workspace nil)) + ([page-id] + (ptk/reify ::go-to-workspace + ptk/WatchEvent + (watch [_ state _] + (let [project-id (get-in state [:viewer :project :id]) + file-id (get-in state [:viewer :file :id]) + pparams {:project-id project-id :file-id file-id} + qparams {:page-id (or page-id (:current-page-id state))}] (rx/of (rt/nav-new-window* {:rname :workspace :path-params pparams :query-params qparams - :name (str "workspace-" file-id)})))))) - - + :name (str "workspace-" file-id)}))))))) \ No newline at end of file diff --git a/frontend/src/app/main/data/viewer/shortcuts.cljs b/frontend/src/app/main/data/viewer/shortcuts.cljs index a87bb291a..7d87cf901 100644 --- a/frontend/src/app/main/data/viewer/shortcuts.cljs +++ b/frontend/src/app/main/data/viewer/shortcuts.cljs @@ -11,45 +11,49 @@ [app.main.store :as st])) (def shortcuts - {:increase-zoom {:tooltip "+" - :command "+" - :fn (st/emitf dv/increase-zoom)} + {:increase-zoom {:tooltip "+" + :command "+" + :fn (st/emitf dv/increase-zoom)} - :decrease-zoom {:tooltip "-" - :command "-" - :fn (st/emitf dv/decrease-zoom)} + :decrease-zoom {:tooltip "-" + :command "-" + :fn (st/emitf dv/decrease-zoom)} - :select-all {:tooltip (ds/meta "A") - :command (ds/c-mod "a") - :fn (st/emitf (dv/select-all))} + :select-all {:tooltip (ds/meta "A") + :command (ds/c-mod "a") + :fn (st/emitf (dv/select-all))} - :zoom-50 {:tooltip (ds/shift "0") - :command "shift+0" - :fn (st/emitf dv/zoom-to-50)} + :zoom-50 {:tooltip (ds/shift "0") + :command "shift+0" + :fn (st/emitf dv/zoom-to-50)} - :reset-zoom {:tooltip (ds/shift "1") - :command "shift+1" - :fn (st/emitf dv/reset-zoom)} + :reset-zoom {:tooltip (ds/shift "1") + :command "shift+1" + :fn (st/emitf dv/reset-zoom)} - :zoom-200 {:tooltip (ds/shift "2") - :command "shift+2" - :fn (st/emitf dv/zoom-to-200)} + :zoom-200 {:tooltip (ds/shift "2") + :command "shift+2" + :fn (st/emitf dv/zoom-to-200)} - :next-frame {:tooltip ds/left-arrow - :command "left" - :fn (st/emitf dv/select-prev-frame)} + :next-frame {:tooltip ds/left-arrow + :command "left" + :fn (st/emitf dv/select-prev-frame)} - :prev-frame {:tooltip ds/right-arrow - :command "right" - :fn (st/emitf dv/select-next-frame)} + :prev-frame {:tooltip ds/right-arrow + :command "right" + :fn (st/emitf dv/select-next-frame)} - :open-handoff {:tooltip "G H" - :command "g h" - :fn #(st/emit! (dv/go-to-section :handoff))} + :open-handoff {:tooltip "G H" + :command "g h" + :fn #(st/emit! (dv/go-to-section :handoff))} - :open-comments {:tooltip "G C" - :command "g c" - :fn #(st/emit! (dv/go-to-section :comments))}}) + :open-comments {:tooltip "G C" + :command "g c" + :fn #(st/emit! (dv/go-to-section :comments))} + + :open-workspace {:tooltip "G W" + :command "g w" + :fn #(st/emit! (dv/go-to-workspace))}}) (defn get-tooltip [shortcut] (assert (contains? shortcuts shortcut) (str shortcut)) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 7073100ea..68a40ab7e 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -6,6 +6,7 @@ (ns app.main.data.workspace (:require + [app.common.attrs :as attrs] [app.common.data :as d] [app.common.geom.align :as gal] [app.common.geom.matrix :as gmt] @@ -1199,12 +1200,19 @@ (rx/of (dch/update-shapes [id] assign-proportions)))))) (defn toggle-proportion-lock -[] -(ptk/reify ::toggle-propotion-lock - ptk/WatchEvent - (watch [_ state _] - (let [selected (wsh/lookup-selected state)] - (rx/of (dch/update-shapes selected #(update % :proportion-lock not))))))) + [] + (ptk/reify ::toggle-propotion-lock + ptk/WatchEvent + (watch [_ state _] + (let [page-id (:current-page-id state) + objects (wsh/lookup-page-objects state page-id) + selected (wsh/lookup-selected state) + selected-obj (-> (map #(get objects %) selected)) + multi (attrs/get-attrs-multi selected-obj [:proportion-lock]) + multi? (= :multiple (:proportion-lock multi))] + (if multi? + (rx/of (dch/update-shapes selected #(assoc % :proportion-lock true))) + (rx/of (dch/update-shapes selected #(update % :proportion-lock not)))))))) ;; --- Update Shape Flags diff --git a/frontend/src/app/main/data/workspace/changes.cljs b/frontend/src/app/main/data/workspace/changes.cljs index 2b5a57c7d..c6cb36c17 100644 --- a/frontend/src/app/main/data/workspace/changes.cljs +++ b/frontend/src/app/main/data/workspace/changes.cljs @@ -20,7 +20,7 @@ [potok.core :as ptk])) ;; Change this to :info :debug or :trace to debug this module -(log/set-level! :warn) +(log/set-level! :debug) (s/def ::coll-of-uuid (s/every ::us/uuid)) diff --git a/frontend/src/app/main/data/workspace/path/shortcuts.cljs b/frontend/src/app/main/data/workspace/path/shortcuts.cljs index 60c7eae67..cb27407e1 100644 --- a/frontend/src/app/main/data/workspace/path/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/path/shortcuts.cljs @@ -32,8 +32,8 @@ (rx/empty)))))) (def shortcuts - {:move-nodes {:tooltip "V" - :command "v" + {:move-nodes {:tooltip "M" + :command "m" :fn #(st/emit! (drp/change-edit-mode :move))} :draw-nodes {:tooltip "P" @@ -60,12 +60,12 @@ :command "k" :fn #(st/emit! (drp/separate-nodes))} - :make-corner {:tooltip "B" - :command "b" + :make-corner {:tooltip "X" + :command "x" :fn #(st/emit! (drp/make-corner))} - :make-curve {:tooltip (ds/meta "B") - :command (ds/c-mod "b") + :make-curve {:tooltip "C" + :command "c" :fn #(st/emit! (drp/make-curve))} :snap-nodes {:tooltip (ds/meta "'") diff --git a/frontend/src/app/main/ui/dashboard.cljs b/frontend/src/app/main/ui/dashboard.cljs index eee51941c..7156230cd 100644 --- a/frontend/src/app/main/ui/dashboard.cljs +++ b/frontend/src/app/main/ui/dashboard.cljs @@ -8,6 +8,7 @@ (:require [app.common.spec :as us] [app.main.data.dashboard :as dd] + [app.main.data.dashboard.shortcuts :as sc] [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.context :as ctx] @@ -20,6 +21,7 @@ [app.main.ui.dashboard.search :refer [search-page]] [app.main.ui.dashboard.sidebar :refer [sidebar]] [app.main.ui.dashboard.team :refer [team-settings-page team-members-page]] + [app.main.ui.hooks :as hooks] [rumext.alpha :as mf])) (defn ^boolean uuid-str? @@ -88,6 +90,8 @@ projects (mf/deref refs/dashboard-projects) project (get projects project-id)] + (hooks/use-shortcuts ::viewer sc/shortcuts) + (mf/use-effect (mf/deps team-id) (fn []