0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-24 13:41:39 -05:00

Select on track row/column selects cells

This commit is contained in:
alonso.torres 2023-12-05 16:42:48 +01:00
parent 88d259a123
commit c609d2dec6
4 changed files with 60 additions and 14 deletions

View file

@ -1146,22 +1146,30 @@
(assoc parent :shapes (into [] (reverse new-shapes)))))
(defn shapes-by-row
(defn cells-by-row
[parent index]
(->> (:layout-grid-cells parent)
(filter (fn [[_ {:keys [row row-span]}]]
(and (>= (inc index) row)
(< (inc index) (+ row row-span)))))
(map second)
(mapcat :shapes)))
(map second)))
(defn shapes-by-column
(defn cells-by-column
[parent index]
(->> (:layout-grid-cells parent)
(filter (fn [[_ {:keys [column column-span]}]]
(and (>= (inc index) column)
(< (inc index) (+ column column-span)))))
(map second)
(map second)))
(defn shapes-by-row
[parent index]
(->> (cells-by-row parent index)
(mapcat :shapes)))
(defn shapes-by-column
[parent index]
(->> (cells-by-column parent index)
(mapcat :shapes)))
(defn cells-coordinates

View file

@ -7,6 +7,7 @@
(ns app.main.data.workspace.grid-layout.editor
(:require
[app.common.geom.rect :as grc]
[app.common.types.shape.layout :as ctl]
[app.main.data.workspace.state-helpers :as wsh]
[potok.core :as ptk]))
@ -84,3 +85,18 @@
(-> local
(update :vbox merge (select-keys srect [:x :y :x1 :x2 :y1 :y2])))))))))))
(defn select-track-cells
[grid-id type index]
(ptk/reify ::select-track-cells
ptk/UpdateEvent
(update [_ state]
(let [objects (wsh/lookup-page-objects state)
parent (get objects grid-id)
cells
(if (= type :column)
(ctl/cells-by-column parent index)
(ctl/cells-by-row parent index))
selected (into #{} (map :id) cells)]
(assoc-in state [:workspace-grid-edition grid-id :selected] selected)))))

View file

@ -957,7 +957,7 @@
value))
(mf/defc grid-track-info
[{:keys [is-col? type index column set-column-value set-column-type remove-element reorder-track hover-track]}]
[{:keys [is-col? type index column set-column-value set-column-type remove-element reorder-track hover-track on-select-track]}]
(let [new-css-system (mf/use-ctx ctx/new-css-system)
drop-track
@ -978,6 +978,13 @@
(fn []
(hover-track type index false)))
handle-select-track
(mf/use-fn
(mf/deps on-select-track type index)
(fn []
(when on-select-track
(on-select-track type index))))
[dprops dref]
(h/use-sortable
:data-type "penpot/grid-track"
@ -998,7 +1005,8 @@
:on-pointer-leave pointer-leave}
[:div {:class (stl/css :track-info-container)}
[:div {:class (stl/css :track-info-dir-icon)}
[:div {:class (stl/css :track-info-dir-icon)
:on-click handle-select-track}
(if is-col? i/flex-vertical-refactor i/flex-horizontal-refactor)]
[:div {:class (stl/css :track-info-value)}
@ -1057,7 +1065,8 @@
i/minus]])))
(mf/defc grid-columns-row
[{:keys [is-col? expanded? column-values toggle add-new-element set-column-value set-column-type remove-element reorder-track hover-track] :as props}]
[{:keys [is-col? expanded? column-values toggle add-new-element set-column-value set-column-type
remove-element reorder-track hover-track on-select-track] :as props}]
(let [new-css-system (mf/use-ctx ctx/new-css-system)
column-num (count column-values)
@ -1098,7 +1107,8 @@
:set-column-type set-column-type
:remove-element remove-element
:reorder-track reorder-track
:hover-track hover-track}])]])]
:hover-track hover-track
:on-select-track on-select-track}])]])]
[:div.grid-columns
[:div.grid-columns-header
@ -1119,7 +1129,8 @@
:set-column-type set-column-type
:remove-element remove-element
:reorder-track reorder-track
:hover-track hover-track}])]])])))
:hover-track hover-track
:on-select-track on-select-track}])]])])))
;; LAYOUT COMPONENT
@ -1695,6 +1706,12 @@
(fn [type index hover?]
(st/emit! (dwsl/hover-layout-track ids type index hover?))))
handle-select-track
(mf/use-fn
(mf/deps ids)
(fn [type index]
(st/emit! (dwge/select-track-cells (first ids) type index))))
set-column-value
(mf/use-fn
(mf/deps ids)
@ -1720,7 +1737,7 @@
handle-locate-grid
(mf/use-callback
(fn []
(st/emit! (dwge/locate-board (first ids))))) ]
(st/emit! (dwge/locate-board (first ids)))))]
(if new-css-system
[:div {:class (stl/css :grid-layout-menu)}
@ -1767,7 +1784,8 @@
:set-column-type set-column-type
:remove-element remove-element
:reorder-track reorder-track
:hover-track hover-track}]
:hover-track hover-track
:on-select-track handle-select-track}]
[:& grid-columns-row {:is-col? false
:expanded? @grid-rows-open?
@ -1778,7 +1796,8 @@
:set-column-type set-column-type
:remove-element remove-element
:reorder-track reorder-track
:hover-track hover-track}]]
:hover-track hover-track
:on-select-track handle-select-track}]]
[:div {:class (stl/css :row)}
[:& gap-section {:gap-selected? gap-selected?
:on-change set-gap

View file

@ -222,15 +222,18 @@
}
.track-info-dir-icon {
cursor: pointer;
border-radius: $br-8 0 0 $br-8;
background-color: var(--input-background-color);
padding: 0 $s-8;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
height: 100%;
}
&:hover svg {
stroke: var(--icon-foreground-hover);
}
}
.track-info-value {