From 965148f3a6432ac7dbcbf41beb431d13ed915073 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 7 Mar 2022 23:22:05 +0100 Subject: [PATCH] :paperclip: Port fixes from main branch --- backend/src/app/loggers/loki.clj | 4 +- backend/src/app/rpc/mutations/profile.clj | 3 +- backend/src/app/rpc/queries/profile.clj | 2 +- docker/devenv/docker-compose.yaml | 4 +- .../main/partials/viewer-thumbnails.scss | 5 --- frontend/src/app/main/data/events.cljs | 7 +++- frontend/src/app/main/data/modal.cljs | 6 +++ frontend/src/app/main/data/users.cljs | 28 ++++++------- frontend/src/app/main/data/workspace.cljs | 1 + .../app/main/data/workspace/shortcuts.cljs | 28 ++++++++----- frontend/src/app/main/render.cljs | 10 ++++- .../app/main/ui/viewer/handoff/render.cljs | 5 ++- .../src/app/main/ui/viewer/thumbnails.cljs | 11 ++--- frontend/src/app/main/ui/workspace.cljs | 2 +- .../app/main/ui/workspace/context_menu.cljs | 9 ++-- .../src/app/main/ui/workspace/header.cljs | 41 +++++++++++-------- .../app/main/ui/workspace/left_toolbar.cljs | 31 +++++++------- frontend/src/app/main/ui/workspace/nudge.cljs | 36 ++++++++-------- .../src/app/main/ui/workspace/sidebar.cljs | 2 +- .../app/main/ui/workspace/textpalette.cljs | 2 +- frontend/src/app/util/storage.cljs | 1 + frontend/src/debug.cljs | 2 +- 22 files changed, 136 insertions(+), 104 deletions(-) diff --git a/backend/src/app/loggers/loki.clj b/backend/src/app/loggers/loki.clj index 0b5e24c99..c29e394b4 100644 --- a/backend/src/app/loggers/loki.clj +++ b/backend/src/app/loggers/loki.clj @@ -57,8 +57,8 @@ [{:stream labels :values [[(str (* (inst-ms (:created-at event)) 1000000)) (str (:message event) - (when-let [error (:error event)] - (str "\n" (:trace error))))]]}]})) + (when-let [error (:trace event)] + (str "\n" error)))]]}]})) (defn- send-log [{:keys [http-client uri]} payload i] diff --git a/backend/src/app/rpc/mutations/profile.clj b/backend/src/app/rpc/mutations/profile.clj index 7a016d992..b4ffa80cb 100644 --- a/backend/src/app/rpc/mutations/profile.clj +++ b/backend/src/app/rpc/mutations/profile.clj @@ -608,7 +608,8 @@ (db/update! conn :profile {:props (db/tjson props)} {:id profile-id}) - nil))) + + (profile/filter-profile-props props)))) ;; --- MUTATION: Delete Profile diff --git a/backend/src/app/rpc/queries/profile.clj b/backend/src/app/rpc/queries/profile.clj index c1ed70244..26b6276d2 100644 --- a/backend/src/app/rpc/queries/profile.clj +++ b/backend/src/app/rpc/queries/profile.clj @@ -75,7 +75,7 @@ [conn profile] (merge profile (retrieve-additional-data conn (:id profile)))) -(defn- filter-profile-props +(defn filter-profile-props [props] (into {} (filter (fn [[k _]] (simple-ident? k))) props)) diff --git a/docker/devenv/docker-compose.yaml b/docker/devenv/docker-compose.yaml index 62d7eab8b..b86f2cbbc 100644 --- a/docker/devenv/docker-compose.yaml +++ b/docker/devenv/docker-compose.yaml @@ -52,7 +52,7 @@ services: - PENPOT_SMTP_PASSWORD= - PENPOT_SMTP_SSL=false - PENPOT_SMTP_TLS=false - - PENPOT_FLAGS="enable-cors enable-insecure-register enable-terms-and-privacy-checkbox" + - PENPOT_FLAGS="enable-cors enable-insecure-register enable-audit-log" # LDAP setup - PENPOT_LDAP_HOST=ldap @@ -119,7 +119,7 @@ services: - PENPOT_SMTP_PASSWORD= - PENPOT_SMTP_SSL=false - PENPOT_SMTP_TLS=false - - PENPOT_FLAGS="enable-cors" + - PENPOT_FLAGS="enable-cors enable-audit-log" # LDAP setup - PENPOT_LDAP_HOST=ldap diff --git a/frontend/resources/styles/main/partials/viewer-thumbnails.scss b/frontend/resources/styles/main/partials/viewer-thumbnails.scss index 8ccc4fcf1..22477cb82 100644 --- a/frontend/resources/styles/main/partials/viewer-thumbnails.scss +++ b/frontend/resources/styles/main/partials/viewer-thumbnails.scss @@ -185,8 +185,3 @@ grid-column: 1 / span 1; z-index: 11; } - -.thumbnail-close.invisible { - visibility: hidden; - pointer-events: none; -} diff --git a/frontend/src/app/main/data/events.cljs b/frontend/src/app/main/data/events.cljs index 547a74d50..5104d39fc 100644 --- a/frontend/src/app/main/data/events.cljs +++ b/frontend/src/app/main/data/events.cljs @@ -110,7 +110,9 @@ (derive :app.main.data.workspace.persistence/set-file-shard ::generic-action) (derive :app.main.data.workspace/create-page ::generic-action) (derive :app.main.data.workspace/set-workspace-layout ::generic-action) - +(derive :app.main.data.workspace/toggle-layout-flag ::generic-action) +(derive :app.main.data.modal/show-modal ::generic-action) +(derive :app.main.data.workspace.guides/update-guides ::generic-action) (defmulti process-event ptk/type) (defmethod process-event :default [_] nil) @@ -141,7 +143,8 @@ {:type "action" :name (or (::name mdata) (name type)) - :props (merge data (d/without-nils (::props mdata))) + :props (merge (d/without-nils data) + (d/without-nils (::props mdata))) :context (d/without-nils {:event-origin (::origin mdata) :event-namespace (namespace type) diff --git a/frontend/src/app/main/data/modal.cljs b/frontend/src/app/main/data/modal.cljs index daf3bb1b4..b0a3baf67 100644 --- a/frontend/src/app/main/data/modal.cljs +++ b/frontend/src/app/main/data/modal.cljs @@ -14,6 +14,8 @@ (defonce components (atom {})) +;; TODO: rename `:type` to `:name` + (defn show ([props] (show (uuid/next) (:type props) props)) @@ -21,6 +23,10 @@ (show (uuid/next) type props)) ([id type props] (ptk/reify ::show-modal + IDeref + (-deref [_] + (merge (dissoc props :type) {:name type})) + ptk/UpdateEvent (update [_ state] (assoc state ::modal {:id id diff --git a/frontend/src/app/main/data/users.cljs b/frontend/src/app/main/data/users.cljs index f66c0af21..cda89444a 100644 --- a/frontend/src/app/main/data/users.cljs +++ b/frontend/src/app/main/data/users.cljs @@ -385,6 +385,20 @@ (rx/empty))) (rx/ignore)))))) +(defn update-profile-props + [props] + (ptk/reify ::update-profile-props + ptk/UpdateEvent + (update [_ state] + (update-in state [:profile :props] merge props)) + + ;; TODO: for the release 1.13 we should skip fetching profile and just use + ;; the response value of update-profile-props RPC call + ptk/WatchEvent + (watch [_ _ _] + (->> (rp/mutation :update-profile-props {:props props}) + (rx/map (constantly (fetch-profile))))))) + (defn mark-onboarding-as-viewed ([] (mark-onboarding-as-viewed nil)) ([{:keys [version]}] @@ -451,20 +465,6 @@ (->> (rp/query :team-users {:team-id team-id}) (rx/map #(partial fetched %))))))) -;; --- Update Nudge - -(defn update-nudge - [value] - (ptk/reify ::update-nudge - ptk/UpdateEvent - (update [_ state] - (update-in state [:profile :props] assoc :nudge value)) - ptk/WatchEvent - (watch [_ _ _] - (let [props {:nudge value}] - (->> (rp/mutation :update-profile-props {:props props}) - (rx/map (constantly (fetch-profile)))))))) - ;; --- EVENT: request-account-deletion (defn request-account-deletion diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 6874f0ee1..da0d014b0 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -24,6 +24,7 @@ [app.config :as cfg] [app.main.data.events :as ev] [app.main.data.messages :as msg] + [app.main.data.users :as du] [app.main.data.workspace.bool :as dwb] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.common :as dwc] diff --git a/frontend/src/app/main/data/workspace/shortcuts.cljs b/frontend/src/app/main/data/workspace/shortcuts.cljs index 5848bbb33..7e1bb5c43 100644 --- a/frontend/src/app/main/data/workspace/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/shortcuts.cljs @@ -6,6 +6,7 @@ (ns app.main.data.workspace.shortcuts (:require + [app.main.data.events :as ev] [app.main.data.shortcuts :as ds] [app.main.data.workspace :as dw] [app.main.data.workspace.colors :as mdc] @@ -24,6 +25,11 @@ ;; Shortcuts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defn toggle-layout-flag + [flag] + (-> (dw/toggle-layout-flag flag) + (vary-meta assoc ::ev/origin "workspace-shortcuts"))) + ;; Shortcuts format https://github.com/ccampbell/mousetrap (def base-shortcuts @@ -42,18 +48,18 @@ :toggle-colorpalette {:tooltip (ds/alt "P") :command (ds/a-mod "p") :fn #(do (r/set-resize-type! :bottom) - (st/emit! (dw/remove-layout-flags :textpalette) - (dw/toggle-layout-flags :colorpalette)))} + (st/emit! (dw/remove-layout-flag :textpalette) + (toggle-layout-flag :colorpalette)))} :toggle-textpalette {:tooltip (ds/alt "T") :command (ds/a-mod "t") :fn #(do (r/set-resize-type! :bottom) - (st/emit! (dw/remove-layout-flags :colorpalette) - (dw/toggle-layout-flags :textpalette)))} + (st/emit! (dw/remove-layout-flag :colorpalette) + (toggle-layout-flag :textpalette)))} :toggle-rules {:tooltip (ds/meta-shift "R") :command (ds/c-mod "shift+r") - :fn #(st/emit! (dw/toggle-layout-flags :rules))} + :fn #(st/emit! (toggle-layout-flag :rules))} :select-all {:tooltip (ds/meta "A") :command (ds/c-mod "a") @@ -61,23 +67,23 @@ :toggle-grid {:tooltip (ds/meta "'") :command (ds/c-mod "'") - :fn #(st/emit! (dw/toggle-layout-flags :display-grid))} + :fn #(st/emit! (toggle-layout-flag :display-grid))} :toggle-snap-grid {:tooltip (ds/meta-shift "'") :command (ds/c-mod "shift+'") - :fn #(st/emit! (dw/toggle-layout-flags :snap-grid))} + :fn #(st/emit! (toggle-layout-flag :snap-grid))} :toggle-snap-guide {:tooltip (ds/meta-shift "G") :command (ds/c-mod "shift+G") - :fn #(st/emit! (dw/toggle-layout-flags :snap-guides))} + :fn #(st/emit! (toggle-layout-flag :snap-guides))} :toggle-alignment {:tooltip (ds/meta "\\") :command (ds/c-mod "\\") - :fn #(st/emit! (dw/toggle-layout-flags :dynamic-alignment))} + :fn #(st/emit! (toggle-layout-flag :dynamic-alignment))} :toggle-scale-text {:tooltip "K" :command "k" - :fn #(st/emit! (dw/toggle-layout-flags :scale-text))} + :fn #(st/emit! (toggle-layout-flag :scale-text))} :increase-zoom {:tooltip "+" :command ["+" "="] @@ -354,7 +360,7 @@ :hide-ui {:tooltip "\\" :command "\\" - :fn #(st/emit! (dw/toggle-layout-flags :hide-ui))} + :fn #(st/emit! (toggle-layout-flag :hide-ui))} :toggle-focus-mode {:command "f" :tooltip "F" diff --git a/frontend/src/app/main/render.cljs b/frontend/src/app/main/render.cljs index fa0864282..cd0b45f33 100644 --- a/frontend/src/app/main/render.cljs +++ b/frontend/src/app/main/render.cljs @@ -217,7 +217,7 @@ (mf/defc frame-svg {::mf/wrap [mf/memo]} - [{:keys [objects frame zoom] :or {zoom 1} :as props}] + [{:keys [objects frame zoom show-thumbnails?] :or {zoom 1} :as props}] (let [frame-id (:id frame) include-metadata? (mf/use-ctx export/include-metadata-ctx) @@ -253,7 +253,13 @@ :xmlns "http://www.w3.org/2000/svg" :xmlnsXlink "http://www.w3.org/1999/xlink" :xmlns:penpot (when include-metadata? "https://penpot.app/xmlns")} - [:& wrapper {:shape frame :view-box vbox}]])) + (if (or (not show-thumbnails?) (nil? (:thumbnail frame))) + [:& wrapper {:shape frame :view-box vbox}] + + ;; Render the frame thumbnail + (let [frame (gsh/transform-shape frame)] + [:> shape-container {:shape frame} + [:& frame/frame-thumbnail {:shape frame}]]))])) (mf/defc component-svg {::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]} diff --git a/frontend/src/app/main/ui/viewer/handoff/render.cljs b/frontend/src/app/main/ui/viewer/handoff/render.cljs index 7aa9c7568..5fb32104b 100644 --- a/frontend/src/app/main/ui/viewer/handoff/render.cljs +++ b/frontend/src/app/main/ui/viewer/handoff/render.cljs @@ -80,8 +80,9 @@ (let [shape-container (shape-container-factory objects) frame-shape (frame/frame-shape shape-container) frame-wrapper (shape-wrapper-factory frame-shape)] - (mf/fnc frame-container - {::mf/wrap-props false} + (mf/fnc frame-container + {::mf/wrap-props false + ::mf/wrap [mf/memo]} [props] (let [shape (unchecked-get props "shape") childs (mapv #(get objects %) (:shapes shape)) diff --git a/frontend/src/app/main/ui/viewer/thumbnails.cljs b/frontend/src/app/main/ui/viewer/thumbnails.cljs index a38e8b16c..6473c5ac3 100644 --- a/frontend/src/app/main/ui/viewer/thumbnails.cljs +++ b/frontend/src/app/main/ui/viewer/thumbnails.cljs @@ -72,12 +72,13 @@ [:span.btn-close {:on-click on-close} i/close]]]) (mf/defc thumbnail-item - {::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]} + {::mf/wrap [mf/memo + #(mf/deferred % ts/idle-then-raf)]} [{:keys [selected? frame on-click index objects]}] [:div.thumbnail-item {:on-click #(on-click % index)} [:div.thumbnail-preview {:class (dom/classnames :selected selected?)} - [:& render/frame-svg {:frame frame :objects objects}]] + [:& render/frame-svg {:frame frame :objects objects :show-thumbnails? true}]] [:div.thumbnail-info [:span.name {:title (:name frame)} (:name frame)]]]) @@ -101,9 +102,9 @@ (on-close))))] [:section.viewer-thumbnails - {:class (dom/classnames :expanded @expanded? - :invisible (not show?)) - + {;; This is better as an inline-style so it won't make a reflow of every frame inside + :style {:display (when (not show?) "none")} + :class (dom/classnames :expanded @expanded?) :ref container} [:& thumbnails-summary {:on-toggle-expand #(swap! expanded? not) diff --git a/frontend/src/app/main/ui/workspace.cljs b/frontend/src/app/main/ui/workspace.cljs index d9d3e07b6..92818e611 100644 --- a/frontend/src/app/main/ui/workspace.cljs +++ b/frontend/src/app/main/ui/workspace.cljs @@ -79,7 +79,7 @@ [:* [:& left-toolbar {:layout layout}] (if (:collapse-left-sidebar layout) - [:button.collapse-sidebar.collapsed {:on-click #(st/emit! (dw/toggle-layout-flags :collapse-left-sidebar))} + [:button.collapse-sidebar.collapsed {:on-click #(st/emit! (dw/toggle-layout-flag :collapse-left-sidebar))} i/arrow-slide] [:& left-sidebar {:layout layout}]) [:& right-sidebar {:section options-mode diff --git a/frontend/src/app/main/ui/workspace/context_menu.cljs b/frontend/src/app/main/ui/workspace/context_menu.cljs index 506726bb8..62fb3ec80 100644 --- a/frontend/src/app/main/ui/workspace/context_menu.cljs +++ b/frontend/src/app/main/ui/workspace/context_menu.cljs @@ -9,6 +9,7 @@ (:require [app.common.data :as d] [app.common.spec.page :as csp] + [app.main.data.events :as ev] [app.main.data.modal :as modal] [app.main.data.workspace :as dw] [app.main.data.workspace.interactions :as dwi] @@ -446,10 +447,10 @@ (mf/defc viewport-context-menu [] - (let [focus (mf/deref refs/workspace-focus-selected) - - do-paste (st/emitf dw/paste) - do-hide-ui (st/emitf (dw/toggle-layout-flags :hide-ui)) + (let [focus (mf/deref refs/workspace-focus-selected) + do-paste #(st/emit! dw/paste) + 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") diff --git a/frontend/src/app/main/ui/workspace/header.cljs b/frontend/src/app/main/ui/workspace/header.cljs index 91dbaae85..81b236140 100644 --- a/frontend/src/app/main/ui/workspace/header.cljs +++ b/frontend/src/app/main/ui/workspace/header.cljs @@ -206,7 +206,13 @@ (fn [item] (fn [event] (dom/stop-propagation event) - (reset! show-sub-menu? item))))] + (reset! show-sub-menu? item)))) + + toggle-flag + (mf/use-callback + (fn [flag] + (-> (dw/toggle-layout-flag flag) + (vary-meta assoc ::ev/origin "workspace-menu"))))] (mf/use-effect (mf/deps @editing?) @@ -275,7 +281,7 @@ [:li {:on-click #(st/emit! (dw/select-all))} [:span (tr "workspace.header.menu.select-all")] [:span.shortcut (sc/get-tooltip :select-all)]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :scale-text))} + [:li {:on-click #(st/emit! (toggle-flag :scale-text))} [:span (if (contains? layout :scale-text) (tr "workspace.header.menu.disable-scale-text") @@ -285,21 +291,22 @@ [:& dropdown {:show (= @show-sub-menu? :view) :on-close #(reset! show-sub-menu? false)} [:ul.sub-menu.view - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :rules))} + [:li {:on-click #(st/emit! (toggle-flag :rules))} [:span (if (contains? layout :rules) (tr "workspace.header.menu.hide-rules") (tr "workspace.header.menu.show-rules"))] [:span.shortcut (sc/get-tooltip :toggle-rules)]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :display-grid))} + [:li {:on-click #(st/emit! (toggle-flag :display-grid))} [:span (if (contains? layout :display-grid) (tr "workspace.header.menu.hide-grid") (tr "workspace.header.menu.show-grid"))] [:span.shortcut (sc/get-tooltip :toggle-grid)]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :sitemap :layers))} + [:li {:on-click #(st/emit! (toggle-flag :sitemap) + (toggle-flag :layers))} [:span (if (or (contains? layout :sitemap) (contains? layout :layers)) (tr "workspace.header.menu.hide-layers") @@ -308,8 +315,8 @@ [:li {:on-click (fn [] (r/set-resize-type! :bottom) - (st/emit! (dw/remove-layout-flags :textpalette) - (dw/toggle-layout-flags :colorpalette)))} + (st/emit! (dw/remove-layout-flag :textpalette) + (toggle-flag :colorpalette)))} [:span (if (contains? layout :colorpalette) (tr "workspace.header.menu.hide-palette") @@ -318,28 +325,29 @@ [:li {:on-click (fn [] (r/set-resize-type! :bottom) - (st/emit! (dw/remove-layout-flags :colorpalette) - (dw/toggle-layout-flags :textpalette)))} + (st/emit! (dw/remove-layout-flag :colorpalette) + (toggle-flag :textpalette)))} [:span (if (contains? layout :textpalette) (tr "workspace.header.menu.hide-textpalette") (tr "workspace.header.menu.show-textpalette"))] [:span.shortcut (sc/get-tooltip :toggle-textpalette)]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :assets))} + [:li {:on-click #(st/emit! (toggle-flag :assets))} [:span (if (contains? layout :assets) (tr "workspace.header.menu.hide-assets") (tr "workspace.header.menu.show-assets"))] [:span.shortcut (sc/get-tooltip :toggle-assets)]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :display-artboard-names))} + [:li {:on-click #(st/emit! (toggle-flag :display-artboard-names))} [:span (if (contains? layout :display-artboard-names) (tr "workspace.header.menu.hide-artboard-names") (tr "workspace.header.menu.show-artboard-names"))]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :hide-ui))} + [:li {:on-click #(st/emit! (-> (toggle-flag :hide-ui) + (vary-meta assoc ::ev/origin "workspace-menu")))} [:span (tr "workspace.shape.menu.hide-ui")] [:span.shortcut (sc/get-tooltip :hide-ui)]]]] @@ -347,21 +355,21 @@ [:& dropdown {:show (= @show-sub-menu? :preferences) :on-close #(reset! show-sub-menu? false)} [:ul.sub-menu.preferences - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :snap-guides))} + [:li {:on-click #(st/emit! (toggle-flag :snap-guides))} [:span (if (contains? layout :snap-guides) (tr "workspace.header.menu.disable-snap-guides") (tr "workspace.header.menu.enable-snap-guides"))] [:span.shortcut (sc/get-tooltip :toggle-snap-guide)]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :snap-grid))} + [:li {:on-click #(st/emit! (toggle-flag :snap-grid))} [:span (if (contains? layout :snap-grid) (tr "workspace.header.menu.disable-snap-grid") (tr "workspace.header.menu.enable-snap-grid"))] [:span.shortcut (sc/get-tooltip :toggle-snap-grid)]] - [:li {:on-click #(st/emit! (dw/toggle-layout-flags :dynamic-alignment))} + [:li {:on-click #(st/emit! (toggle-flag :dynamic-alignment))} [:span (if (contains? layout :dynamic-alignment) (tr "workspace.header.menu.disable-dynamic-alignment") @@ -410,7 +418,8 @@ [:button.document-history {:alt (tr "workspace.sidebar.history" (sc/get-tooltip :toggle-history)) :class (when (contains? layout :document-history) "selected") - :on-click (st/emitf (dw/toggle-layout-flags :document-history))} + :on-click #(st/emit! (-> (dw/toggle-layout-flag :document-history) + (vary-meta assoc ::ev/origin "workspace-header")))} i/recent]] [:div.options-section diff --git a/frontend/src/app/main/ui/workspace/left_toolbar.cljs b/frontend/src/app/main/ui/workspace/left_toolbar.cljs index a6843551a..584d8ce6c 100644 --- a/frontend/src/app/main/ui/workspace/left_toolbar.cljs +++ b/frontend/src/app/main/ui/workspace/left_toolbar.cljs @@ -9,6 +9,7 @@ [app.common.geom.point :as gpt] [app.common.math :as mth] [app.common.media :as cm] + [app.main.data.events :as ev] [app.main.data.workspace :as dw] [app.main.data.workspace.shortcuts :as sc] [app.main.refs :as refs] @@ -46,16 +47,16 @@ :position (gpt/point x y)}] (st/emit! (dw/upload-media-workspace params)))))] - [:li.tooltip.tooltip-right - {:alt (tr "workspace.toolbar.image" (sc/get-tooltip :insert-image)) - :on-click on-click} - [:* - i/image - [:& file-uploader {:input-id "image-upload" - :accept cm/str-image-types - :multi true - :ref ref - :on-selected on-files-selected}]]])) + [:li.tooltip.tooltip-right + {:alt (tr "workspace.toolbar.image" (sc/get-tooltip :insert-image)) + :on-click on-click} + [:* + i/image + [:& file-uploader {:input-id "image-upload" + :accept cm/str-image-types + :multi true + :ref ref + :on-selected on-files-selected}]]])) (mf/defc left-toolbar {::mf/wrap [mf/memo] @@ -126,8 +127,9 @@ :on-click (fn [] (r/set-resize-type! :bottom) (dom/add-class! (dom/get-element-by-class "color-palette") "fade-out-down") - (ts/schedule 300 #(st/emit! (dw/remove-layout-flags :colorpalette) - (dw/toggle-layout-flags :textpalette))))} + (ts/schedule 300 #(st/emit! (dw/remove-layout-flag :colorpalette) + (-> (dw/toggle-layout-flag :textpalette) + (vary-meta assoc ::ev/origin "workspace-left-toolbar")))))} "Ag"] [:li.tooltip.tooltip-right @@ -136,6 +138,7 @@ :on-click (fn [] (r/set-resize-type! :bottom) (dom/add-class! (dom/get-element-by-class "color-palette") "fade-out-down") - (ts/schedule 300 #(st/emit! (dw/remove-layout-flags :textpalette) - (dw/toggle-layout-flags :colorpalette))))} + (ts/schedule 300 #(st/emit! (dw/remove-layout-flag :textpalette) + (-> (dw/toggle-layout-flag :colorpalette) + (vary-meta assoc ::ev/origin "workspace-left-toolbar")))))} i/palette]]]])) diff --git a/frontend/src/app/main/ui/workspace/nudge.cljs b/frontend/src/app/main/ui/workspace/nudge.cljs index c479a00ba..8574be246 100644 --- a/frontend/src/app/main/ui/workspace/nudge.cljs +++ b/frontend/src/app/main/ui/workspace/nudge.cljs @@ -7,7 +7,7 @@ (ns app.main.ui.workspace.nudge (:require [app.main.data.modal :as modal] - [app.main.data.users :as du] + [app.main.data.workspace :as dw] [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.components.numeric-input :refer [numeric-input]] @@ -19,34 +19,32 @@ [rumext.alpha :as mf]) (:import goog.events.EventType)) +(defn- on-keydown + [event] + (when (k/enter? event) + (dom/prevent-default event) + (dom/stop-propagation event) + (modal/hide!))) (mf/defc nudge-modal {::mf/register modal/components ::mf/register-as :nudge-option} [] - (let [profile (mf/deref refs/profile) - nudge (get-in profile [:props :nudge] {:big 10 :small 1}) - update-nudge (fn [value size] (let [update-nudge (if (= :big size) - {:big value :small (:small nudge)} - {:small value :big (:big nudge)})] - (st/emit! (du/update-nudge update-nudge)))) - update-big (fn [value] (update-nudge value :big)) - update-small (fn [value] (update-nudge value :small)) - close #(modal/hide!)] + (let [profile (mf/deref refs/profile) + nudge (or (get-in profile [:props :nudge]) {:big 10 :small 1}) + update-big (mf/use-fn #(st/emit! (dw/update-nudge {:big %}))) + update-small (mf/use-fn #(st/emit! (dw/update-nudge {:small %}))) + on-close (mf/use-fn #(modal/hide!))] + (mf/with-effect - (letfn [(on-keydown [event] - (when (k/enter? event) - (dom/prevent-default event) - (dom/stop-propagation event) - (close)))] - (->> (events/listen js/document EventType.KEYDOWN on-keydown) - (partial events/unlistenByKey)))) + (->> (events/listen js/document EventType.KEYDOWN on-keydown) + (partial events/unlistenByKey))) [:div.nudge-modal-overlay [:div.nudge-modal-container [:div.nudge-modal-header [:p.nudge-modal-title (tr "modals.nudge-title")] - [:button.modal-close-button {:on-click close} i/close]] + [:button.modal-close-button {:on-click on-close} i/close]] [:div.nudge-modal-body [:div.input-wrapper [:span @@ -59,4 +57,4 @@ [:p.nudge-subtitle (tr "modals.big-nudge")] [:> numeric-input {:min 1 :value (:big nudge) - :on-change update-big}]]]]]])) \ No newline at end of file + :on-change update-big}]]]]]])) diff --git a/frontend/src/app/main/ui/workspace/sidebar.cljs b/frontend/src/app/main/ui/workspace/sidebar.cljs index 617386201..1b77fd22a 100644 --- a/frontend/src/app/main/ui/workspace/sidebar.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar.cljs @@ -36,7 +36,7 @@ handle-collapse (fn [] - (st/emit! (dw/toggle-layout-flags :collapse-left-sidebar)))] + (st/emit! (dw/toggle-layout-flag :collapse-left-sidebar)))] [:aside.settings-bar.settings-bar-left {:ref parent-ref :class (dom/classnames diff --git a/frontend/src/app/main/ui/workspace/textpalette.cljs b/frontend/src/app/main/ui/workspace/textpalette.cljs index 10a71aab5..8a39b14cb 100644 --- a/frontend/src/app/main/ui/workspace/textpalette.cljs +++ b/frontend/src/app/main/ui/workspace/textpalette.cljs @@ -95,7 +95,7 @@ {:keys [on-pointer-down on-lost-pointer-capture on-mouse-move parent-ref size]} (use-resize-hook :palette 72 54 80 :y true :bottom)] - + [:div.color-palette {:ref parent-ref :class (dom/classnames :no-text (< size 72)) :style #js {"--height" (str size "px")}} diff --git a/frontend/src/app/util/storage.cljs b/frontend/src/app/util/storage.cljs index d7e150c61..2151bb0e3 100644 --- a/frontend/src/app/util/storage.cljs +++ b/frontend/src/app/util/storage.cljs @@ -40,4 +40,5 @@ (defonce storage (atom (load (unchecked-get g/global "localStorage")))) + (add-watch storage :persistence #(persist js/localStorage %3 %4)) diff --git a/frontend/src/debug.cljs b/frontend/src/debug.cljs index 9c5cbbe07..8e469a0d4 100644 --- a/frontend/src/debug.cljs +++ b/frontend/src/debug.cljs @@ -282,4 +282,4 @@ (defn ^:export hide-ui [] (st/emit! - (dw/toggle-layout-flags :hide-ui))) + (dw/toggle-layout-flag :hide-ui)))