Adds skipChildren to export parameters

This commit is contained in:
alonso.torres 2025-06-06 11:59:14 +02:00
parent b385f055e0
commit 29466b47fe
7 changed files with 30 additions and 19 deletions

View file

@ -47,7 +47,7 @@
(s/def ::params
(s/keys :req-un [::exports ::profile-id]
:opt-un [::wait ::name]))
:opt-un [::wait ::name ::skip-children]))
(defn handler
[{:keys [:request/auth-token] :as exchange} {:keys [exports] :as params}]
@ -60,7 +60,7 @@
(handle-multiple-export exchange (assoc params :exports exports)))))
(defn- handle-single-export
[exchange {:keys [export wait profile-id name] :as params}]
[exchange {:keys [export wait profile-id name skip-children] :as params}]
(let [topic (str profile-id)
resource (rsc/create (:type export) (or name (:name export)))
@ -90,7 +90,7 @@
:resource-id (:id resource)
:status "error"
:cause (ex-message cause)})))
export (assoc export :skip-children skip-children)
proc (-> (rd/render export on-progress)
(p/then (constantly resource))
(p/catch on-error))]
@ -99,7 +99,7 @@
(assoc exchange :response/body (dissoc resource :path)))))
(defn- handle-multiple-export
[exchange {:keys [exports wait profile-id name] :as params}]
[exchange {:keys [exports wait profile-id name skip-children] :as params}]
(let [resource (rsc/create :zip (or name (-> exports first :name)))
total (count exports)
topic (str profile-id)
@ -141,7 +141,8 @@
proc (-> (p/do
(p/loop [exports (seq exports)]
(when-let [export (first exports)]
(when-let [export (-> (first exports)
(assoc :skip-children skip-children))]
(p/do
(rd/render export append)
(p/recur (rest exports)))))

View file

@ -17,7 +17,7 @@
[promesa.core :as p]))
(defn render
[{:keys [file-id page-id share-id token scale type objects] :as params} on-object]
[{:keys [file-id page-id share-id token scale type objects skip-children] :as params} on-object]
(letfn [(prepare-options [uri]
#js {:screen #js {:width bw/default-viewport-width
:height bw/default-viewport-height}
@ -56,7 +56,8 @@
:page-id page-id
:share-id share-id
:object-id (mapv :id objects)
:route "objects"}
:route "objects"
:skip-children skip-children}
uri (-> (cf/get :public-uri)
(assoc :path "/render.html")
(assoc :query (u/map->query-string params)))]

View file

@ -444,14 +444,16 @@
(mf/defc object-svg
{::mf/wrap [mf/memo]}
[{:keys [objects object-id embed]
[{:keys [objects object-id embed skip-children]
:or {embed false}
:as props}]
(let [object (get objects object-id)
object (cond-> object
(:hide-fill-on-export object)
(assoc :fills []))
(assoc :fills [])
skip-children
(assoc :shapes []))
{:keys [width height] :as bounds} (gsb/get-object-bounds objects object {:ignore-margin? false})
vbox (format-viewbox bounds)

View file

@ -253,7 +253,8 @@
(d/without-nils
{:type (-> (obj/get export "type") parse-keyword)
:scale (obj/get export "scale" 1)
:suffix (obj/get export "suffix" "")})))
:suffix (obj/get export "suffix" "")
:skip-children (obj/get export "skipChildren" false)})))
(defn parse-exports
[^js exports]

View file

@ -1138,6 +1138,7 @@
{:cmd :export-shapes
:profile-id (:profile-id @st/state)
:wait true
:skip-children (:skip-children value false)
:exports [{:file-id file-id
:page-id page-id
:object-id id

View file

@ -62,7 +62,7 @@
(mf/defc object-svg
{::mf/wrap-props false}
[{:keys [object-id embed]}]
[{:keys [object-id embed skip-children]}]
(let [objects (mf/deref ref:objects)]
;; Set the globa CSS to assign the page size, needed for PDF
@ -79,11 +79,12 @@
[:& render/object-svg
{:objects objects
:object-id object-id
:embed embed}])))
:embed embed
:skip-children skip-children}])))
(mf/defc objects-svg
{::mf/wrap-props false}
[{:keys [object-ids embed]}]
[{:keys [object-ids embed skip-children]}]
(when-let [objects (mf/deref ref:objects)]
(for [object-id object-ids]
(let [objects (render/adapt-objects-for-shape objects object-id)]
@ -91,7 +92,8 @@
{:objects objects
:key (str object-id)
:object-id object-id
:embed embed}]))))
:embed embed
:skip-children skip-children}]))))
(defn- fetch-objects-bundle
[& {:keys [file-id page-id share-id object-id] :as options}]
@ -121,6 +123,7 @@
[:file-id ::sm/uuid]
[:share-id {:optional true} ::sm/uuid]
[:embed {:optional true} :boolean]
[:skip-children {:optional true} :boolean]
[:object-id
[:or
::sm/uuid
@ -135,7 +138,7 @@
(defn- render-objects
[params]
(let [{:keys [file-id page-id embed share-id object-id] :as params} (render-objects-decoder params)]
(let [{:keys [file-id page-id embed share-id object-id skip-children] :as params} (render-objects-decoder params)]
(if-not (render-objects-validator params)
(do
(js/console.error "invalid arguments")
@ -152,7 +155,8 @@
:page-id page-id
:share-id share-id
:object-id object-id
:embed embed}])
:embed embed
:skip-children skip-children}])
(mf/html
[:& objects-svg
@ -160,7 +164,8 @@
:page-id page-id
:share-id share-id
:object-ids (into #{} object-id)
:embed embed}]))))))
:embed embed
:skip-children skip-children}]))))))
;; ---- COMPONENTS SPRITE

View file

@ -176,10 +176,10 @@
(t/is (= (-> (. shape -exports) (aget 0) (aget "type")) "pdf"))
(t/is (= (-> (. shape -exports) (aget 0) (aget "scale")) 2))
(t/is (= (-> (. shape -exports) (aget 0) (aget "suffix")) "test"))
(t/is (= (get-in @store (get-shape-path :exports)) [{:type :pdf :scale 2 :suffix "test"}]))
(t/is (= (get-in @store (get-shape-path :exports)) [{:type :pdf :scale 2 :suffix "test" :skip-children false}]))
(set! (.-exports shape) #js [#js {:type 10 :scale 2 :suffix "test"}])
(t/is (= (get-in @store (get-shape-path :exports)) [{:type :pdf :scale 2 :suffix "test"}])))
(t/is (= (get-in @store (get-shape-path :exports)) [{:type :pdf :scale 2 :suffix "test" :skip-children false}])))
(t/testing " - flipX"
(set! (.-flipX shape) true)