mirror of
https://github.com/penpot/penpot.git
synced 2025-05-19 07:36:10 +02:00
Merge branch 'staging' into eva-bugfixing-5
This commit is contained in:
commit
f31bc7457f
28 changed files with 434 additions and 301 deletions
|
@ -7,6 +7,7 @@
|
|||
(ns app.main.data.dashboard
|
||||
(:require
|
||||
[app.common.data :as d]
|
||||
[app.common.pages :as cp]
|
||||
[app.common.spec :as us]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.config :as cf]
|
||||
|
@ -664,10 +665,12 @@
|
|||
(ptk/reify ::create-project
|
||||
ptk/WatchEvent
|
||||
(watch [_ state _]
|
||||
(let [name (name (gensym (str (tr "dashboard.new-project-prefix") " ")))
|
||||
team-id (:current-team-id state)
|
||||
params {:name name
|
||||
:team-id team-id}
|
||||
(let [projects (get state :dashboard-projects)
|
||||
unames (cp/retrieve-used-names projects)
|
||||
name (cp/generate-unique-name unames (str (tr "dashboard.new-project-prefix") " 1"))
|
||||
team-id (:current-team-id state)
|
||||
params {:name name
|
||||
:team-id team-id}
|
||||
{:keys [on-success on-error]
|
||||
:or {on-success identity
|
||||
on-error rx/throw}} (meta params)]
|
||||
|
@ -875,7 +878,9 @@
|
|||
:or {on-success identity
|
||||
on-error rx/throw}} (meta params)
|
||||
|
||||
name (name (gensym (str (tr "dashboard.new-file-prefix") " ")))
|
||||
files (get state :dashboard-files)
|
||||
unames (cp/retrieve-used-names files)
|
||||
name (cp/generate-unique-name unames (str (tr "dashboard.new-file-prefix") " 1"))
|
||||
features (cond-> #{}
|
||||
(features/active-feature? state :components-v2)
|
||||
(conj "components/v2"))
|
||||
|
@ -1067,8 +1072,12 @@
|
|||
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") " "))))
|
||||
(let [files (get state :dashboard-files)
|
||||
unames (cp/retrieve-used-names files)]
|
||||
(cp/generate-unique-name unames (str (tr "dashboard.new-file-prefix") " 1")))
|
||||
(let [projects (get state :dashboard-projects)
|
||||
unames (cp/retrieve-used-names projects)]
|
||||
(cp/generate-unique-name unames (str (tr "dashboard.new-project-prefix") " 1"))))
|
||||
params (if in-project?
|
||||
{:project-id (:project-id pparams)
|
||||
:name name}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
[app.common.geom.proportions :as gpp]
|
||||
[app.common.geom.shapes :as gsh]
|
||||
[app.common.logging :as log]
|
||||
[app.common.pages :as cp]
|
||||
[app.common.pages.changes-builder :as pcb]
|
||||
[app.common.pages.helpers :as cph]
|
||||
[app.common.spec :as us]
|
||||
|
@ -408,8 +409,8 @@
|
|||
ptk/WatchEvent
|
||||
(watch [it state _]
|
||||
(let [pages (get-in state [:workspace-data :pages-index])
|
||||
unames (ctst/retrieve-used-names pages)
|
||||
name (ctst/generate-unique-name unames "Page-1")
|
||||
unames (cp/retrieve-used-names pages)
|
||||
name (cp/generate-unique-name unames "Page 1")
|
||||
|
||||
changes (-> (pcb/empty-changes it)
|
||||
(pcb/add-empty-page id name))]
|
||||
|
@ -423,9 +424,9 @@
|
|||
(watch [it state _]
|
||||
(let [id (uuid/next)
|
||||
pages (get-in state [:workspace-data :pages-index])
|
||||
unames (ctst/retrieve-used-names pages)
|
||||
unames (cp/retrieve-used-names pages)
|
||||
page (get-in state [:workspace-data :pages-index page-id])
|
||||
name (ctst/generate-unique-name unames (:name page))
|
||||
name (cp/generate-unique-name unames (:name page))
|
||||
|
||||
no_thumbnails_objects (->> (:objects page)
|
||||
(d/mapm (fn [_ val] (dissoc val :use-for-thumbnail?))))
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
(:require
|
||||
[app.common.data :as d]
|
||||
[app.common.geom.point :as gpt]
|
||||
[app.common.pages :as cp]
|
||||
[app.common.pages.changes-builder :as pcb]
|
||||
[app.common.pages.helpers :as cph]
|
||||
[app.common.spec :as us]
|
||||
|
@ -33,7 +34,7 @@
|
|||
|
||||
flows (get-in page [:options :flows] [])
|
||||
unames (into #{} (map :name flows))
|
||||
name (ctst/generate-unique-name unames "Flow-1")
|
||||
name (cp/generate-unique-name unames "Flow 1")
|
||||
|
||||
new-flow {:id (uuid/next)
|
||||
:name name
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
(pcb/with-objects objects))]
|
||||
(let [group-name (if (= 1 (count shapes))
|
||||
(:name (first shapes))
|
||||
"Component-1")]
|
||||
"Component 1")]
|
||||
(dwg/prepare-create-group it
|
||||
objects
|
||||
page-id
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
[app.common.pages.helpers :as cph]
|
||||
[app.common.spec :as us]
|
||||
[app.common.types.page :as ctp]
|
||||
[app.common.types.shape-tree :as ctt]
|
||||
[app.common.types.shape.interactions :as ctsi]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.main.data.modal :as md]
|
||||
|
@ -290,7 +289,7 @@
|
|||
move to the desired position, and recalculate parents and frames as needed."
|
||||
[all-objects page ids delta it]
|
||||
(let [shapes (map (d/getf all-objects) ids)
|
||||
unames (volatile! (ctt/retrieve-used-names (:objects page)))
|
||||
unames (volatile! (cp/retrieve-used-names (:objects page)))
|
||||
update-unames! (fn [new-name] (vswap! unames conj new-name))
|
||||
all-ids (reduce #(into %1 (cons %2 (cph/get-children-ids all-objects %2))) (d/ordered-set) ids)
|
||||
ids-map (into {} (map #(vector % (uuid/next))) all-ids)
|
||||
|
@ -367,7 +366,7 @@
|
|||
(let [update-flows (fn [flows]
|
||||
(reduce
|
||||
(fn [flows frame]
|
||||
(let [name (ctt/generate-unique-name @unames "Flow-1")
|
||||
(let [name (cp/generate-unique-name @unames "Flow 1")
|
||||
_ (vswap! unames conj name)
|
||||
new-flow {:id (uuid/next)
|
||||
:name name
|
||||
|
|
|
@ -271,16 +271,89 @@
|
|||
(ptk/data-event :layout/update ids)
|
||||
(dwu/commit-undo-transaction undo-id))))))
|
||||
|
||||
(defn fix-child-sizing
|
||||
[objects parent-changes shape]
|
||||
|
||||
(let [parent (-> (cph/get-parent objects (:id shape))
|
||||
(d/deep-merge parent-changes))
|
||||
|
||||
auto-width? (ctl/auto-width? parent)
|
||||
auto-height? (ctl/auto-height? parent)
|
||||
col? (ctl/col? parent)
|
||||
row? (ctl/row? parent)
|
||||
|
||||
all-children (->> parent :shapes (map (d/getf objects)))]
|
||||
|
||||
(cond-> shape
|
||||
;; If the parent is hug width and the direction column
|
||||
;; change to fixed when ALL children are fill
|
||||
(and col? auto-width? (every? ctl/fill-width? all-children))
|
||||
(assoc :layout-item-h-sizing :fix)
|
||||
|
||||
;; If the parent is hug height and the direction is column
|
||||
;; change to fixed when ANY children is fill
|
||||
(and col? auto-height? (ctl/fill-height? shape))
|
||||
(assoc :layout-item-v-sizing :fix)
|
||||
|
||||
;; If the parent is hug width and the direction row
|
||||
;; change to fixed when ANY children is fill
|
||||
(and row? auto-width? (ctl/fill-width? shape))
|
||||
(assoc :layout-item-h-sizing :fix)
|
||||
|
||||
;; If the parent is hug height and the direction row
|
||||
;; change to fixed when ALL children are fill
|
||||
(and row? auto-height? (every? ctl/fill-height? all-children))
|
||||
(assoc :layout-item-v-sizing :fix))))
|
||||
|
||||
(defn fix-parent-sizing
|
||||
[objects ids-set changes parent]
|
||||
|
||||
(let [auto-width? (ctl/auto-width? parent)
|
||||
auto-height? (ctl/auto-height? parent)
|
||||
col? (ctl/col? parent)
|
||||
row? (ctl/row? parent)
|
||||
|
||||
all-children
|
||||
(->> parent :shapes
|
||||
(map (d/getf objects))
|
||||
(map (fn [shape]
|
||||
(if (contains? ids-set (:id shape))
|
||||
(d/deep-merge shape changes)
|
||||
shape))))]
|
||||
|
||||
(cond-> parent
|
||||
;; Col layout and parent is hug-width if all children are fill-width
|
||||
;; change parent to fixed
|
||||
(and col? auto-width? (every? ctl/fill-width? all-children))
|
||||
(assoc :layout-item-h-sizing :fix)
|
||||
|
||||
;; Col layout and parent is hug-height if any children is fill-height
|
||||
;; change parent to fixed
|
||||
(and col? auto-height? (some ctl/fill-height? all-children))
|
||||
(assoc :layout-item-v-sizing :fix)
|
||||
|
||||
;; Row layout and parent is hug-width if any children is fill-width
|
||||
;; change parent to fixed
|
||||
(and row? auto-width? (some ctl/fill-width? all-children))
|
||||
(assoc :layout-item-h-sizing :fix)
|
||||
|
||||
;; Row layout and parent is hug-height if all children are fill-height
|
||||
;; change parent to fixed
|
||||
(and row? auto-height? (every? ctl/fill-height? all-children))
|
||||
(assoc :layout-item-v-sizing :fix))))
|
||||
|
||||
(defn update-layout-child
|
||||
[ids changes]
|
||||
(ptk/reify ::update-layout-child
|
||||
ptk/WatchEvent
|
||||
(watch [_ state _]
|
||||
(let [objects (wsh/lookup-page-objects state)
|
||||
children-ids (->> ids (mapcat #(cph/get-children-ids objects %)))
|
||||
parent-ids (->> ids (map #(cph/get-parent-id objects %)))
|
||||
layout-ids (->> ids (filter (comp ctl/layout? (d/getf objects))))
|
||||
undo-id (js/Symbol)]
|
||||
(rx/of (dwu/start-undo-transaction undo-id)
|
||||
(dwc/update-shapes ids #(d/deep-merge (or % {}) changes))
|
||||
(ptk/data-event :layout/update (d/concat-vec layout-ids parent-ids))
|
||||
(dwc/update-shapes children-ids (partial fix-child-sizing objects changes))
|
||||
(dwc/update-shapes parent-ids (partial fix-parent-sizing objects (set ids) changes))
|
||||
(ptk/data-event :layout/update ids)
|
||||
(dwu/commit-undo-transaction undo-id))))))
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
[app.common.geom.point :as gpt]
|
||||
[app.common.geom.shapes :as gsh]
|
||||
[app.common.math :as mth]
|
||||
[app.common.pages :as cp]
|
||||
[app.common.pages.changes-builder :as pcb]
|
||||
[app.common.pages.helpers :as cph]
|
||||
[app.common.spec :as us :refer [max-safe-int min-safe-int]]
|
||||
|
@ -493,7 +494,7 @@
|
|||
(- y vb-y (/ vb-height 2))
|
||||
y))
|
||||
|
||||
unames (ctst/retrieve-used-names objects)
|
||||
unames (cp/retrieve-used-names objects)
|
||||
|
||||
svg-name (str/replace (:name svg-data) ".svg" "")
|
||||
|
||||
|
|
|
@ -77,6 +77,11 @@
|
|||
;; Delete the thumbnail first so if we interrupt we can regenerate after
|
||||
(->> (rp/cmd! :upsert-file-object-thumbnail params)
|
||||
(rx/catch #(rx/empty)))
|
||||
|
||||
;; Remove the thumbnail temporary. If the user changes pages the thumbnail is regenerated
|
||||
(rx/of #(update % :workspace-thumbnails assoc object-id nil))
|
||||
|
||||
;; Send the update to the back-end
|
||||
(->> blob-result
|
||||
(rx/merge-map
|
||||
(fn [blob]
|
||||
|
|
|
@ -27,23 +27,21 @@
|
|||
|
||||
(defn- draw-thumbnail-canvas!
|
||||
[canvas-node img-node]
|
||||
(ts/raf
|
||||
(fn []
|
||||
(try
|
||||
(when (and (some? canvas-node) (some? img-node))
|
||||
(let [canvas-context (.getContext canvas-node "2d")
|
||||
canvas-width (.-width canvas-node)
|
||||
canvas-height (.-height canvas-node)]
|
||||
(.clearRect canvas-context 0 0 canvas-width canvas-height)
|
||||
(.drawImage canvas-context img-node 0 0 canvas-width canvas-height)
|
||||
(try
|
||||
(when (and (some? canvas-node) (some? img-node))
|
||||
(let [canvas-context (.getContext canvas-node "2d")
|
||||
canvas-width (.-width canvas-node)
|
||||
canvas-height (.-height canvas-node)]
|
||||
(.clearRect canvas-context 0 0 canvas-width canvas-height)
|
||||
(.drawImage canvas-context img-node 0 0 canvas-width canvas-height)
|
||||
|
||||
;; Set a true on the next animation frame, we make sure the drawImage is completed
|
||||
(ts/raf
|
||||
#(dom/set-data! canvas-node "ready" "true"))
|
||||
true))
|
||||
(catch :default err
|
||||
(.error js/console err)
|
||||
false)))))
|
||||
;; Set a true on the next animation frame, we make sure the drawImage is completed
|
||||
(ts/raf
|
||||
#(dom/set-data! canvas-node "ready" "true"))
|
||||
true))
|
||||
(catch :default err
|
||||
(.error js/console err)
|
||||
false)))
|
||||
|
||||
(defn- remove-image-loading
|
||||
"Remove the changes related to change a url for its embed value. This is necessary
|
||||
|
@ -78,8 +76,12 @@
|
|||
(gsh/selection-rect (concat [shape] all-children))
|
||||
(-> shape :points gsh/points->selrect))
|
||||
|
||||
fixed-width (mth/clamp width 250 2000)
|
||||
fixed-height (/ (* height fixed-width) width)
|
||||
[fixed-width fixed-height]
|
||||
(if (> width height)
|
||||
[(mth/clamp width 250 2000)
|
||||
(/ (* height (mth/clamp width 250 2000)) width)]
|
||||
[(/ (* width (mth/clamp height 250 2000)) height)
|
||||
(mth/clamp height 250 2000)])
|
||||
|
||||
image-url (mf/use-state nil)
|
||||
observer-ref (mf/use-var nil)
|
||||
|
@ -289,6 +291,6 @@
|
|||
:height height}
|
||||
[:img {:ref frame-image-ref
|
||||
:src @image-url
|
||||
:width width
|
||||
:height height
|
||||
:width fixed-width
|
||||
:height fixed-height
|
||||
:on-load on-image-load}]])])]))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue