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

View file

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

View file

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

View file

@ -253,7 +253,8 @@
(d/without-nils (d/without-nils
{:type (-> (obj/get export "type") parse-keyword) {:type (-> (obj/get export "type") parse-keyword)
:scale (obj/get export "scale" 1) :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 (defn parse-exports
[^js exports] [^js exports]

View file

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

View file

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

View file

@ -176,10 +176,10 @@
(t/is (= (-> (. shape -exports) (aget 0) (aget "type")) "pdf")) (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 "scale")) 2))
(t/is (= (-> (. shape -exports) (aget 0) (aget "suffix")) "test")) (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"}]) (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" (t/testing " - flipX"
(set! (.-flipX shape) true) (set! (.-flipX shape) true)