Merge remote-tracking branch 'origin/staging' into develop

This commit is contained in:
Andrey Antukh 2023-08-29 13:25:51 +02:00
commit 1794ea0d9e
13 changed files with 88 additions and 23 deletions

View file

@ -13,6 +13,20 @@
### :heart: Community contributions by (Thank you!) ### :heart: Community contributions by (Thank you!)
## 1.19.2
### :sparkles: New features
- Navigate up in layer hierarchy with Shift+Enter shortcut [Taiga #5734](https://tree.taiga.io/project/penpot/us/5734)
- Click on the flow tags open viewer with the selected frame [Taiga #5044](https://tree.taiga.io/project/penpot/us/5044)
### :bug: Bugs fixed
- Fix unexpected output on get-page rpc method when invalid object-id is provided [Github #3546](https://github.com/penpot/penpot/issues/3546)
- Fix Invalid files amount after moving file from Project to Drafts [Taiga #5638](https://tree.taiga.io/project/penpot/us/5638)
- Fix deleted pages comments shown in right sidebar [Taiga #5648](https://tree.taiga.io/project/penpot/us/5648)
- Fix tooltip on toggle visibility and toggle lock buttons [Taiga #5141](https://tree.taiga.io/project/penpot/issue/5141)
## 1.19.1 ## 1.19.1
### :bug: Bugs fixed ### :bug: Bugs fixed

View file

@ -510,7 +510,8 @@
other not needed objects removed from the `:objects` data other not needed objects removed from the `:objects` data
structure." structure."
[{:keys [objects] :as page} object-id] [{:keys [objects] :as page} object-id]
(let [objects (cph/get-children-with-self objects object-id)] (let [objects (->> (cph/get-children-with-self objects object-id)
(filter some?))]
(assoc page :objects (d/index-by :id objects)))) (assoc page :objects (d/index-by :id objects))))
(defn- prune-thumbnails (defn- prune-thumbnails

View file

@ -176,6 +176,7 @@
} }
.flow-badge { .flow-badge {
cursor: pointer;
display: flex; display: flex;
& .content { & .content {
@ -199,7 +200,8 @@
} }
} }
&.selected .content { &.selected .content,
&:hover .content {
background-color: $color-primary; background-color: $color-primary;
& svg { & svg {

View file

@ -279,7 +279,9 @@
(assoc-in (conj path :position) (:position comment-thread)) (assoc-in (conj path :position) (:position comment-thread))
(assoc-in (conj path :frame-id) (:frame-id comment-thread)))))) (assoc-in (conj path :frame-id) (:frame-id comment-thread))))))
(fetched [[users comments] state] (fetched [[users comments] state]
(let [state (-> state (let [pages (get-in state [:workspace-data :pages-index])
comments (filter #(some? (get pages (:page-id %))) comments)
state (-> state
(assoc :comment-threads (d/index-by :id comments)) (assoc :comment-threads (d/index-by :id comments))
(update :current-file-comments-users merge (d/index-by :id users)))] (update :current-file-comments-users merge (d/index-by :id users)))]
(reduce set-comment-threds state comments)))] (reduce set-comment-threds state comments)))]

View file

@ -891,13 +891,13 @@
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(let [origin-project (get-in state [:dashboard-files (first ids) :project-id]) (let [origin-project (get-in state [:dashboard-files (first ids) :project-id])
update-project (fn [project delta] update-project (fn [project delta op]
(-> project (-> project
(update :count #(+ % (count ids))) (update :count #(op % (count ids)))
(assoc :modified-at (dt/plus (dt/now) {:milliseconds delta}))))] (assoc :modified-at (dt/plus (dt/now) {:milliseconds delta}))))]
(-> state (-> state
(d/update-in-when [:dashboard-projects origin-project] update-project 0) (d/update-in-when [:dashboard-projects origin-project] update-project 0 -)
(d/update-in-when [:dashboard-projects project-id] update-project 10)))) (d/update-in-when [:dashboard-projects project-id] update-project 10 +))))
ptk/WatchEvent ptk/WatchEvent
(watch [_ _ _] (watch [_ _ _]

View file

@ -155,6 +155,8 @@
(rx/of (df/fonts-fetched fonts) (rx/of (df/fonts-fetched fonts)
(bundle-fetched (merge bundle params)))))))))) (bundle-fetched (merge bundle params))))))))))
(declare go-to-frame)
(declare go-to-frame-by-index)
(declare go-to-frame-auto) (declare go-to-frame-auto)
(defn bundle-fetched (defn bundle-fetched
@ -182,16 +184,20 @@
ptk/WatchEvent ptk/WatchEvent
(watch [_ state _] (watch [_ state _]
(let [route (:route state) (let [route (:route state)
qparams (:query-params route) qparams (:query-params route)
index (:index qparams)] index (:index qparams)
frame-id (:frame-id qparams)]
(rx/merge (rx/merge
(rx/of (case (:zoom qparams) (rx/of (case (:zoom qparams)
"fit" zoom-to-fit "fit" zoom-to-fit
"fill" zoom-to-fill "fill" zoom-to-fill
nil)) nil))
(when (nil? index) (rx/of
(rx/of (go-to-frame-auto))))))))) (cond
(some? frame-id) (go-to-frame (uuid frame-id))
(some? index) (go-to-frame-by-index index)
:else (go-to-frame-auto)))))))))
(defn fetch-comment-threads (defn fetch-comment-threads
[{:keys [file-id page-id share-id] :as params}] [{:keys [file-id page-id share-id] :as params}]

View file

@ -1002,6 +1002,23 @@
(rx/of (dwe/start-edition-mode id) (rx/of (dwe/start-edition-mode id)
(dwdp/start-path-edit id))))))))) (dwdp/start-path-edit id)))))))))
(defn select-parent-layer
[]
(ptk/reify ::select-parent-layer
ptk/WatchEvent
(watch [_ state _]
(let [selected (wsh/lookup-selected state)
objects (wsh/lookup-page-objects state)
shapes-to-select
(->> selected
(reduce
(fn [result shape-id]
(let [parent-id (dm/get-in objects [shape-id :parent-id])]
(if (and (some? parent-id) (not= parent-id uuid/zero))
(conj result parent-id)
(conj result shape-id))))
(d/ordered-set)))]
(rx/of (dws/select-shapes shapes-to-select))))))
;; --- Change Page Order (D&D Ordering) ;; --- Change Page Order (D&D Ordering)
@ -1114,7 +1131,7 @@
(defn toggle-proportion-lock (defn toggle-proportion-lock
[] []
(ptk/reify ::toggle-propotion-lock (ptk/reify ::toggle-proportion-lock
ptk/WatchEvent ptk/WatchEvent
(watch [_ state _] (watch [_ state _]
(let [page-id (:current-page-id state) (let [page-id (:current-page-id state)
@ -1371,7 +1388,7 @@
(defn go-to-viewer (defn go-to-viewer
([] (go-to-viewer {})) ([] (go-to-viewer {}))
([{:keys [file-id page-id section]}] ([{:keys [file-id page-id section frame-id]}]
(ptk/reify ::go-to-viewer (ptk/reify ::go-to-viewer
ptk/WatchEvent ptk/WatchEvent
(watch [_ state _] (watch [_ state _]
@ -1379,7 +1396,9 @@
pparams {:file-id (or file-id current-file-id)} pparams {:file-id (or file-id current-file-id)}
qparams (cond-> {:page-id (or page-id current-page-id)} qparams (cond-> {:page-id (or page-id current-page-id)}
(some? section) (some? section)
(assoc :section section))] (assoc :section section)
(some? frame-id)
(assoc :frame-id frame-id))]
(rx/of ::dwp/force-persist (rx/of ::dwp/force-persist
(rt/nav-new-window* {:rname :viewer (rt/nav-new-window* {:rname :viewer
:path-params pparams :path-params pparams

View file

@ -284,8 +284,8 @@
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dw/toggle-lock-selected))} :fn #(emit-when-no-readonly (dw/toggle-lock-selected))}
:toggle-lock-size {:tooltip (ds/meta (ds/alt "L")) :toggle-lock-size {:tooltip (ds/shift "L")
:command (ds/c-mod "alt+l") :command "shift+l"
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dw/toggle-proportion-lock))} :fn #(emit-when-no-readonly (dw/toggle-proportion-lock))}
@ -514,6 +514,10 @@
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:fn #(st/emit! (dw/select-next-shape))} :fn #(st/emit! (dw/select-next-shape))}
:select-parent-layer {:tooltip (ds/shift ds/enter)
:command "shift+enter"
:subsections [:navigation-workspace]
:fn #(emit-when-no-readonly (dw/select-parent-layer))}
;; SHAPE ;; SHAPE

View file

@ -109,7 +109,7 @@
:viewer :viewer
(let [{:keys [query-params path-params]} route (let [{:keys [query-params path-params]} route
{:keys [index share-id section page-id interactions-mode] :or {section :interactions interactions-mode :show-on-click}} query-params {:keys [index share-id section page-id interactions-mode frame-id] :or {section :interactions interactions-mode :show-on-click}} query-params
{:keys [file-id]} path-params] {:keys [file-id]} path-params]
(if (:token query-params) (if (:token query-params)
[:& viewer/breaking-change-notice] [:& viewer/breaking-change-notice]
@ -122,7 +122,8 @@
:interactions-show? (case (keyword interactions-mode) :interactions-show? (case (keyword interactions-mode)
:hide false :hide false
:show true :show true
:show-on-click false)}])) :show-on-click false)
:frame-id frame-id}]))
:workspace :workspace
(let [project-id (some-> params :path :project-id uuid) (let [project-id (some-> params :path :project-id uuid)

View file

@ -23,6 +23,7 @@
[app.main.ui.icons :as i] [app.main.ui.icons :as i]
[app.main.ui.workspace.sidebar.layer-name :refer [layer-name]] [app.main.ui.workspace.sidebar.layer-name :refer [layer-name]]
[app.util.dom :as dom] [app.util.dom :as dom]
[app.util.i18n :refer [tr]]
[app.util.keyboard :as kbd] [app.util.keyboard :as kbd]
[app.util.timers :as ts] [app.util.timers :as ts]
[beicon.core :as rx] [beicon.core :as rx]
@ -191,6 +192,7 @@
;; seek for an alternate solution. Maybe use-context? ;; seek for an alternate solution. Maybe use-context?
scroll-node (dom/get-parent-with-data node "scrollContainer") scroll-node (dom/get-parent-with-data node "scrollContainer")
parent-node (dom/get-parent-at node 2) parent-node (dom/get-parent-at node 2)
first-child-node (dom/get-first-child parent-node)
subid subid
(when (and single? selected?) (when (and single? selected?)
@ -200,9 +202,9 @@
#(let [scroll-distance-ratio (dom/get-scroll-distance-ratio node scroll-node) #(let [scroll-distance-ratio (dom/get-scroll-distance-ratio node scroll-node)
scroll-behavior (if (> scroll-distance-ratio 1) "instant" "smooth")] scroll-behavior (if (> scroll-distance-ratio 1) "instant" "smooth")]
(if scroll-to (if scroll-to
(dom/scroll-into-view! parent-node #js {:block "center" :behavior scroll-behavior :inline "start"}) (dom/scroll-into-view! first-child-node #js {:block "center" :behavior scroll-behavior :inline "start"})
(do (do
(dom/scroll-into-view-if-needed! parent-node #js {:block "center" :behavior scroll-behavior :inline "start"}) (dom/scroll-into-view-if-needed! first-child-node #js {:block "center" :behavior scroll-behavior :inline "start"})
(reset! scroll-to-middle? true)))))))] (reset! scroll-to-middle? true)))))))]
#(when (some? subid) #(when (some? subid)
@ -291,11 +293,17 @@
[:button {:class (stl/css-case [:button {:class (stl/css-case
:toggle-element true :toggle-element true
:selected hidden?) :selected hidden?)
:title (if hidden?
(tr "workspace.shape.menu.show")
(tr "workspace.shape.menu.hide"))
:on-click toggle-visibility} :on-click toggle-visibility}
(if ^boolean hidden? i/hide-refactor i/shown-refactor)] (if ^boolean hidden? i/hide-refactor i/shown-refactor)]
[:button {:class (stl/css-case [:button {:class (stl/css-case
:block-element true :block-element true
:selected blocked?) :selected blocked?)
:title (if (:blocked item)
(tr "workspace.shape.menu.unlock")
(tr "workspace.shape.menu.lock"))
:on-click toggle-blocking} :on-click toggle-blocking}
(if ^boolean blocked? i/lock-refactor i/unlock-refactor)]]]] (if ^boolean blocked? i/lock-refactor i/unlock-refactor)]]]]

View file

@ -261,11 +261,13 @@
(mf/use-callback (mf/use-callback
(mf/deps (:id frame) on-frame-select) (mf/deps (:id frame) on-frame-select)
(fn [bevent] (fn [bevent]
(let [event (.-nativeEvent bevent)] (let [event (.-nativeEvent bevent)
params {:section "interactions"
:frame-id (:id frame)}]
(when (= 1 (.-which event)) (when (= 1 (.-which event))
(dom/prevent-default event) (dom/prevent-default event)
(dom/stop-propagation event) (dom/stop-propagation event)
(on-frame-select event (:id frame)))))) (st/emit! (dw/go-to-viewer params))))))
on-double-click on-double-click
(mf/use-callback (mf/use-callback

View file

@ -2703,6 +2703,9 @@ msgstr "Snap to pixel grid"
msgid "shortcuts.start-editing" msgid "shortcuts.start-editing"
msgstr "Start editing" msgstr "Start editing"
msgid "shortcuts.select-parent-layer"
msgstr "Select parent layer"
msgid "shortcuts.start-measure" msgid "shortcuts.start-measure"
msgstr "Start measurement" msgstr "Start measurement"

View file

@ -2778,6 +2778,9 @@ msgstr "Activar alineación a rejilla de pixel"
msgid "shortcuts.start-editing" msgid "shortcuts.start-editing"
msgstr "Comenzar edición" msgstr "Comenzar edición"
msgid "shortcuts.select-parent-layer"
msgstr "Seleccionar capa padre"
msgid "shortcuts.start-measure" msgid "shortcuts.start-measure"
msgstr "Comenzar medida" msgstr "Comenzar medida"