From f94c9cdb02632bebc9a0c13664550c079e174aa7 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Thu, 22 Jan 2026 09:29:33 +0100 Subject: [PATCH] :bug: Fix objects sorting for thumbnail generation --- frontend/src/app/render_wasm/api.cljs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index 9055dea1ec..15ec2b010c 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -1131,10 +1131,28 @@ maintaining proper shape reference consistency in WASM." [objects] ;; Get IDs in tree order starting from root (uuid/zero) - (let [ordered-ids (cfh/get-children-ids-with-self objects uuid/zero)] - (into [] - (keep #(get objects %)) - ordered-ids))) + ;; If root doesn't exist (e.g., filtered thumbnail data), fall back to + ;; finding top-level shapes (those without a parent in objects) and + ;; traversing from there. + (if (contains? objects uuid/zero) + ;; Normal case: traverse from root + (let [ordered-ids (cfh/get-children-ids-with-self objects uuid/zero)] + (into [] + (keep #(get objects %)) + ordered-ids)) + ;; Fallback for filtered data (thumbnails): find top-level shapes and traverse + (let [;; Find shapes whose parent is not in the objects map (top-level in this subset) + top-level-ids (->> (vals objects) + (filter (fn [shape] + (not (contains? objects (:parent-id shape))))) + (map :id)) + ;; Get all children in order for each top-level shape + all-ordered-ids (into [] + (mapcat #(cfh/get-children-ids-with-self objects %)) + top-level-ids)] + (into [] + (keep #(get objects %)) + all-ordered-ids)))) (defn set-objects "Set all shape objects for rendering.