From abb76d8b9e0eac38067555aeed1874e2e144820c Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 27 Aug 2026 10:43:02 +0000 Subject: [PATCH] :recycle: Reuse embed param for exporter static renders The bitmap and svg renderers requested image embedding with a new render-embed parameter while the render entrypoint already supports an equivalent one, so both were semantically duplicated knobs. - switch exporters to the existing :embed parameter - drop the render-embed schema entry and resolution logic - populate the images cache only when embedding is active so non embedding consumers do not download every object image upfront SVG exports of shapes with image fills now contain embedded data uris instead of url references; this restores the original intent of the exporter rewrite and keeps svg and bitmaps deterministic. AI-assisted-by: glm-5.3-flash --- exporter/src/app/renderer/bitmap.cljs | 2 +- exporter/src/app/renderer/svg.cljs | 2 +- frontend/src/app/render.cljs | 28 +++++++++++++++++---------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/exporter/src/app/renderer/bitmap.cljs b/exporter/src/app/renderer/bitmap.cljs index 32188b2d9a..69642cd244 100644 --- a/exporter/src/app/renderer/bitmap.cljs +++ b/exporter/src/app/renderer/bitmap.cljs @@ -58,9 +58,9 @@ (p/let [params {:file-id file-id :page-id page-id :share-id share-id + :embed true :object-id (mapv :id objects) :route "objects" - :render-embed true :skip-children skip-children :wasm (when is-wasm "true") :scale scale} diff --git a/exporter/src/app/renderer/svg.cljs b/exporter/src/app/renderer/svg.cljs index fdd9b7c0de..a39c26fa18 100644 --- a/exporter/src/app/renderer/svg.cljs +++ b/exporter/src/app/renderer/svg.cljs @@ -345,7 +345,7 @@ (p/let [params {:file-id file-id :page-id page-id :share-id share-id - :render-embed true + :embed true :object-id (mapv :id objects) :route "objects"} uri (-> (cf/get-internal-uri) diff --git a/frontend/src/app/render.cljs b/frontend/src/app/render.cljs index c94cd3b451..10bd70fd25 100644 --- a/frontend/src/app/render.cljs +++ b/frontend/src/app/render.cljs @@ -126,7 +126,7 @@ :skip-children skip-children}]])))))) (defn- fetch-objects-bundle - [& {:keys [file-id page-id share-id object-id] :as options}] + [& {:keys [file-id page-id share-id object-id embed?] :as options}] (ptk/reify ::fetch-objects-bundle ptk/WatchEvent (watch [_ state _] @@ -146,10 +146,16 @@ (rx/map (fn [objects] (render/adapt-objects-for-shape objects object-id))) (rx/merge-map (fn [objects] - (rx/concat - (->> (render/populate-images-cache objects) - (rx/ignore)) - (rx/of #(assoc % :objects objects)))))))))) + (if-not embed? + (rx/of #(assoc % :objects objects)) + + ;; Populate the images cache before rendering so + ;; data-uri substitutions are instantly available + ;; on the first paint. + (rx/concat + (->> (render/populate-images-cache objects) + (rx/ignore)) + (rx/of #(assoc % :objects objects))))))))))) (def ^:private schema:render-objects [:map {:title "render-objets"} @@ -157,7 +163,6 @@ [:file-id ::sm/uuid] [:share-id {:optional true} ::sm/uuid] [:embed {:optional true} :boolean] - [:render-embed {:optional true} :boolean] [:skip-children {:optional true} :boolean] [:object-id [:or [::sm/set ::sm/uuid] ::sm/uuid]]]) @@ -173,10 +178,13 @@ (defn- render-objects [params] (try - (let [{:keys [file-id page-id embed render-embed share-id object-id skip-children wasm scale] :as params} - (coerce-render-objects-params params) - embed (if (some? render-embed) render-embed embed)] - (st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id)) + (let [{:keys [file-id page-id embed share-id object-id skip-children wasm scale] :as params} + (coerce-render-objects-params params)] + (st/emit! (fetch-objects-bundle :file-id file-id + :page-id page-id + :share-id share-id + :object-id object-id + :embed? embed)) (if (uuid? object-id) (mf/html [:& object-svg