Skip to content

Commit fa3c6a1

Browse files
committed
enhance item tree arrow handling
1 parent 85363ee commit fa3c6a1

File tree

5 files changed

+46
-48
lines changed

5 files changed

+46
-48
lines changed

src/renderer/core.cljs

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
[renderer.timeline.events]
3636
[renderer.timeline.subs]
3737
[renderer.tool.core]
38+
[renderer.tree.events]
3839
[renderer.utils.dom :as dom]
3940
[renderer.utils.error :as error]
4041
[renderer.utils.keyboard :as keyb]

src/renderer/element/events.cljs

-14
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,6 @@
1818
(h/select el-k multi?)
1919
(history.h/finalize "Select element"))))
2020

21-
(rf/reg-event-db
22-
::select-up
23-
(fn [db [_ multi?]]
24-
(-> db
25-
(h/select-up multi?)
26-
(history.h/finalize "Select up"))))
27-
28-
(rf/reg-event-db
29-
::select-down
30-
(fn [db [_ multi?]]
31-
(-> db
32-
(h/select-down multi?)
33-
(history.h/finalize "Select down"))))
34-
3521
(rf/reg-event-db
3622
::toggle-prop
3723
(fn [db [_ key prop]]

src/renderer/element/handlers.cljs

-18
Original file line numberDiff line numberDiff line change
@@ -292,24 +292,6 @@
292292
[db]
293293
(mapv :key (top-selected-sorted db)))
294294

295-
(defn select-up
296-
([db multi?]
297-
(select-up db (last (top-selected-sorted-keys db)) multi?))
298-
([db k multi?]
299-
(let [i (index db k)]
300-
(select db (if (= i (dec (count (siblings db k))))
301-
(:parent (element db k))
302-
(get (siblings db k) (inc i))) multi?))))
303-
304-
(defn select-down
305-
([db multi?]
306-
(select-down db (first (top-selected-sorted-keys db)) multi?))
307-
([db k multi?]
308-
(let [i (index db k)]
309-
(select db (if (zero? i)
310-
(:parent (element db k))
311-
(get (siblings db k) (dec i))) multi?))))
312-
313295
(defn invert-selection
314296
[db]
315297
(reduce (fn [db {:keys [key tag]}]

src/renderer/tree/events.cljs

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
(ns renderer.tree.events
2+
(:require
3+
[re-frame.core :as rf]))
4+
5+
(rf/reg-fx
6+
::focus
7+
(fn [[k direction]]
8+
(let [list-elements (.from js/Array (.querySelectorAll js/document ".tree-sidebar .list-item-button"))
9+
current-el (first (.querySelectorAll js/document (str ".tree-sidebar [data-id='" (name k) "']")))
10+
i (.indexOf list-elements current-el)
11+
element (get list-elements (case direction
12+
:up (if (zero? i) (dec (count list-elements)) (dec i))
13+
:down (if (< i (dec (count list-elements))) (inc i) 0)))]
14+
(.focus element))))
15+
16+
(rf/reg-event-fx
17+
::select-up
18+
(fn [_ [_ k]]
19+
{::focus [k :up]}))
20+
21+
(rf/reg-event-fx
22+
::select-down
23+
(fn [_ [_ k]]
24+
{::focus [k :down]}))

src/renderer/tree/views.cljs

+21-16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
[renderer.element.events :as-alias element.e]
1010
[renderer.element.subs :as-alias element.s]
1111
[renderer.frame.events :as-alias frame.e]
12+
[renderer.tree.events :as-alias e]
1213
[renderer.utils.dom :as dom]
1314
[renderer.utils.keyboard :as keyb]))
1415

@@ -73,26 +74,29 @@
7374
(if children? collapse-button-width 0))))
7475

7576
(defn key-down-handler
76-
[e el-k]
77-
(let [ctrl? (.-ctrlKey e)]
78-
(case (.-key e)
79-
"ArrowUp"
80-
(do (.stopPropagation e)
81-
(rf/dispatch [::element.e/select-up ctrl?]))
77+
[e k]
78+
(case (.-key e)
79+
"ArrowUp"
80+
(do (.stopPropagation e)
81+
(rf/dispatch [::e/select-up k]))
82+
83+
"ArrowDown"
84+
(do (.stopPropagation e)
85+
(rf/dispatch [::e/select-down k]))
8286

83-
"ArrowDown"
84-
(do (.stopPropagation e)
85-
(rf/dispatch [::element.e/select-down ctrl?]))
87+
"ArrowLeft"
88+
(do (.stopPropagation e)
89+
(rf/dispatch [::document.e/collapse-el k]))
8690

87-
"ArrowLeft"
88-
(do (.stopPropagation e)
89-
(rf/dispatch [::document.e/collapse-el el-k]))
91+
"ArrowRight"
92+
(do (.stopPropagation e)
93+
(rf/dispatch [::document.e/expand-el k]))
9094

91-
"ArrowRight"
92-
(do (.stopPropagation e)
93-
(rf/dispatch [::document.e/expand-el el-k]))
95+
"Enter"
96+
(do (.stopPropagation e)
97+
(rf/dispatch [::element.e/select k (.-ctrlKey e)]))
9498

95-
nil)))
99+
nil))
96100

97101
(defn list-item-button
98102
[{:keys [key selected? children] :as el} depth hovered? collapsed?]
@@ -101,6 +105,7 @@
101105
{:class [(when selected? "selected")
102106
(when hovered? "hovered")]
103107
:tab-index 0
108+
:data-id key
104109
:role "menuitem"
105110
:on-double-click #(rf/dispatch [::frame.e/pan-to-element key])
106111
:on-pointer-enter #(rf/dispatch [::document.e/set-hovered-keys #{key}])

0 commit comments

Comments
 (0)