Merge pull request #6714 from penpot/niwinz-staging-fix-path-edition

🐛 Fix unexpected exception on selectiong node on non path shape
This commit is contained in:
Alejandro Alonso 2025-06-18 10:45:36 +02:00 committed by GitHub
commit 2a5b087aa4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 17 deletions

View file

@ -470,6 +470,8 @@
"Given a content and a set of points return all the segments in the path "Given a content and a set of points return all the segments in the path
that uses the points" that uses the points"
[content points] [content points]
(assert (impl/path-data? content) "expected path data instance")
(let [point-set (set points)] (let [point-set (set points)]
(loop [result (transient []) (loop [result (transient [])
prev-point nil prev-point nil

View file

@ -46,24 +46,25 @@
(i/icon-xref :snap-nodes (stl/css :snap-nodes-icon :pathbar-icon))) (i/icon-xref :snap-nodes (stl/css :snap-nodes-icon :pathbar-icon)))
(defn check-enabled [content selected-points] (defn check-enabled [content selected-points]
(let [segments (path.segm/get-segments-with-points content selected-points) (when content
num-segments (count segments) (let [segments (path.segm/get-segments-with-points content selected-points)
num-points (count selected-points) num-segments (count segments)
points-selected? (seq selected-points) num-points (count selected-points)
segments-selected? (seq segments) points-selected? (seq selected-points)
;; max segments for n points is (n × (n -1)) / 2 segments-selected? (seq segments)
max-segments (-> num-points ;; max segments for n points is (n × (n -1)) / 2
(* (- num-points 1)) max-segments (-> num-points
(/ 2)) (* (- num-points 1))
is-curve? (some #(path.segm/is-curve? content %) selected-points)] (/ 2))
is-curve? (some #(path.segm/is-curve? content %) selected-points)]
{:make-corner (and points-selected? is-curve?) {:make-corner (and points-selected? is-curve?)
:make-curve (and points-selected? (not is-curve?)) :make-curve (and points-selected? (not is-curve?))
:add-node segments-selected? :add-node segments-selected?
:remove-node points-selected? :remove-node points-selected?
:merge-nodes segments-selected? :merge-nodes segments-selected?
:join-nodes (and points-selected? (>= num-points 2) (< num-segments max-segments)) :join-nodes (and points-selected? (>= num-points 2) (< num-segments max-segments))
:separate-nodes segments-selected?})) :separate-nodes segments-selected?})))
(mf/defc path-actions* (mf/defc path-actions*
[{:keys [shape edit-path]}] [{:keys [shape edit-path]}]