mirror of
https://github.com/penpot/penpot.git
synced 2025-05-11 19:46:38 +02:00
Merge remote-tracking branch 'origin/staging' into develop
This commit is contained in:
commit
10e0cf121b
18 changed files with 123 additions and 49 deletions
|
@ -12,8 +12,11 @@
|
|||
[app.common.media :as cm]
|
||||
[app.common.spec :as us]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.main.data.messages :as dm]
|
||||
[app.main.fonts :as fonts]
|
||||
[app.main.repo :as rp]
|
||||
[app.main.store :as st]
|
||||
[app.util.i18n :refer [tr]]
|
||||
[app.util.storage :refer [storage]]
|
||||
[app.util.webapi :as wa]
|
||||
[beicon.core :as rx]
|
||||
|
@ -133,17 +136,35 @@
|
|||
{:data data
|
||||
:name (.-name blob)
|
||||
:type (parse-mtype data)}))
|
||||
(rx/mapcat (fn [{:keys [type] :as font}]
|
||||
(if type
|
||||
(rx/catch (fn []
|
||||
(rx/of {:error (.-name blob)})))
|
||||
(rx/mapcat (fn [{:keys [type, error] :as font}]
|
||||
(if (or type error)
|
||||
(rx/of font)
|
||||
(rx/empty))))))]
|
||||
|
||||
(->> (rx/from blobs)
|
||||
(rx/mapcat read-blob)
|
||||
(rx/map parse-font)
|
||||
(rx/filter some?)
|
||||
(rx/map prepare)
|
||||
(rx/reduce join {}))))
|
||||
(let [fonts (->> (rx/from blobs)
|
||||
(rx/mapcat read-blob))
|
||||
errors (->> fonts
|
||||
(rx/filter #(some? (:error %)))
|
||||
(rx/reduce (fn [acc font]
|
||||
(conj acc (str "'" (:error font) "'")))
|
||||
[]))]
|
||||
|
||||
(rx/subscribe errors
|
||||
#(when
|
||||
(not-empty %)
|
||||
(st/emit!
|
||||
(dm/error
|
||||
(if (> (count %) 1)
|
||||
(tr "errors.bad-font-plural" (str/join ", " %))
|
||||
(tr "errors.bad-font" (first %)))))))
|
||||
(->> fonts
|
||||
(rx/filter #(nil? (:error %)))
|
||||
(rx/map parse-font)
|
||||
(rx/filter some?)
|
||||
(rx/map prepare)
|
||||
(rx/reduce join {})))))
|
||||
|
||||
(defn- calculate-family-to-id-mapping
|
||||
[existing]
|
||||
|
|
|
@ -204,7 +204,8 @@
|
|||
(watch [_ state stream]
|
||||
(let [id (get-in state [:workspace-local :edition])
|
||||
current-move (get-in state [:workspace-local :edit-path id :current-move])]
|
||||
(if (= same-event current-move)
|
||||
;; id can be null if we just selected the tool but we didn't start drawing
|
||||
(if (and id (= same-event current-move))
|
||||
(let [points (get-in state [:workspace-local :edit-path id :selected-points] #{})
|
||||
|
||||
move-events (->> stream
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
[app.common.pages.changes-spec :as pcs]
|
||||
[app.common.spec :as us]
|
||||
[app.common.types.file :as ctf]
|
||||
[app.common.types.shape-tree :as ctst]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.config :as cf]
|
||||
[app.main.data.dashboard :as dd]
|
||||
|
@ -219,14 +220,23 @@
|
|||
(ptk/reify ::changes-persisted
|
||||
ptk/UpdateEvent
|
||||
(update [_ state]
|
||||
(if (= file-id (:current-file-id state))
|
||||
(-> state
|
||||
(update-in [:workspace-file :revn] max revn)
|
||||
(update :workspace-data cp/process-changes changes))
|
||||
(-> state
|
||||
(update-in [:workspace-libraries file-id :revn] max revn)
|
||||
(update-in [:workspace-libraries file-id :data]
|
||||
cp/process-changes changes))))))
|
||||
(let [changes (group-by :page-id changes)]
|
||||
(if (= file-id (:current-file-id state))
|
||||
(-> state
|
||||
(update-in [:workspace-file :revn] max revn)
|
||||
(update :workspace-data (fn [file]
|
||||
(loop [fdata file
|
||||
entries (seq changes)]
|
||||
(if-let [[page-id changes] (first entries)]
|
||||
(recur (-> fdata
|
||||
(cp/process-changes changes)
|
||||
(ctst/update-object-indices page-id))
|
||||
(rest entries))
|
||||
fdata)))))
|
||||
(-> state
|
||||
(update-in [:workspace-libraries file-id :revn] max revn)
|
||||
(update-in [:workspace-libraries file-id :data]
|
||||
cp/process-changes changes)))))))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
|
|
@ -303,8 +303,7 @@
|
|||
[:div.table-field.search-input
|
||||
[:input {:placeholder (tr "labels.search-font")
|
||||
:default-value ""
|
||||
:on-change on-change
|
||||
}]]]
|
||||
:on-change on-change}]]]
|
||||
|
||||
(cond
|
||||
(seq fonts)
|
||||
|
|
|
@ -163,7 +163,7 @@
|
|||
(let [locale (mf/deref i18n/locale)
|
||||
time (dt/timeago modified-at {:locale locale})]
|
||||
[:span.date
|
||||
(str (tr "ds.updated-at" time))]))
|
||||
time]))
|
||||
|
||||
(defn create-counter-element
|
||||
[_element file-count]
|
||||
|
@ -390,12 +390,13 @@
|
|||
|
||||
(mf/defc line-grid-row
|
||||
[{:keys [files selected-files dragging? limit] :as props}]
|
||||
(let [limit (if dragging? (dec limit) limit)]
|
||||
(let [elements limit
|
||||
limit (if dragging? (dec limit) limit)]
|
||||
[:div.grid-row.no-wrap
|
||||
{:style {:grid-template-columns (dm/str "repeat(" limit ", 1fr)")}}
|
||||
{:style {:grid-template-columns (dm/str "repeat(" elements ", 1fr)")}}
|
||||
|
||||
(when dragging?
|
||||
[:div.grid-item])
|
||||
[:div.grid-item.dragged])
|
||||
(for [item (take limit files)]
|
||||
[:& grid-item
|
||||
{:id (:id item)
|
||||
|
|
|
@ -30,9 +30,10 @@
|
|||
(mf/use-callback
|
||||
(mf/deps @newsletter-updates @newsletter-news)
|
||||
(fn []
|
||||
(st/emit! (dm/success message)
|
||||
(modal/show {:type :onboarding-team})
|
||||
(du/update-profile-props {:newsletter-updates @newsletter-updates :newsletter-news @newsletter-news}))))]
|
||||
(st/emit! (when (or @newsletter-updates @newsletter-news)
|
||||
(dm/success message))
|
||||
(modal/show {:type :onboarding-team})
|
||||
(du/update-profile-props {:newsletter-updates @newsletter-updates :newsletter-news @newsletter-news}))))]
|
||||
|
||||
[:div.modal-overlay
|
||||
[:div.modal-container.onboarding.newsletter.animated.fadeInDown
|
||||
|
|
|
@ -534,9 +534,11 @@
|
|||
(fn []
|
||||
(st/emit! (dv/finalize props)))))
|
||||
|
||||
(when-let [data (mf/deref refs/viewer-data)]
|
||||
(if-let [data (mf/deref refs/viewer-data)]
|
||||
(let [key (str (get-in data [:file :id]))]
|
||||
[:& viewer {:params props :data data :key key}])))
|
||||
[:& viewer {:params props :data data :key key}])
|
||||
[:div.loader-content.viewer-loader
|
||||
i/loader-pencil]))
|
||||
|
||||
(mf/defc breaking-change-notice
|
||||
[]
|
||||
|
|
|
@ -96,7 +96,6 @@
|
|||
|
||||
;; REFS
|
||||
viewport-ref (mf/use-ref nil)
|
||||
overlays-ref (mf/use-ref nil)
|
||||
|
||||
;; VARS
|
||||
disable-paste (mf/use-var false)
|
||||
|
@ -184,7 +183,7 @@
|
|||
|
||||
disabled-guides? (or drawing-tool transform)]
|
||||
|
||||
(hooks/setup-dom-events viewport-ref overlays-ref zoom disable-paste in-viewport?)
|
||||
(hooks/setup-dom-events viewport-ref zoom disable-paste in-viewport?)
|
||||
(hooks/setup-viewport-size viewport-ref)
|
||||
(hooks/setup-cursor cursor alt? mod? space? panning drawing-tool drawing-path? node-editing?)
|
||||
(hooks/setup-keyboard alt? mod? space?)
|
||||
|
@ -194,7 +193,7 @@
|
|||
(hooks/setup-active-frames base-objects hover-ids selected active-frames zoom transform vbox)
|
||||
|
||||
[:div.viewport
|
||||
[:div.viewport-overlays {:ref overlays-ref}
|
||||
[:div.viewport-overlays
|
||||
;; The behaviour inside a foreign object is a bit different that in plain HTML so we wrap
|
||||
;; inside a foreign object "dummy" so this awkward behaviour is take into account
|
||||
[:svg {:style {:top 0 :left 0 :position "fixed" :width "100%" :height "100%" :opacity 0}}
|
||||
|
@ -337,11 +336,6 @@
|
|||
:on-frame-leave on-frame-leave
|
||||
:on-frame-select on-frame-select}])
|
||||
|
||||
(when show-gradient-handlers?
|
||||
[:& gradients/gradient-handlers
|
||||
{:id (first selected)
|
||||
:zoom zoom}])
|
||||
|
||||
(when show-draw-area?
|
||||
[:& drawarea/draw-area
|
||||
{:shape drawing-obj
|
||||
|
@ -441,4 +435,9 @@
|
|||
:zoom zoom
|
||||
:objects objects-modified
|
||||
:current-transform transform
|
||||
:hover-disabled? hover-disabled?}])])]]]))
|
||||
:hover-disabled? hover-disabled?}])])
|
||||
|
||||
(when show-gradient-handlers?
|
||||
[:& gradients/gradient-handlers
|
||||
{:id (first selected)
|
||||
:zoom zoom}])]]]))
|
||||
|
|
|
@ -359,18 +359,16 @@
|
|||
pt (utils/translate-point-to-viewport viewport zoom raw-pt)]
|
||||
(rx/push! move-stream pt)))))
|
||||
|
||||
(defn on-mouse-wheel [viewport-ref overlays-ref zoom]
|
||||
(defn on-mouse-wheel [viewport-ref zoom]
|
||||
(mf/use-callback
|
||||
(mf/deps zoom)
|
||||
(fn [event]
|
||||
(let [viewport (mf/ref-val viewport-ref)
|
||||
overlays (mf/ref-val overlays-ref)
|
||||
event (.getBrowserEvent ^js event)
|
||||
target (dom/get-target event)
|
||||
mod? (kbd/mod? event)]
|
||||
|
||||
(when (or (dom/is-child? viewport target)
|
||||
(dom/is-child? overlays target))
|
||||
(when (dom/is-child? viewport target)
|
||||
(dom/prevent-default event)
|
||||
(dom/stop-propagation event)
|
||||
(let [pt (->> (dom/get-client-position event)
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
[rumext.v2 :as mf])
|
||||
(:import goog.events.EventType))
|
||||
|
||||
(defn setup-dom-events [viewport-ref overlays-ref zoom disable-paste in-viewport?]
|
||||
(defn setup-dom-events [viewport-ref zoom disable-paste in-viewport?]
|
||||
(let [on-key-down (actions/on-key-down)
|
||||
on-key-up (actions/on-key-up)
|
||||
on-mouse-move (actions/on-mouse-move viewport-ref zoom)
|
||||
on-mouse-wheel (actions/on-mouse-wheel viewport-ref overlays-ref zoom)
|
||||
on-mouse-wheel (actions/on-mouse-wheel viewport-ref zoom)
|
||||
on-paste (actions/on-paste disable-paste in-viewport?)]
|
||||
(mf/use-layout-effect
|
||||
(mf/deps on-key-down on-key-up on-mouse-move on-mouse-wheel on-paste)
|
||||
|
|
|
@ -167,7 +167,7 @@
|
|||
|
||||
[:g.frame-titles
|
||||
(for [frame frames]
|
||||
(when (= (:frame-id frame) uuid/zero)
|
||||
(when (= (:parent-id frame) uuid/zero)
|
||||
[:& frame-title {:key (dm/str "frame-title-" (:id frame))
|
||||
:frame frame
|
||||
:selected? (contains? selected (:id frame))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue