From 7ab5f241dadea37665df89be186b5e739621e478 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 10 Mar 2026 12:21:13 +0000 Subject: [PATCH] :bug: Fix TypeError when path content is nil in get-points calls Use nil-safe path/get-points wrapper (some-> based) instead of direct path.segment/get-points calls in edition.cljs to prevent 'Cannot read properties of undefined (reading get)' crash. Add nil-safety test to verify path/get-points returns nil without throwing when content is nil. Signed-off-by: Andrey Antukh --- common/test/common_tests/types/path_data_test.cljc | 9 +++++++++ frontend/src/app/main/data/workspace/path/edition.cljs | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/common/test/common_tests/types/path_data_test.cljc b/common/test/common_tests/types/path_data_test.cljc index 7a37438252..5e6298191e 100644 --- a/common/test/common_tests/types/path_data_test.cljc +++ b/common/test/common_tests/types/path_data_test.cljc @@ -270,6 +270,15 @@ (t/is (= result1 result2)) (t/is (= result2 result3)))) +(t/deftest path-get-points-nil-safe + (t/testing "path/get-points returns nil for nil content without throwing" + (t/is (nil? (path/get-points nil)))) + (t/testing "path/get-points returns correct points for valid content" + (let [content (path/content sample-content) + points (path/get-points content)] + (t/is (some? points)) + (t/is (= 3 (count points)))))) + (defn calculate-extremities "Calculate extremities for the provided content. A legacy implementation used mainly as reference for testing" diff --git a/frontend/src/app/main/data/workspace/path/edition.cljs b/frontend/src/app/main/data/workspace/path/edition.cljs index a97947ea05..f5118f16ab 100644 --- a/frontend/src/app/main/data/workspace/path/edition.cljs +++ b/frontend/src/app/main/data/workspace/path/edition.cljs @@ -59,8 +59,8 @@ content (get shape :content) new-content (path/apply-content-modifiers content content-modifiers) - old-points (path.segment/get-points content) - new-points (path.segment/get-points new-content) + old-points (path/get-points content) + new-points (path/get-points new-content) point-change (->> (map hash-map old-points new-points) (reduce merge))] (when (and (some? new-content) (some? shape)) @@ -162,7 +162,7 @@ start-position (apply min-key #(gpt/distance start-position %) selected-points) content (st/get-path state :content) - points (path.segment/get-points content)] + points (path/get-points content)] (rx/concat ;; This stream checks the consecutive mouse positions to do the dragging @@ -255,7 +255,7 @@ start-delta-y (dm/get-in modifiers [index cy] 0) content (st/get-path state :content) - points (path.segment/get-points content) + points (path/get-points content) point (-> content (nth (if (= prefix :c1) (dec index) index)) (path.helpers/segment->point)) handler (-> content (nth index) (path.segment/get-handler prefix))