Merge pull request #6588 from penpot/niwinz-develop-fix-boolean

🐛 Fix incorrect bool shape creation
This commit is contained in:
Andrey Antukh 2025-05-29 11:38:47 +02:00 committed by GitHub
commit eafea7aec9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 18 additions and 11 deletions

View File

@ -33,6 +33,12 @@
(def boolean-or-nil? (def boolean-or-nil?
(some-fn nil? boolean?)) (some-fn nil? boolean?))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Commonly used transducers
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def xf:map-id (map :id))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Data Structures ;; Data Structures
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -64,15 +64,15 @@
(-> (lookup-page state file-id page-id) (-> (lookup-page state file-id page-id)
(get :objects)))) (get :objects))))
(defn process-selected-shapes (defn process-selected
([objects selected] ([objects selected]
(process-selected-shapes objects selected nil)) (process-selected objects selected nil))
([objects selected {:keys [omit-blocked?] :or {omit-blocked? false}}] ([objects selected {:keys [omit-blocked?] :or {omit-blocked? false}}]
(letfn [(selectable? [id] (letfn [(selectable? [id]
(and (contains? objects id) (and (contains? objects id)
(or (not omit-blocked?) (or (not omit-blocked?)
(not (get-in objects [id :blocked] false)))))] (not (dm/get-in objects [id :blocked] false)))))]
(let [selected (->> selected (cfh/clean-loops objects))] (let [selected (->> selected (cfh/clean-loops objects))]
(into (d/ordered-set) (into (d/ordered-set)
(filter selectable?) (filter selectable?)
@ -95,7 +95,7 @@
([state page-id options] ([state page-id options]
(let [objects (lookup-page-objects state page-id) (let [objects (lookup-page-objects state page-id)
selected (dm/get-in state [:workspace-local :selected])] selected (dm/get-in state [:workspace-local :selected])]
(process-selected-shapes objects selected options)))) (process-selected objects selected options))))
(defn lookup-shape (defn lookup-shape
([state id] ([state id]

View File

@ -44,7 +44,7 @@
:frame-id (:frame-id head) :frame-id (:frame-id head)
:parent-id (:parent-id head) :parent-id (:parent-id head)
:name name :name name
:shapes (vec shapes)} :shapes (into [] d/xf:map-id shapes)}
shape shape
(-> shape (-> shape
@ -69,8 +69,8 @@
(-> type d/name str/capital) (-> type d/name str/capital)
ids ids
(->> (or ids (dsh/lookup-selected state)) (->> (or ids (dsh/get-selected-ids state))
(cph/clean-loops objects)) (dsh/process-selected objects))
xform xform
(comp (comp

View File

@ -159,14 +159,15 @@
(let [objects (dsh/lookup-page-objects state) (let [objects (dsh/lookup-page-objects state)
selected (dm/get-in state [:workspace-local :selected])] selected (dm/get-in state [:workspace-local :selected])]
{:objects objects :selected selected})) {:objects objects :selected selected}))
st/state (fn [v1 v2] st/state
(and (identical? (:objects v1) (:objects v2)) (fn [v1 v2]
(= (:selected v1) (:selected v2)))))) (and (identical? (:objects v1) (:objects v2))
(= (:selected v1) (:selected v2))))))
(def selected-shapes (def selected-shapes
(l/derived (l/derived
(fn [{:keys [objects selected]}] (fn [{:keys [objects selected]}]
(dsh/process-selected-shapes objects selected)) (dsh/process-selected objects selected))
selected-shapes-data =)) selected-shapes-data =))
(defn make-selected-ref (defn make-selected-ref