📎 Port fixes from main branch

This commit is contained in:
Andrey Antukh 2022-03-07 23:22:05 +01:00 committed by Andrés Moya
parent 43cbe2dd39
commit 965148f3a6
22 changed files with 136 additions and 104 deletions

View file

@ -57,8 +57,8 @@
[{:stream labels [{:stream labels
:values [[(str (* (inst-ms (:created-at event)) 1000000)) :values [[(str (* (inst-ms (:created-at event)) 1000000))
(str (:message event) (str (:message event)
(when-let [error (:error event)] (when-let [error (:trace event)]
(str "\n" (:trace error))))]]}]})) (str "\n" error)))]]}]}))
(defn- send-log (defn- send-log
[{:keys [http-client uri]} payload i] [{:keys [http-client uri]} payload i]

View file

@ -608,7 +608,8 @@
(db/update! conn :profile (db/update! conn :profile
{:props (db/tjson props)} {:props (db/tjson props)}
{:id profile-id}) {:id profile-id})
nil)))
(profile/filter-profile-props props))))
;; --- MUTATION: Delete Profile ;; --- MUTATION: Delete Profile

View file

@ -75,7 +75,7 @@
[conn profile] [conn profile]
(merge profile (retrieve-additional-data conn (:id profile)))) (merge profile (retrieve-additional-data conn (:id profile))))
(defn- filter-profile-props (defn filter-profile-props
[props] [props]
(into {} (filter (fn [[k _]] (simple-ident? k))) props)) (into {} (filter (fn [[k _]] (simple-ident? k))) props))

View file

@ -52,7 +52,7 @@ services:
- PENPOT_SMTP_PASSWORD= - PENPOT_SMTP_PASSWORD=
- PENPOT_SMTP_SSL=false - PENPOT_SMTP_SSL=false
- PENPOT_SMTP_TLS=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 # LDAP setup
- PENPOT_LDAP_HOST=ldap - PENPOT_LDAP_HOST=ldap
@ -119,7 +119,7 @@ services:
- PENPOT_SMTP_PASSWORD= - PENPOT_SMTP_PASSWORD=
- PENPOT_SMTP_SSL=false - PENPOT_SMTP_SSL=false
- PENPOT_SMTP_TLS=false - PENPOT_SMTP_TLS=false
- PENPOT_FLAGS="enable-cors" - PENPOT_FLAGS="enable-cors enable-audit-log"
# LDAP setup # LDAP setup
- PENPOT_LDAP_HOST=ldap - PENPOT_LDAP_HOST=ldap

View file

@ -185,8 +185,3 @@
grid-column: 1 / span 1; grid-column: 1 / span 1;
z-index: 11; z-index: 11;
} }
.thumbnail-close.invisible {
visibility: hidden;
pointer-events: none;
}

View file

@ -110,7 +110,9 @@
(derive :app.main.data.workspace.persistence/set-file-shard ::generic-action) (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/create-page ::generic-action)
(derive :app.main.data.workspace/set-workspace-layout ::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) (defmulti process-event ptk/type)
(defmethod process-event :default [_] nil) (defmethod process-event :default [_] nil)
@ -141,7 +143,8 @@
{:type "action" {:type "action"
:name (or (::name mdata) (name type)) :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 :context (d/without-nils
{:event-origin (::origin mdata) {:event-origin (::origin mdata)
:event-namespace (namespace type) :event-namespace (namespace type)

View file

@ -14,6 +14,8 @@
(defonce components (atom {})) (defonce components (atom {}))
;; TODO: rename `:type` to `:name`
(defn show (defn show
([props] ([props]
(show (uuid/next) (:type props) props)) (show (uuid/next) (:type props) props))
@ -21,6 +23,10 @@
(show (uuid/next) type props)) (show (uuid/next) type props))
([id type props] ([id type props]
(ptk/reify ::show-modal (ptk/reify ::show-modal
IDeref
(-deref [_]
(merge (dissoc props :type) {:name type}))
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(assoc state ::modal {:id id (assoc state ::modal {:id id

View file

@ -385,6 +385,20 @@
(rx/empty))) (rx/empty)))
(rx/ignore)))))) (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 (defn mark-onboarding-as-viewed
([] (mark-onboarding-as-viewed nil)) ([] (mark-onboarding-as-viewed nil))
([{:keys [version]}] ([{:keys [version]}]
@ -451,20 +465,6 @@
(->> (rp/query :team-users {:team-id team-id}) (->> (rp/query :team-users {:team-id team-id})
(rx/map #(partial fetched %))))))) (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 ;; --- EVENT: request-account-deletion
(defn request-account-deletion (defn request-account-deletion

View file

@ -24,6 +24,7 @@
[app.config :as cfg] [app.config :as cfg]
[app.main.data.events :as ev] [app.main.data.events :as ev]
[app.main.data.messages :as msg] [app.main.data.messages :as msg]
[app.main.data.users :as du]
[app.main.data.workspace.bool :as dwb] [app.main.data.workspace.bool :as dwb]
[app.main.data.workspace.changes :as dch] [app.main.data.workspace.changes :as dch]
[app.main.data.workspace.common :as dwc] [app.main.data.workspace.common :as dwc]

View file

@ -6,6 +6,7 @@
(ns app.main.data.workspace.shortcuts (ns app.main.data.workspace.shortcuts
(:require (:require
[app.main.data.events :as ev]
[app.main.data.shortcuts :as ds] [app.main.data.shortcuts :as ds]
[app.main.data.workspace :as dw] [app.main.data.workspace :as dw]
[app.main.data.workspace.colors :as mdc] [app.main.data.workspace.colors :as mdc]
@ -24,6 +25,11 @@
;; Shortcuts ;; 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 ;; Shortcuts format https://github.com/ccampbell/mousetrap
(def base-shortcuts (def base-shortcuts
@ -42,18 +48,18 @@
:toggle-colorpalette {:tooltip (ds/alt "P") :toggle-colorpalette {:tooltip (ds/alt "P")
:command (ds/a-mod "p") :command (ds/a-mod "p")
:fn #(do (r/set-resize-type! :bottom) :fn #(do (r/set-resize-type! :bottom)
(st/emit! (dw/remove-layout-flags :textpalette) (st/emit! (dw/remove-layout-flag :textpalette)
(dw/toggle-layout-flags :colorpalette)))} (toggle-layout-flag :colorpalette)))}
:toggle-textpalette {:tooltip (ds/alt "T") :toggle-textpalette {:tooltip (ds/alt "T")
:command (ds/a-mod "t") :command (ds/a-mod "t")
:fn #(do (r/set-resize-type! :bottom) :fn #(do (r/set-resize-type! :bottom)
(st/emit! (dw/remove-layout-flags :colorpalette) (st/emit! (dw/remove-layout-flag :colorpalette)
(dw/toggle-layout-flags :textpalette)))} (toggle-layout-flag :textpalette)))}
:toggle-rules {:tooltip (ds/meta-shift "R") :toggle-rules {:tooltip (ds/meta-shift "R")
:command (ds/c-mod "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") :select-all {:tooltip (ds/meta "A")
:command (ds/c-mod "a") :command (ds/c-mod "a")
@ -61,23 +67,23 @@
:toggle-grid {:tooltip (ds/meta "'") :toggle-grid {:tooltip (ds/meta "'")
:command (ds/c-mod "'") :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 "'") :toggle-snap-grid {:tooltip (ds/meta-shift "'")
:command (ds/c-mod "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") :toggle-snap-guide {:tooltip (ds/meta-shift "G")
:command (ds/c-mod "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 "\\") :toggle-alignment {:tooltip (ds/meta "\\")
:command (ds/c-mod "\\") :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" :toggle-scale-text {:tooltip "K"
:command "k" :command "k"
:fn #(st/emit! (dw/toggle-layout-flags :scale-text))} :fn #(st/emit! (toggle-layout-flag :scale-text))}
:increase-zoom {:tooltip "+" :increase-zoom {:tooltip "+"
:command ["+" "="] :command ["+" "="]
@ -354,7 +360,7 @@
:hide-ui {:tooltip "\\" :hide-ui {:tooltip "\\"
:command "\\" :command "\\"
:fn #(st/emit! (dw/toggle-layout-flags :hide-ui))} :fn #(st/emit! (toggle-layout-flag :hide-ui))}
:toggle-focus-mode {:command "f" :toggle-focus-mode {:command "f"
:tooltip "F" :tooltip "F"

View file

@ -217,7 +217,7 @@
(mf/defc frame-svg (mf/defc frame-svg
{::mf/wrap [mf/memo]} {::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) (let [frame-id (:id frame)
include-metadata? (mf/use-ctx export/include-metadata-ctx) include-metadata? (mf/use-ctx export/include-metadata-ctx)
@ -253,7 +253,13 @@
:xmlns "http://www.w3.org/2000/svg" :xmlns "http://www.w3.org/2000/svg"
:xmlnsXlink "http://www.w3.org/1999/xlink" :xmlnsXlink "http://www.w3.org/1999/xlink"
:xmlns:penpot (when include-metadata? "https://penpot.app/xmlns")} :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/defc component-svg
{::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]} {::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]}

View file

@ -81,7 +81,8 @@
frame-shape (frame/frame-shape shape-container) frame-shape (frame/frame-shape shape-container)
frame-wrapper (shape-wrapper-factory frame-shape)] frame-wrapper (shape-wrapper-factory frame-shape)]
(mf/fnc frame-container (mf/fnc frame-container
{::mf/wrap-props false} {::mf/wrap-props false
::mf/wrap [mf/memo]}
[props] [props]
(let [shape (unchecked-get props "shape") (let [shape (unchecked-get props "shape")
childs (mapv #(get objects %) (:shapes shape)) childs (mapv #(get objects %) (:shapes shape))

View file

@ -72,12 +72,13 @@
[:span.btn-close {:on-click on-close} i/close]]]) [:span.btn-close {:on-click on-close} i/close]]])
(mf/defc thumbnail-item (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]}] [{:keys [selected? frame on-click index objects]}]
[:div.thumbnail-item {:on-click #(on-click % index)} [:div.thumbnail-item {:on-click #(on-click % index)}
[:div.thumbnail-preview [:div.thumbnail-preview
{:class (dom/classnames :selected selected?)} {: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 [:div.thumbnail-info
[:span.name {:title (:name frame)} (:name frame)]]]) [:span.name {:title (:name frame)} (:name frame)]]])
@ -101,9 +102,9 @@
(on-close))))] (on-close))))]
[:section.viewer-thumbnails [:section.viewer-thumbnails
{:class (dom/classnames :expanded @expanded? {;; This is better as an inline-style so it won't make a reflow of every frame inside
:invisible (not show?)) :style {:display (when (not show?) "none")}
:class (dom/classnames :expanded @expanded?)
:ref container} :ref container}
[:& thumbnails-summary {:on-toggle-expand #(swap! expanded? not) [:& thumbnails-summary {:on-toggle-expand #(swap! expanded? not)

View file

@ -79,7 +79,7 @@
[:* [:*
[:& left-toolbar {:layout layout}] [:& left-toolbar {:layout layout}]
(if (:collapse-left-sidebar 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] i/arrow-slide]
[:& left-sidebar {:layout layout}]) [:& left-sidebar {:layout layout}])
[:& right-sidebar {:section options-mode [:& right-sidebar {:section options-mode

View file

@ -9,6 +9,7 @@
(:require (:require
[app.common.data :as d] [app.common.data :as d]
[app.common.spec.page :as csp] [app.common.spec.page :as csp]
[app.main.data.events :as ev]
[app.main.data.modal :as modal] [app.main.data.modal :as modal]
[app.main.data.workspace :as dw] [app.main.data.workspace :as dw]
[app.main.data.workspace.interactions :as dwi] [app.main.data.workspace.interactions :as dwi]
@ -447,9 +448,9 @@
(mf/defc viewport-context-menu (mf/defc viewport-context-menu
[] []
(let [focus (mf/deref refs/workspace-focus-selected) (let [focus (mf/deref refs/workspace-focus-selected)
do-paste #(st/emit! dw/paste)
do-paste (st/emitf dw/paste) do-hide-ui #(st/emit! (-> (dw/toggle-layout-flag :hide-ui)
do-hide-ui (st/emitf (dw/toggle-layout-flags :hide-ui)) (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))]
[:* [:*
[:& menu-entry {:title (tr "workspace.shape.menu.paste") [:& menu-entry {:title (tr "workspace.shape.menu.paste")

View file

@ -206,7 +206,13 @@
(fn [item] (fn [item]
(fn [event] (fn [event]
(dom/stop-propagation 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/use-effect
(mf/deps @editing?) (mf/deps @editing?)
@ -275,7 +281,7 @@
[:li {:on-click #(st/emit! (dw/select-all))} [:li {:on-click #(st/emit! (dw/select-all))}
[:span (tr "workspace.header.menu.select-all")] [:span (tr "workspace.header.menu.select-all")]
[:span.shortcut (sc/get-tooltip :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 [:span
(if (contains? layout :scale-text) (if (contains? layout :scale-text)
(tr "workspace.header.menu.disable-scale-text") (tr "workspace.header.menu.disable-scale-text")
@ -285,21 +291,22 @@
[:& dropdown {:show (= @show-sub-menu? :view) [:& dropdown {:show (= @show-sub-menu? :view)
:on-close #(reset! show-sub-menu? false)} :on-close #(reset! show-sub-menu? false)}
[:ul.sub-menu.view [:ul.sub-menu.view
[:li {:on-click #(st/emit! (dw/toggle-layout-flags :rules))} [:li {:on-click #(st/emit! (toggle-flag :rules))}
[:span [:span
(if (contains? layout :rules) (if (contains? layout :rules)
(tr "workspace.header.menu.hide-rules") (tr "workspace.header.menu.hide-rules")
(tr "workspace.header.menu.show-rules"))] (tr "workspace.header.menu.show-rules"))]
[:span.shortcut (sc/get-tooltip :toggle-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 [:span
(if (contains? layout :display-grid) (if (contains? layout :display-grid)
(tr "workspace.header.menu.hide-grid") (tr "workspace.header.menu.hide-grid")
(tr "workspace.header.menu.show-grid"))] (tr "workspace.header.menu.show-grid"))]
[:span.shortcut (sc/get-tooltip :toggle-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 [:span
(if (or (contains? layout :sitemap) (contains? layout :layers)) (if (or (contains? layout :sitemap) (contains? layout :layers))
(tr "workspace.header.menu.hide-layers") (tr "workspace.header.menu.hide-layers")
@ -308,8 +315,8 @@
[:li {:on-click (fn [] [:li {:on-click (fn []
(r/set-resize-type! :bottom) (r/set-resize-type! :bottom)
(st/emit! (dw/remove-layout-flags :textpalette) (st/emit! (dw/remove-layout-flag :textpalette)
(dw/toggle-layout-flags :colorpalette)))} (toggle-flag :colorpalette)))}
[:span [:span
(if (contains? layout :colorpalette) (if (contains? layout :colorpalette)
(tr "workspace.header.menu.hide-palette") (tr "workspace.header.menu.hide-palette")
@ -318,28 +325,29 @@
[:li {:on-click (fn [] [:li {:on-click (fn []
(r/set-resize-type! :bottom) (r/set-resize-type! :bottom)
(st/emit! (dw/remove-layout-flags :colorpalette) (st/emit! (dw/remove-layout-flag :colorpalette)
(dw/toggle-layout-flags :textpalette)))} (toggle-flag :textpalette)))}
[:span [:span
(if (contains? layout :textpalette) (if (contains? layout :textpalette)
(tr "workspace.header.menu.hide-textpalette") (tr "workspace.header.menu.hide-textpalette")
(tr "workspace.header.menu.show-textpalette"))] (tr "workspace.header.menu.show-textpalette"))]
[:span.shortcut (sc/get-tooltip :toggle-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 [:span
(if (contains? layout :assets) (if (contains? layout :assets)
(tr "workspace.header.menu.hide-assets") (tr "workspace.header.menu.hide-assets")
(tr "workspace.header.menu.show-assets"))] (tr "workspace.header.menu.show-assets"))]
[:span.shortcut (sc/get-tooltip :toggle-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 [:span
(if (contains? layout :display-artboard-names) (if (contains? layout :display-artboard-names)
(tr "workspace.header.menu.hide-artboard-names") (tr "workspace.header.menu.hide-artboard-names")
(tr "workspace.header.menu.show-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 [:span
(tr "workspace.shape.menu.hide-ui")] (tr "workspace.shape.menu.hide-ui")]
[:span.shortcut (sc/get-tooltip :hide-ui)]]]] [:span.shortcut (sc/get-tooltip :hide-ui)]]]]
@ -347,21 +355,21 @@
[:& dropdown {:show (= @show-sub-menu? :preferences) [:& dropdown {:show (= @show-sub-menu? :preferences)
:on-close #(reset! show-sub-menu? false)} :on-close #(reset! show-sub-menu? false)}
[:ul.sub-menu.preferences [: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 [:span
(if (contains? layout :snap-guides) (if (contains? layout :snap-guides)
(tr "workspace.header.menu.disable-snap-guides") (tr "workspace.header.menu.disable-snap-guides")
(tr "workspace.header.menu.enable-snap-guides"))] (tr "workspace.header.menu.enable-snap-guides"))]
[:span.shortcut (sc/get-tooltip :toggle-snap-guide)]] [: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 [:span
(if (contains? layout :snap-grid) (if (contains? layout :snap-grid)
(tr "workspace.header.menu.disable-snap-grid") (tr "workspace.header.menu.disable-snap-grid")
(tr "workspace.header.menu.enable-snap-grid"))] (tr "workspace.header.menu.enable-snap-grid"))]
[:span.shortcut (sc/get-tooltip :toggle-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 [:span
(if (contains? layout :dynamic-alignment) (if (contains? layout :dynamic-alignment)
(tr "workspace.header.menu.disable-dynamic-alignment") (tr "workspace.header.menu.disable-dynamic-alignment")
@ -410,7 +418,8 @@
[:button.document-history [:button.document-history
{:alt (tr "workspace.sidebar.history" (sc/get-tooltip :toggle-history)) {:alt (tr "workspace.sidebar.history" (sc/get-tooltip :toggle-history))
:class (when (contains? layout :document-history) "selected") :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]] i/recent]]
[:div.options-section [:div.options-section

View file

@ -9,6 +9,7 @@
[app.common.geom.point :as gpt] [app.common.geom.point :as gpt]
[app.common.math :as mth] [app.common.math :as mth]
[app.common.media :as cm] [app.common.media :as cm]
[app.main.data.events :as ev]
[app.main.data.workspace :as dw] [app.main.data.workspace :as dw]
[app.main.data.workspace.shortcuts :as sc] [app.main.data.workspace.shortcuts :as sc]
[app.main.refs :as refs] [app.main.refs :as refs]
@ -126,8 +127,9 @@
:on-click (fn [] :on-click (fn []
(r/set-resize-type! :bottom) (r/set-resize-type! :bottom)
(dom/add-class! (dom/get-element-by-class "color-palette") "fade-out-down") (dom/add-class! (dom/get-element-by-class "color-palette") "fade-out-down")
(ts/schedule 300 #(st/emit! (dw/remove-layout-flags :colorpalette) (ts/schedule 300 #(st/emit! (dw/remove-layout-flag :colorpalette)
(dw/toggle-layout-flags :textpalette))))} (-> (dw/toggle-layout-flag :textpalette)
(vary-meta assoc ::ev/origin "workspace-left-toolbar")))))}
"Ag"] "Ag"]
[:li.tooltip.tooltip-right [:li.tooltip.tooltip-right
@ -136,6 +138,7 @@
:on-click (fn [] :on-click (fn []
(r/set-resize-type! :bottom) (r/set-resize-type! :bottom)
(dom/add-class! (dom/get-element-by-class "color-palette") "fade-out-down") (dom/add-class! (dom/get-element-by-class "color-palette") "fade-out-down")
(ts/schedule 300 #(st/emit! (dw/remove-layout-flags :textpalette) (ts/schedule 300 #(st/emit! (dw/remove-layout-flag :textpalette)
(dw/toggle-layout-flags :colorpalette))))} (-> (dw/toggle-layout-flag :colorpalette)
(vary-meta assoc ::ev/origin "workspace-left-toolbar")))))}
i/palette]]]])) i/palette]]]]))

View file

@ -7,7 +7,7 @@
(ns app.main.ui.workspace.nudge (ns app.main.ui.workspace.nudge
(:require (:require
[app.main.data.modal :as modal] [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.refs :as refs]
[app.main.store :as st] [app.main.store :as st]
[app.main.ui.components.numeric-input :refer [numeric-input]] [app.main.ui.components.numeric-input :refer [numeric-input]]
@ -19,34 +19,32 @@
[rumext.alpha :as mf]) [rumext.alpha :as mf])
(:import goog.events.EventType)) (: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/defc nudge-modal
{::mf/register modal/components {::mf/register modal/components
::mf/register-as :nudge-option} ::mf/register-as :nudge-option}
[] []
(let [profile (mf/deref refs/profile) (let [profile (mf/deref refs/profile)
nudge (get-in profile [:props :nudge] {:big 10 :small 1}) nudge (or (get-in profile [:props :nudge]) {:big 10 :small 1})
update-nudge (fn [value size] (let [update-nudge (if (= :big size) update-big (mf/use-fn #(st/emit! (dw/update-nudge {:big %})))
{:big value :small (:small nudge)} update-small (mf/use-fn #(st/emit! (dw/update-nudge {:small %})))
{:small value :big (:big nudge)})] on-close (mf/use-fn #(modal/hide!))]
(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!)]
(mf/with-effect (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) (->> (events/listen js/document EventType.KEYDOWN on-keydown)
(partial events/unlistenByKey)))) (partial events/unlistenByKey)))
[:div.nudge-modal-overlay [:div.nudge-modal-overlay
[:div.nudge-modal-container [:div.nudge-modal-container
[:div.nudge-modal-header [:div.nudge-modal-header
[:p.nudge-modal-title (tr "modals.nudge-title")] [: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.nudge-modal-body
[:div.input-wrapper [:div.input-wrapper
[:span [:span

View file

@ -36,7 +36,7 @@
handle-collapse handle-collapse
(fn [] (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 [:aside.settings-bar.settings-bar-left {:ref parent-ref
:class (dom/classnames :class (dom/classnames

View file

@ -40,4 +40,5 @@
(defonce storage (atom (load (unchecked-get g/global "localStorage")))) (defonce storage (atom (load (unchecked-get g/global "localStorage"))))
(add-watch storage :persistence #(persist js/localStorage %3 %4)) (add-watch storage :persistence #(persist js/localStorage %3 %4))

View file

@ -282,4 +282,4 @@
(defn ^:export hide-ui (defn ^:export hide-ui
[] []
(st/emit! (st/emit!
(dw/toggle-layout-flags :hide-ui))) (dw/toggle-layout-flag :hide-ui)))